Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

FXPELIVE

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

 
program z1_v14_k3;
Uses Crt;
 Const
                                                        FileName='z1.txt';
d=6;
n=3;
 Type
Stroka=Array[1..d] of Char; PtrStr=^Stroka;
Tekst=Array[1..n] of PtrStr;
 Var
f:Text;
data:Tekst;
a:Char;
                                 i,j,p:Byte; int_,frac_:Word; result:Real;
procedure ReadFromFile;
var i,j:Byte;
Begin
Assign(f,FileName);
{$I-} Reset(f); {$I+}
  if (IOResult=0) then
  begin
i:=1;
While (i<=n) and (not eof(f)) Do
begin
New(data[i]);
FillChar(data[i]^, sizeof(data[i]^), Chr(0)) ;
j:=1;
 while (j<=d) and (not eoln(f)) Do
 begin
 Read(f,data[i]^[j]);
 inc(j)
 end;   ReadLn(f);
if(sizeof(data[i]^)=0) then begin Dispose(data[i]); data[i]:=Nil; end;
inc(i);
end;
Close(f);
  end else Writeln('ошибка при открытии файла');
End;
 
procedure PrintToScreen;
var i,j:Byte;
Begin
i:=1;
While (i<=n)  Do
begin
 j:=1;
 While (j<=d) and (data[i]<>nil) Do
 begin
 Write(data[i]^[j]);
 inc(j);
 end;
if (data[i]<>Nil) then Dispose(data[i]);
WriteLn;
inc(i);
end;
End;
 
 
function Check1stLine:Boolean;
var j:Byte;
Begin
j:=1;
while (j<=d) and ( (Ord(data[1]^[j])>=48) and (Ord(data[1]^[j])<=57) ) do inc(j);
if (Ord(data[1]^[j-1])-48) mod 2 = 0 then
 Check1stLine:=true else Check1stLine:=false;
End;
 
procedure PrintSubStr(a:Char);
var j:Byte;
Begin
j:=d;
while (j>=1) and (data[2]^[j]<>a) do dec(j);
while j<=d do begin write(data[2]^[j]); inc(j); end;
writeln;
End;
 
function ch2dig(c:Char; base,exp:Byte):Word;
var i:Byte; tmp:Word;
begin
tmp:=1;
for i:=1 to exp do tmp:=tmp*base;
ch2dig:=(Ord(c)-48)*tmp;
end;
procedure PrintChislo;
var i,j:Byte; p:byte;
int_,frac_:Word; Result:Real; e:Byte;
Begin
result:=0;
i:=2;
while i<=n do begin
if (data[i]<>nil) then
 begin
 int_:=0;
 frac_:=0;
  p:=1;
  while (p<=d) and not((data[i]^[p]=',') or (data[i]^[p]='.') or (data[i]^[p]='/')) do inc(p);
 j:=1;
 
 if (data[i]^[p]='/') then
  begin
e:=0;
for j:=p-1 DownTo 1 do
if (Ord(data[i]^[j])>=48) and (Ord(data[i]^[j])<=57) then
int_:= int_ + ch2dig(data[i]^[j],10,p-j-1 -e) else inc(e);
e:=0;
for j:=d DownTo (p+1) do
if (data[i]^[j]>='0') and (data[i]^[j]<='9') then
frac_:=frac_ + ch2dig(data[i]^[j],10,d-j -e) else inc(e);
  end else continue;;
result:=int_/frac_;
Writeln(int_,'/',frac_,'=','$',result:3:2,'$');
inc(i);
 end
else if (data[i]^[p]='.') or (data[i]^[p]=',') then
begin
end
else continue;
 
end;
End;
 
 
BEGIN
ClrScr;
 
ReadFromFile;
if Check1stLine then
begin
Writeln('Число четное, поэтому введите буковку с которой будем выводить последовательность символов: ');
Write('a='); ReadLn(a);
PrintSubStr(a);
readkey;
end
 else
 begin
 {
 если нашли запятую или точку то до неъ умножаем на 10^j в джитой если после то на 1/10^j
 если находим / то делим левое число на правое
 }
PrintChislo;
 
 
 readkey;
 end;
 
 
PrintToScreen;
 
{ReadKey; }
END.

Всего записей: 348 | Зарегистр. 27-04-2006 | Отправлено: 20:08 19-03-2011 | Исправлено: FXPELIVE, 12:16 27-03-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru