Помощь - Поиск - Пользователи - Календарь
Полная версия: Литерный тип данных)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Cheburashka
В общем у меня возникла проблема с литерным типом((

В общем я хочу считать два числа к примеру 5 10.
Но они записаны в файле, и записаны следующим образом:
5           10
10 или 5

И вот когда я считываю первое число (Read (ch);), то оно отлично сохраняется, а вот ко второму числу я никак нимагу перейти(( Разъясните мне пожалуйста, как это сделать!
volvo
Читать с переводом строки:
ReadLn(f, n1); Readln(f, n2);
Почему это именно литерный тип? Читаем как числа...
Cheburashka
Это то да, а я вот считываю посимвольно каждую цифру) Как так сделать? (я работаю с длинной арифметикой)
sheka
Цитата(Сергей Меркурьев @ 5.06.2009 16:59) *

Это то да, а я вот считываю посимвольно каждую цифру) Как так сделать? (я работаю с длинной арифметикой)

Код

Procedure probel;
begin
if ch=' ' then{здесь конекретно пробел,а можно и все что тебе не нужно}
begin
  read(fin,ch);
  probel'
end;
end;
volvo
Значит делай:
while not eoln(f) do
read(f, ch);
end;
readln(f);
Lapp
Цитата(Сергей Меркурьев @ 5.06.2009 17:52) *
проблема с литерным типом((
В общем я хочу считать два числа к примеру 5 10.
Я только не понял, как ты в тип Char собираешься считывать 10
Cheburashka
В общем я вам сейчас дам этот кусок программы, а Вы мне скажите в чём дело.

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

Где начинается строчка B[0]:=0, вот отсюда мне программа не считывает то что нужно!
volvo
Я ж написал тебе - переведи строку: ReadLn, иначе ты пытаешься читать символы #13 #10, а тебе оно надо?
Cheburashka
...
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;
...

Вы это имели ввиду? Если да то она считывает №26

Добавлено через 11 мин.
Ну так что? Ы чём здесь ошибка заключается?
volvo
Цитата
Если да то она считывает №26
Вот понимаешь, в чем дело? У меня - не считывает... Смотри:
Нажмите для просмотра прикрепленного файла
Как видишь, прочиталось все содержимое этих двух строк, посмотри на массивы A и B, и увидишь... У тебя в файле после последнего числа был перевод строки? Добавь, если не было:
10<enter>
5<enter>
<конец файла>
Cheburashka
Какой конец строки?
В общем вот программа:
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.
Lapp
Сереж, а зачем так сложно?
Нельзя просто считать в строку, а потом ее обработать?
типа так:

ReadLn(s);
A[0]:=Length(s);
for i:=1 to Length(s) do A[A[0]-i+1]:=s[i];


Я сначала подумал, что ты извращаешься, чтоб не ограничиваться длиной 255, а ты оказывается только до 102 все равно..

М
Не дело это, в теории разбирать задачу.
Переношу.

Cheburashka
Ну в принципе можно и строкой)) Но меня учителя попросили чтобы я разобрал именно данный способ)
Ну так что там с считыванием второго числа? У меня до сих пор не работает...
volvo
Ну, у меня вот так отработало:
  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;
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;
, но печататься у тебя ничего не будет, все символы, которые есть в S - служебные (непечатные), надо их переводить назад, прибавляя 48...
Lapp
Цитата(volvo @ 5.06.2009 19:14) *
но печататься у тебя ничего не будет, все символы, которые есть в S - служебные (непечатные), надо их переводить назад, прибавляя 48...
Почему? S же не символьный, а байты. Печатается. У меня напечатало 15 (как я понимаю, правильно). Но у меня нет ТР, только FP.
volvo
ypriamii.gif Забыл про перенаправление... В файл же печатается... Вот почему я не люблю работать с Input-ом и Output-ом...
Cheburashka
Разъясните что такое TP (turbo pascal?) и FP?

Добавлено через 2 мин.
Кстати спасибо за пояснение. Теперь программа работает)))
Lapp
Цитата(Сергей Меркурьев @ 5.06.2009 19:26) *
Разъясните что такое TP (turbo pascal?) и FP?
Да, а FP = FreePascal, http://freepascal.org/
Cheburashka
Ах, ну да я догадывался) Спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.