В общем у меня возникла проблема с литерным типом((
В общем я хочу считать два числа к примеру 5 10.
Но они записаны в файле, и записаны следующим образом:
5 10
10 или 5
Читать с переводом строки:
ReadLn(f, n1); Readln(f, n2);Почему это именно литерный тип? Читаем как числа...
Это то да, а я вот считываю посимвольно каждую цифру) Как так сделать? (я работаю с длинной арифметикой)
Значит делай:
while not eoln(f) do
read(f, ch);
end;
readln(f);
В общем я вам сейчас дам этот кусок программы, а Вы мне скажите в чём дело.
...
A[0]:=0;
Read(ch);
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=A[0] downto 1 do
A[i+1]:=A[i];
A[1]:=x;
Inc(A[0]);
Read(ch)
end;
B[0]:=0;
Read(ch);
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=B[0] downto 1 do
B[i+1]:=B[i];
B[1]:=x;
Inc(B[0]);
Read(ch)
end;
...
Я ж написал тебе - переведи строку: ReadLn, иначе ты пытаешься читать символы #13 #10, а тебе оно надо?
...
A[0]:=0;
Read(ch);
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=A[0] downto 1 do
A[i+1]:=A[i];
A[1]:=x;
Inc(A[0]);
Read(ch)
end;
Readln (input);
B[0]:=0;
Read(ch);
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=B[0] downto 1 do
B[i+1]:=B[i];
B[1]:=x;
Inc(B[0]);
Read(ch)
end;
...
10<enter>
5<enter>
<конец файла>
Какой конец строки?
В общем вот программа:
Program N_2;
type TLong=array[0..102] of byte;
Var A,B,S:TLong;
ch:char;
i,x,p,k,max:integer;
Begin
assign (input,'input.txt');
reset (input);
assign (output,'output.txt');
rewrite (output);
A[0]:=0;
Read(ch);
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=A[0] downto 1 do
A[i+1]:=A[i];
A[1]:=x;
Inc(A[0]);
Read(ch)
end;
Readln(input);
B[0]:=0;
Read (ch);
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=B[0] downto 1 do
B[i+1]:=B[i];
B[1]:=x;
Inc(B[0]);
Read(ch)
end;
k:=1; s[0]:=0; s[1]:=0;
If A[0]>B[0] then max:=A[0]
else max:=B[0];
For i:=1 to max do
Begin
p:=0;
p:=p+A[i]+B[i];
If p>9 then begin
s[i]:=p mod 10;
p:=p div 10;
End
else s[i]:=p;
inc(s[0]);
End;
{For i:=A[0] downto 1 do
Write (a[i]);
Writeln;
For i:=B[0] downto 1 do
Write (b[i]);
Writeln; }
For i:=S[0] downto 1 do
Write (S[i]);
End.
Сереж, а зачем так сложно?
Нельзя просто считать в строку, а потом ее обработать?
типа так:
ReadLn(s);
A[0]:=Length(s);
for i:=1 to Length(s) do A[A[0]-i+1]:=s[i];
М | Не дело это, в теории разбирать задачу. Переношу. |
Ну в принципе можно и строкой)) Но меня учителя попросили чтобы я разобрал именно данный способ)
Ну так что там с считыванием второго числа? У меня до сих пор не работает...
Ну, у меня вот так отработало:
A[0]:=0;, но печататься у тебя ничего не будет, все символы, которые есть в S - служебные (непечатные), надо их переводить назад, прибавляя 48...
Read(ch);
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=A[0] downto 1 do
A[i+1]:=A[i];
A[1]:=x;
Inc(A[0]);
Read(ch)
end;
B[0]:=0;
while not (ch in ['0' .. '9']) do read(ch); { <--- пропускаем все до цифры }
While ch in ['0'..'9'] do
begin
x:=ord(ch)-48;
for i:=B[0] downto 1 do
B[i+1]:=B[i];
B[1]:=x;
Inc(B[0]);
Read(ch)
end;
Забыл про перенаправление... В файл же печатается... Вот почему я не люблю работать с Input-ом и Output-ом...
Разъясните что такое TP (turbo pascal?) и FP?
Добавлено через 2 мин.
Кстати спасибо за пояснение. Теперь программа работает)))
Ах, ну да я догадывался) Спасибо.