Помощь - Поиск - Пользователи - Календарь
Полная версия: задача на вывод часто встречающихся цифр
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Kosmik
Натуральные числа вводятся с клавиатуры до тех пор, пока не будет введено число -1. Написать программу, выводящую введенные цифры: сначала выводится наиболее часто встречающаяся цифра, в конце наименее встречающаяся цифра.

Подскажите пожалуйста как ее решить...может через массив? pardon.gif
volvo
Цитата
может через массив?
Может и через массив, если в задании не оговорено обратное. Но обычно такие задачи даются как раз на умение работать с последовательностями, не сохраняя их. Тем более, что речь о цифрах, а не о числах, тут точно без массива можно обойтись.
Unconnected
Тут с массивом, но он используется не для хранения элементов последовательности:)

var mas:array[0..9] of byte;
a,i,min,max:integer;
begin
for i:=0 to 9 do mas[i]:=0;
repeat
readln(a);
if (a<>-1) then inc(mas[a]);
until (a=-1);
min:=mas[0];max:=mas[0];
for i:=1 to 9 do
begin
if (min>mas[i]) then min:=mas[i];
if (max<mas[i]) then max:=mas[i];
end;
for i:=0 to 9 do
begin
if (min=mas[i]) then writeln('Reje vseh vstrechaetsya chislo ',i);
if (max=mas[i]) then writeln('Chaje vseh vstrechaetsya chislo ',i);
end;
readln;
end.
volvo
Ну, я взял и ввел первое число 10, что будет?
Kosmik

Программка конечно работает но выдает не тот результат....она выводит все цифры от 0 до 9 и пишет как часто их используют, но мне все цифры-то выводить не надо.
Unconnected
Цитата
Ну, я взял и ввел первое число 10, что будет?


Так а что в задаче надо то?.. В названии темы речь идёт о цифрах, в первом посте - сначала идёт речь о вводе чисел, и тут же - о выводе самых часто встречающихся цифр. Моя программа только на ввод цифр (0..9) расчитана.

volvo
Цитата
Моя программа только на ввод цифр (0..9) расчитана.
ну, так возьми и перечитай задание. Задача: вводить ЧИСЛА (пока не будет введено -1), и считать, какая из ЦИФР, присутствующих в этих числах встречается чаще всего.
Unconnected
Тогда так:

var mas:array[0..9] of byte;
a:string;
i,min,max,k,er:integer;

begin
for i:=0 to 9 do mas[i]:=0;
repeat
readln(a);
if (a<>'-1') then for i:=1 to length(a) do begin
val(a[i],k,er);
inc(mas[k]);
end;
until (a='-1');
min:=mas[0];max:=mas[0];
for i:=1 to 9 do
begin
if (min>mas[i]) then min:=mas[i];
if (max<mas[i]) then max:=mas[i];
end;
for i:=0 to 9 do
begin
if (min=mas[i]) then writeln('Reje vseh vstrechaetsya chislo ',i);
if (max=mas[i]) then writeln('Chaje vseh vstrechaetsya chislo ',i);
end;
readln;
end.
Lapp
Цитата(Unconnected @ 25.11.2009 22:23) *
Тогда так:
Unconnected, мне кажется нужно выводить ВСЕ встретившиеся цифры, а не только самые (я так понял).
Я, может, сделал бы так..
var
s: string;
i: integer;
Stat: array[' '..'9']of integer;
c,max: char;

begin
FillChar(Stat,SizeOf(Stat),#0);
repeat
ReadLn(s);
for i:=1 to Length(s) do Inc(Stat[s[i]]);
until s='-1';
Dec(Stat['1']);
repeat
max:=' ';
for c:='0' to '9' do if Stat[c]>Stat[max] then max:=c;
Stat[max]:=0;
WriteLn(max)
until max=' ';
ReadLn
end.
Тут я постарался избежать сортировки массива в чистом виде (и это избавило прогу от одного лишнего цикла и дополнительного массива). Кроме прочего, использование индекса массива и цикла типа char, надеюсь, полезно для обучения. И вообще, тут несколько хитростей, некоторые из них немного спорные.. ))

Здесь нету защиты от неправильного формата ввода.. Зато можно вводить по нескольку чисел на одной строке)). А вообще, конечно, такие вещи следует завершать по вводу пустой строки.
Lapp
Фу ты, я чуть не перепутал volvo с Kosmik )).
Кто угадает, почему? smile.gif
Kosmik
Цитата(Lapp @ 26.11.2009 7:29) *

Фу ты, я чуть не перепутал volvo с Kosmik )).
Кто угадает, почему? smile.gif


У нас аватры похожие получились smile.gif
Lapp
Цитата(Kosmik @ 26.11.2009 10:29) *
У нас аватры похожие получились smile.gif
Точно!! smile.gif) У них даже выражение.. эээ... лица )) одинаковое!
Unconnected
Цитата
Unconnected, мне кажется нужно выводить ВСЕ встретившиеся цифры, а не только самые (я так понял).


А мне кажется, только избранные) Ибо задание я понял так:
Цитата

Написать программу, выводящую введенные цифры: сначала выводится наиболее часто встречающаяся цифра, в конце наименее встречающаяся цифра.


Выводящую введенные цифры(дальше уточняется, какие именно):...
Цитата

Точно!! smile.gif) У них даже выражение.. эээ... лица )) одинаковое!


Я с первого поста ждал, пока volvo сюда ответит rolleyes.gif
volvo
Цитата
А мне кажется, только избранные)
Похоже, Lapp прав. Мне тоже кажется, что надо вывести ВСЕ цифры в порядке убывания частоты встречаемости.

Оффтоп (Показать/Скрыть)
Kosmik
Цитата(volvo @ 26.11.2009 15:09) *


Оффтоп (Показать/Скрыть)



Оффтоп (Показать/Скрыть)

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.