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 |
|