Форум «Всё о Паскале» _ Задачи _ задача на вывод часто встречающихся цифр
Автор: Kosmik 25.11.2009 20:47
Натуральные числа вводятся с клавиатуры до тех пор, пока не будет введено число -1. Написать программу, выводящую введенные цифры: сначала выводится наиболее часто встречающаяся цифра, в конце наименее встречающаяся цифра.
Подскажите пожалуйста как ее решить...может через массив?
Автор: volvo 25.11.2009 21:08
Цитата
может через массив?
Может и через массив, если в задании не оговорено обратное. Но обычно такие задачи даются как раз на умение работать с последовательностями, не сохраняя их. Тем более, что речь о цифрах, а не о числах, тут точно без массива можно обойтись.
Автор: Unconnected 25.11.2009 21:34
Тут с массивом, но он используется не для хранения элементов последовательности:)
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 25.11.2009 21:42
Ну, я взял и ввел первое число 10, что будет?
Автор: Kosmik 26.11.2009 0:04
Программка конечно работает но выдает не тот результат....она выводит все цифры от 0 до 9 и пишет как часто их используют, но мне все цифры-то выводить не надо.
Автор: Unconnected 26.11.2009 1:12
Цитата
Ну, я взял и ввел первое число 10, что будет?
Так а что в задаче надо то?.. В названии темы речь идёт о цифрах, в первом посте - сначала идёт речь о вводе чисел, и тут же - о выводе самых часто встречающихся цифр. Моя программа только на ввод цифр (0..9) расчитана.
Автор: volvo 26.11.2009 1:50
Цитата
Моя программа только на ввод цифр (0..9) расчитана.
ну, так возьми и перечитай задание. Задача: вводить ЧИСЛА (пока не будет введено -1), и считать, какая из ЦИФР, присутствующих в этих числах встречается чаще всего.
Автор: Unconnected 26.11.2009 2:23
Тогда так:
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 26.11.2009 8:59
Цитата(Unconnected @ 25.11.2009 22:23)
Тогда так:
Unconnected, мне кажется нужно выводить ВСЕ встретившиеся цифры, а не только самые (я так понял). Я, может, сделал бы так..
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 26.11.2009 9:29
Фу ты, я чуть не перепутал volvo с Kosmik )). Кто угадает, почему?
Автор: Kosmik 26.11.2009 14:29
Цитата(Lapp @ 26.11.2009 7:29)
Фу ты, я чуть не перепутал volvo с Kosmik )). Кто угадает, почему?
У нас аватры похожие получились
Автор: Lapp 26.11.2009 16:24
Цитата(Kosmik @ 26.11.2009 10:29)
У нас аватры похожие получились
Точно!! ) У них даже выражение.. эээ... лица )) одинаковое!
Автор: Unconnected 26.11.2009 17:03
Цитата
Unconnected, мне кажется нужно выводить ВСЕ встретившиеся цифры, а не только самые (я так понял).
А мне кажется, только избранные) Ибо задание я понял так:
Цитата
Написать программу, выводящую введенные цифры: сначала выводится наиболее часто встречающаяся цифра, в конце наименее встречающаяся цифра.