IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> регулярные типы.
сообщение
Сообщение #1


самовнушение всегда спасает.
*

Группа: Пользователи
Сообщений: 27
Пол: Женский
Реальное имя: Анастасия

Репутация: -  1  +


условие - Дан непустой текст из цифр, за которым следует точка. Напечатать цифру, наиболее часто встречающуюся в этом тексте (если таких цифр несколько, напечатать любую из них).

мысли такие..может кто-то поправит пожалуйста?)) unsure.gif

program V_20;
var a:array [1..100] of char;
k,i,j,m,p,n:integer;

begin
writeln ('vvedite text iz cifr. po oknchaniju vvoda nazmite tochku');
k:=0;

repeat
readln (a[i]);
k:=k+1;
until a[i]<>'.';

m:=1;
p:=1;
for i:=1 to k do

begin
n:=0;
for j:=1 to k do

begin
if a[i]=a[j] then n:=n+1;
end;

if n>m then
begin
m:=n;
p:=i;
end;

end;

writeln ( ' naibolee chasto vstrechajushiesja chislo:', a[p] );
readln;

end.


--------------------
думай дважды, чтоб не пожалеть однажды.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ducky @ 12.12.2010 0:53) *
условие - Дан непустой текст из цифр, за которым следует точка. Напечатать цифру, наиболее часто встречающуюся в этом тексте (если таких цифр несколько, напечатать любую из них).

мысли такие..может кто-то поправит пожалуйста?)) unsure.gif

program V_20;
var a:array [1..100] of char;
k,i,j,m,p,n:integer;

begin
writeln ('vvedite text iz cifr. po oknchaniju vvoda nazmite tochku');
k:=0;

repeat
readln (a[i]);
k:=k+1;
until a[i]<>'.';
...


привет, ducky smile.gif
Ммм..
Немного многовато ошибок.. )) Но ничего, прорвемся..
Во-первых, почему у тебя массив из char? У тебя только она цифра на строку может быть?
Во-вторых, у тебя неправильное условие окончания ввода, нужно
until a[i]='.';

В третьих.. зачем тебе вообще массив? Разбор и подсчет можно делать прямо при вводе.
Вот, смотри, я сделал только ввод и подсчет, без нахождения максимально повторяющейся цмфры.
var
s: string;
i: integer;
c: char;

const
f: array ['0'..'9'] of integer = (0,0,0,0,0,0,0,0,0,0);

begin
WriteLn('Type in text of digits, ending with a period');
repeat
ReadLn(s);
for i:=1 to Length(s) do if s[i] in ['0'..'9'] then Inc(f[s[i]])
until Pos('.',s)>0;
for c:='0' to '9' do WriteLn(c,': ',f[c]);
ReadLn
end.

И вот результат работы:
Running "c:\...\f\fp101211_ducky\fp101211_ducky_lapp.exe "
Type in text of digits, ending with a period
12345
23456
34567890
123
2345
3456
23.
0: 1
1: 2
2: 5
3: 7
4: 5
5: 5
6: 3
7: 1
8: 1
9: 1


Разбирайся и задавай вопросы. Когда разберешься - добавим поиск максимума )).
Okay?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


самовнушение всегда спасает.
*

Группа: Пользователи
Сообщений: 27
Пол: Женский
Реальное имя: Анастасия

Репутация: -  1  +


for c:='0' to '9' do WriteLn(c,': ',f[c]);
этот рядочек подсчитывает количество всех цифр, которые мы ввели, да?)

пока всё понятно)) yahoo!.gif


--------------------
думай дважды, чтоб не пожалеть однажды.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ducky @ 12.12.2010 14:51) *
for c:='0' to '9' do WriteLn(c,': ',f[c]);
этот рядочек подсчитывает количество всех цифр, которые мы ввели, да?)
Нет, Настя, этот только выводит результаты.

Подсчитывает вот этот:
if s[i] in ['0'..'9'] then Inc(f[s[i]])

А точнее, даже просто конец этой строки, то есть
Inc(f[s[i]])


Принцип такой..
Представь себе, что ты сидишь при входе на выставку. Твоя задача - подсчитать, сколько заходит мужчин, женщин, мальчиков и девочек (детей легко отличить, поскольку они проходят бесплатно). Перед тобой лежит лист бумаги, расчерченный на 4 графы: муж, жен, мал, дев. Когда заходит человек, ты добавляешь палочку в нужную графу. А потом ты подсчитаешь, сколько палочек в каждой графе..

В программе аналог этого листа - массив f, в котором как бы 10 граф - для каждой цифры по графе. Если текущая цифра на входе, например, 3, то ты должна "нарисовать палочку" в графе 3, если 0, то в графу 0, и так далее.
Ты знаешь, что такое Inc(x)? Это простое увеличение x на 1, то есть эквивалентно x:=x+1.
Поставить палочку в графу 3 - эквивалентно Inc(f['3']), в графу 0 - эквивалентно Inc(f['0']). Иначе говоря, мы всякий раз увеличиваем счетчик с индексом, равным самой цифре:
Inc(f[s[i]])

