Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на символьный файл

Автор: Atom 30.01.2007 23:40

Определить, чего больше в символьном файле – цифр или букв ла-тинского алфавита.
Вод собствено такая не сложная задача, но чегото не как не получается, помогите... smile.gif

Автор: klem4 30.01.2007 23:48

Подобные задачи решались, поищи, а алгоритм такой: Читаешь символы из файла, исмотришь если символ - буква (ch in ['a'..'z', 'A'..'Z']) то увеличиваешь счетчик букв, иначе если символ - цифра, то увеличиваешь счетчик цифр, как работать с файлами, в том числе и типизированными (как раз твой вариант, у тебя будет file of char) можешь почитать тут: http://forum.pascal.net.ru/index.php?showtopic=3584

Автор: Atom 31.01.2007 3:11

rolleyes.gif

program fail;
var f:file of char;
c:char;
a,b:integer;
Begin
Assign(f,'file1.sim');
Rewrite(f);
writeln('Введите символы, окончание точка');
readln©;
while c<>'.' do
begin
write(f,c); readln©;
end;
reset(f);
write('Получен файл');
while not eof(f) do
begin
read(f,c);
write©;
end;
writeln;
a:=0;
b:=0;
begin
assign (f,'file1.sim');
reset (f);
while not eof (f) do
read (f,c);
while not eof (f) do
if c in ['a'..'z', 'A'..'Z'] then
a:=a+1
else
b:=b+1;
end;
close (f);
begin
if a>=b then writeln ('больше букв');
if a<b then writeln ('больше цифр');
end;
end.

Ну вот так у меня получилось, только не работает)) rolleyes.gif Что не так?)) wink.gif

Автор: volvo 31.01.2007 3:23

Кстати, тебе обязательно 2 счетчика? Недостаточно при встрече буквы увеличивать счетчик, а при встрече цифры - уменьшать? Тогда сравниваешь с нулем, и однозначно получаешь ответ, чего больше - букв или цифр...

Автор: klem4 31.01.2007 3:25

Вот как-то так

uses crt;

var
f: file of char;
ch: char;
a, b: Integer;

begin

clrscr;

assign(f, 'chars.ch');
rewrite(f);

repeat

readln(ch);

if ch <> '.' then write(f, ch);

until ch = '.';

reset(f);

a := 0; b := 0;

while not(eof(f)) do begin

read(f, ch);

if ch in ['a'..'z', 'A'..'Z'] then inc(a) else
if ch in ['0'..'9'] then inc(b);

end;

close(f);

if a > b then writeln('A') else
if b > a then writeln('B') else writeln('AB');

end.