Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на символьный файл
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Atom
Определить, чего больше в символьном файле – цифр или букв ла-тинского алфавита.
Вод собствено такая не сложная задача, но чегото не как не получается, помогите... smile.gif
klem4
Подобные задачи решались, поищи, а алгоритм такой: Читаешь символы из файла, исмотришь если символ - буква (ch in ['a'..'z', 'A'..'Z']) то увеличиваешь счетчик букв, иначе если символ - цифра, то увеличиваешь счетчик цифр, как работать с файлами, в том числе и типизированными (как раз твой вариант, у тебя будет file of char) можешь почитать тут: Файлы
Atom
rolleyes.gif
program fail;
var f:file of char;
    c:char;
    a,b:integer;
Begin
 Assign(f,'file1.sim');
 Rewrite(f);
writeln('Введите символы, окончание точка');
readln(c); 
  while c<>'.' do
    begin
      write(f,c);       readln(c);
    end;
    reset(f);     
 write('Получен файл');
  while not eof(f) do
     begin
       read(f,c);       
 write(c);      
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
Кстати, тебе обязательно 2 счетчика? Недостаточно при встрече буквы увеличивать счетчик, а при встрече цифры - уменьшать? Тогда сравниваешь с нулем, и однозначно получаешь ответ, чего больше - букв или цифр...
klem4
Вот как-то так

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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.