А задача условного оператора
if s[i] in ['0'..'9'] then 
- просто не пустить в подсчет нецифровые символы (например, точку, или если случайно введут..).

Такой подсчет делается после ввода каждой строки (проходим по всей строке). Так что по окончании ввода у нас уже готов массив, представляющий собой количества вхождений каждой цифры.
А то, что ты написала - это всего лишь вывод этого массива на печать. Этот вывод можно вообще убрать, поскольку условием задачи это не требуется. То есть это промежуточный вывод результатовв процессе написания и отладки программы.

Если тебе еще не совсем ясно, как это работает - спрашивай еще, не стесняйся. Даже если кажется, что вопрос глупый.

Когда разберешься с этим - сделаем поиск максимума. Хорошо?
Успехов тебе.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


самовнушение всегда спасает.
*

Группа: Пользователи
Сообщений: 27
Пол: Женский
Реальное имя: Анастасия

Репутация: -  1  +


да! разобралась, всё понятно пока что..спасибо)


--------------------
думай дважды, чтоб не пожалеть однажды.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ducky @ 15.12.2010 19:21) *
да! разобралась, всё понятно пока что..спасибо)

Так ты доделала задачу?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


самовнушение всегда спасает.
*

Группа: Пользователи
Сообщений: 27
Пол: Женский
Реальное имя: Анастасия

Репутация: -  1  +


нет..


--------------------
думай дважды, чтоб не пожалеть однажды.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ducky @ 19.12.2010 14:12) *
нет..

и?..
smile.gif

расхотелось?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


самовнушение всегда спасает.
*

Группа: Пользователи
Сообщений: 27
Пол: Женский
Реальное имя: Анастасия

Репутация: -  1  +


вдохновения нету. rolleyes.gif

хотя если серьезно, то не знаю как сформулировать. при подсчете оно должно каждой цифре присвоить 1..и если эта же цифра встречается еще раз, то еще плюс 1..и так пока всё не подсчитает..


--------------------
думай дважды, чтоб не пожалеть однажды.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ducky @ 19.12.2010 16:45) *
при подсчете оно должно каждой цифре присвоить 1..и если эта же цифра встречается еще раз, то еще плюс 1..и так пока всё не подсчитает..
Ну да. Конечно. Это же очень просто.
Максимум сможешь найти теперь?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


самовнушение всегда спасает.
*

Группа: Пользователи
Сообщений: 27
Пол: Женский
Реальное имя: Анастасия

Репутация: -  1  +


тогда я наверное совсем тупая)) ypriamii.gif



--------------------
думай дважды, чтоб не пожалеть однажды.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(ducky @ 19.12.2010 17:43) *
тогда я наверное совсем тупая)) ypriamii.gif

Я, наверное, тоже.. ypriamii.gif
Никак не могу понять, как ни вчитываюсь в твои слова, что же именно тебе неясно? Ты говори яснее! smile.gif
Смотри, у нас есть массив частот каждой буквы f. Тебе надо найти в нем максимум.
Добавь еще одну переменную символьного типа:
  m: char;

Потом добавь некий код в самом низу.
Сначала предположим, что больше всего - нулей:
Цитата
m:= '0';

А потом пройдем по всем остальным и сравним:
  for c:='1' to '9' do if f[c]>f[m] then m:=c;

После этого в переменной m будет лежать та цифра, которая встречается больше других..
  WriteLn('The most frequent digit is ',m);

Так или не так? smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


самовнушение всегда спасает.
*

Группа: Пользователи
Сообщений: 27
Пол: Женский
Реальное имя: Анастасия

Репутация: -  1  +


 program V_8_20;
var s:string;
i:integer;
c,m:char;

const f:array ['0'..'9'] of integer = (0,0,0,0,0,0,0,0,0,0);

begin
writeln ('vvedite');

repeat
readln (s);
for i:=1 to length (s) do
if s[i] in ['0'..'9'] then inc(f[s[i]])
until pos ('.',s)>0;

for c:='0' to '9' do writeln (c,': ',f[c]);
readln;

m:='0';
for c:='1' to '9' do if f[c]>f[m] then m:=c;

writeln('naibolee chasto vstrechajushijsja element ',m);
readln;

end.

юпииии! спасибо)


это будет сильной наглостью просить еще одну мою "халтуру" глянуть? closedeyes.gif


--------------------
думай дважды, чтоб не пожалеть однажды.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ducky @ 20.12.2010 19:41) *
  writeln('naibolee chasto vstrechajushijsja element ',m)
;
Только в тексте не элементы - там буквы, цифры.. А то дойдет до того, что книгу будешь батареей называть )).

Цитата
юпииии! спасибо)
You DID it!! yes2.gif

Цитата
это будет сильной наглостью просить еще одну мою "халтуру" глянуть? closedeyes.gif
Задавая вопросы, ты поддерживаешь жизнь на -Мар..- тьфу, на Форуме! Спаси маленького зеленого форумчанина - создай новую тему! (они ими питаются))
Только с хорошим информативным названием.. (остальные для них ядовитые..)))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 15:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name