Другие языки программирования и технологии

Нужна помощь в ПАСКАЛЕ.

Дан текстовый файл, содержащий целые числа, организованные в одну строку. Определить, запись какого из них содержит меньшее количество четных цифр. Помогите решить.
DD
Djoni Djoni
337
Пиши на почту, 100 р. всего.
Скачай мой справочник и сделай сам.
Считывание чисел из нетепизированного файла в массив
var
f:text;
a:array[1..100]of integer;
i,k:integer;
begin
assign(f,'f');
reset(f);
while not eof(f) do
begin
inc(k);
read(f,a[k]);
end;
close(f);
for i:=1 to k do
write(a,' ');
end.
ИЖ
Ирина Жабина
2 592
Лучший ответ
Я вижу решение таким:
— читаем текстовый файл посимвольно
— если встречается символ цифры, то это число и если это символ чётной цифры, то увеличим счётчик
— любой другой символ означает, что ранее считанное число закончилось

var
  F : File of Char;
  Ch : Char;
  Num, CurNum : String;
  Kol, CurKol : Integer;

procedure SoWhat;
begin
  if Num = '' then
    begin
      Num := CurNum;
      Kol := CurKol;
    end
  else if Kol < CurKol then
    begin
      Num := CurNum;
      Kol := CurKol;
    end;
  CurNum := ''; CurKol := 0;
end;

begin
  Num := ''; CurNum := ''; CurKol := 0;
  Assign(F, 'filename');
  Reset(F);
  while Not EOF(F) do
    begin
      Read(F, Ch);
      if Ch in ['0'..'9'] then
        begin
          CurNum := CurNum + Ch;
          if Ch in ['0','2','4','6','8'] then Inc(CurKol);
        end
      else
        SoWhat;
    end;
  Close(F);
SoWhat;
  if Num <> '' then WriteLn(Num);
end.
Виктор Ххххххх
Виктор Ххххххх
73 883
Такс. Целые числа в текстовом файле, обычно их разделяют пробелом. Алгоритм такой: читаем число из файла, считаем сколько у него четных цифр, запоминаем его номер и количество четных цифр, затем ищем наименьшее. Ну наименьшее можно искать одновременно с чтением и подсчетом. Для подсчета четных цифр нужно проверить каждую цифру на остаток от деления на два, если остатка нету - цифра четная. Чтобы проверить все цифры, нужно за каждую итерацию проверки делить на 10 отбрасывая остаток. Погнали.

var
f: textfile;
a, b, n, mс, mn, i: integer;
//a - переменная для числа из файла.
//b - переменная для работы с цифрой числа
//c - количество четных цифр.
//n - номер читаемого числа.
//mс - переменная для запоминания количества четных цифр.
//mn - переменная для запоминания номера числа.
//i - счетчик цикла

begin
mn:= -1; //это делается для первичного присваивания числа и номера. при обработке первого числа сравнивать не с чем.. .
n:=0; //номер числа

AssignFile(f, 'input.txt'); //Присваиваем переменной файл
Reset(f); //Открываем на чтение\запись

while not eof(f) do //пока файл не закончился.. .
begin
read(f, a); //читаем число.
inc(n); //увеличиваем номер.

while a <> 0 do //пока число не равно нулю.. .
begin
b:=a mod 10; //присваиваем остаток от деления на 10
if b mod 2 = 0 then //если нет остатка от деления на 2 то.. .
inc(с) ; //увеличиваем количество четных цифр на 1
a:=a div 10; //далее делим число из файла на 10 отбрасывая остаток
end;
if mn >0 then //если номер уже был записан, то нужно сравнить с и mc, что из них меньше
begin
if (c < mc) //последнее найденое c меньше того что в памяти, то
begin
mc:=c; //присваиваем новое c
mn:=n; //не забываем про номер.
end;
end
else //если mn равен -1, а только такое возможно, значит присваиваем все не сравнивая.
begin
mс: =с;
mn:=n;
end;
end;

//В конце всей этой котовасии мы получим номер чила, который будет в перменной mn.
//Осталось только вывести это число на экран, повторно считав из файла.

for i:=1 to mn do //несколько раз перезапишем одну и ту же переменную до номера числа в памяти
begin
read(f, a); //читаем число из файла
end;

Close(f); //файл нам больше не нужен, закрываем.
//после цикла у нас есть найденое число, оно в переменной a, и его номер, он в переменной mn.

writeln('В числе ' + IntToStr(a) + ' меньше всего четных цифр');
writeln('Его номер: ' + IntToStr(mn));
readln;
end.

З. Ы. Не тестировалось на делфи, пишу по памяти синтаксиса.
Max Petrov
Max Petrov
18 376
Продавайте мебель, оптом
KG
Karen Grigoryan
1 026