Другие языки программирования и технологии
Нужна помощь в ПАСКАЛЕ.
Дан текстовый файл, содержащий целые числа, организованные в одну строку. Определить, запись какого из них содержит меньшее количество четных цифр. Помогите решить.
Пиши на почту, 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.
Скачай мой справочник и сделай сам.
Считывание чисел из нетепизированного файла в массив
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.
Я вижу решение таким:
— читаем текстовый файл посимвольно
— если встречается символ цифры, то это число и если это символ чётной цифры, то увеличим счётчик
— любой другой символ означает, что ранее считанное число закончилось
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.
— читаем текстовый файл посимвольно
— если встречается символ цифры, то это число и если это символ чётной цифры, то увеличим счётчик
— любой другой символ означает, что ранее считанное число закончилось
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.
Такс. Целые числа в текстовом файле, обычно их разделяют пробелом. Алгоритм такой: читаем число из файла, считаем сколько у него четных цифр, запоминаем его номер и количество четных цифр, затем ищем наименьшее. Ну наименьшее можно искать одновременно с чтением и подсчетом. Для подсчета четных цифр нужно проверить каждую цифру на остаток от деления на два, если остатка нету - цифра четная. Чтобы проверить все цифры, нужно за каждую итерацию проверки делить на 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.
З. Ы. Не тестировалось на делфи, пишу по памяти синтаксиса.
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.
З. Ы. Не тестировалось на делфи, пишу по памяти синтаксиса.
Продавайте мебель, оптом
Похожие вопросы
- Нужна помощь с паскалем!
- очень срочно нужна помощь по паскалю сижу на экзамене. дома буду обязательно отблагодарю и скину деньги если что
- нужна помощь с Паскалем
- Для чего нужна программа турбо паскаль? как ей программировать? и еще: как ее создали, с помощью каких программ?
- Здравствуйте нужна помощь по программе на языке паскаль
- задача на паскале нужна помощь
- Нужна скорая помощь по паскалю)))
- Двумерный массив/Турбо паскаль/нужна помощь=( А(12)Заменить отрицательные элементы стоящие на чётных местах цифрой 8.
- Задача на паскаль.нужна помощь
- нужна помощь.кто хорошо разбирается в паскале