![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
flashg |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
Для каждого слова заданного предложения указать долю согласных. Определить слово в котором доля согласных максимальна.
Задание - необходимо регить на PASCAL на TYRBO или BORLAND. Я нашёл pas фаил содержащий код программы для нахождения одной буквы в строке я его немного переделал и теперь он находит две буквы. Но прога сразу увеличелась на 50% ![]() а также у меня нет кода (я не знаю как его прописать) для второй части задания. Определить слово в котором доля согласных максимальна. ПОПРАКА :o что тут не то с текстом Изначальный код был такой Код PROGRAM PR3; var s1:string[20]; n,q:integer; BEGIN q:=-1; writeln('Введите слово (до 20 букв)'); read(s1); n:=pos('А',s1); if n>0 then BEGIN repeat n:=pos('А',s1); q:=q+1; delete(s1,n,1); until n=0; END else q:=0; write('Кол-во букв А =',q); END. я решил чуть чуть помеять т.е. большую А на маленькую а - и уже ничего оно верно не считает Код PROGRAM PR3; var s1:string[20]; n,q:integer; BEGIN q:=-1; writeln('Введите слово (до 20 букв)'); read(s1); n:=pos('а',s1); if n>0 then BEGIN repeat n:=pos('А',s1); q:=q+1; delete(s1,n,1); until n=0; END else q:=0; write('Кол-во букв а =',q); END. а я так надеялся что введу вот такой код Код PROGRAM PR3; var b,g:string[200]; n,q,m,r:integer; BEGIN q:=-1; r:=-1; writeln('Введите слово'); read(b); read(g); n:=pos('г',g); m:=pos('б',b); if n>0 then BEGIN repeat n:=pos('г',g); q:=q+1; delete(g,n,1); until n=0; end else q:=0; if m>0 then BEGIN repeat m:=pos('б',b); r:=r+1; delete(b,n,1); until m=0; end else r:=0; write('Кол-во букв б =',r); write('Кол-во букв г =',q); END. и забив те буквы что мне надо прога мне найдёт те буквы что встречаются и укажет их - и тут 0. хотя буквы б тут находит а буквы г - прописывает 0 В чём глюк ? ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата(flashg @ 4.08.05 17:39) :o что тут не то с текстом В общем так: программа, которую ты привел как неправильную, совершенно рабочая. Все дело - в кривости рук. Смотри внимательно: Цитата BEGIN q:=-1; writeln('Введите слово (до 20 букв)'); read(s1); n:=pos('а',s1); { это ты заменил, молодец } if n>0 then BEGIN repeat n:=pos('А',s1); { а это - забыл? } q:=q+1; delete(s1,n,1); until n=0; END else q:=0; write('Кол-во букв а =',q); END. Забыл, или не захотел заметить? И сразу же "что-то с кодом"? ДА !!! Но заметь, с ТВОИМ кодом, ты его исправил, так будь добр исправлять до конца !!! Теперь дальше. Цитата(flashg @ 4.08.05 17:39) Для каждого слова заданного предложения указать долю согласных. Идешь в FAQ и находишь там функцию разбиения строки на слова, это уже обсуждалось десятки раз, выкладывать сюда эту функцию еще раз у меня нет ни малейшего желания... Потом для КАЖДОГО слова (в цикле) проделываешь вот такую простую операцию:begin где _word - это массив слов, через который функция разбиения строки возвратит результат, а soglas - множество, содержащее все согласные буквы. А вот для этого: Цитата(flashg @ 4.08.05 17:39) Определить слово в котором доля согласных максимальна. тебе придется еще хранить максимальное значение count, но нахождение максимума "на лету" тоже неоднократно обсуждалось, и элементарно находится в поиске... |
Guest |
![]()
Сообщение
#3
|
Гость ![]() |
count := 0;
чем оно является - ошибка 3 |
flashg |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
сори выше написанное сообщение моё забыл залогится
|
flashg |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
сново не получается сделать чтобы считал более 1ной буквы в строке
Код PROGRAM PR3; var s1,s2:string[20]; n,m,q,r:integer; BEGIN q:=-1; writeln('Введите слово (до 20 букв)'); read(s1); n:=pos('а',s1); if n>0 then BEGIN repeat n:=pos('а',s1); q:=q+1; delete(s1,n,1); until n=0; end else q:=0; write('Кол-во букв а =',q); BEGIN r:=-1; read(s2); m:=pos('б',s2); if m>0 then BEGIN repeat m:=pos('б',s2); r:=r+1; delete(s2,m,1); until m=0; end else r:=0; write('Кол-во букв б =',r); end; END. и кажется что подсчёт буква а идёт не по их количество а сколькострок соодержит букву а а в FAQ (поиск) - я не нашёл заглавия (под темы) функцию разбиения строки на слова |
klem4 |
![]()
Сообщение
#6
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Что-то ты неясное замутил
![]() может так ? ;) uses crt; хотя конечно можно сделать и pos с удалением элементов из строки. вариант с POS uses crt; Сообщение отредактировано: klem4 - 6.08.2005 17:38 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата(flashg @ 6.08.05 16:50) а в FAQ (поиск) - я не нашёл заглавия (под темы) функцию разбиения строки на слова Значит, плохо искал: FAQ: Строки - Разбить на слова |
flashg |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
да это я и хотел получить хотя вот тут какое есть сомнение
вот задание (первая часть) Для каждого слова заданного предложения указать долю согласных. м.б я попутался и надо указать не количество букв б, в, г... а % или вообще количество слов в которых согласных больше ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
flashg, прекращай переливать из пустого в порожнее!
![]() |
flashg |
![]()
Сообщение
#10
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
Пост № 6
рассписывает именно то что я хотел добится от первой части задания Для каждого слова заданного предложения указать долю согласных. эта структура (пример) намного удобней при помощи него легче сделать список согласных чем при помощи Код PROGRAM PR3; var s1:string[20]; n,q:integer; BEGIN q:=-1; writeln('Введите слово (до 20 букв)'); read(s1); n:=pos('А',s1); if n>0 then BEGIN repeat n:=pos('А',s1); q:=q+1; delete(s1,n,1); until n=0; END else q:=0; write('Кол-во букв А =',q); END. или ты хочешь сказать что пост № 6 соодержит не правильный вариант я спомощью данного кода смог заменит буквы (обе буквы) и оно считает а в посте номер 2а он соодержит код при котором он мне пишет что а =0 б = 0 хотя буквы данные я вводил - значит глючит данный код. |
klem4 |
![]()
Сообщение
#11
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Вот тебе ЧЕТКОЕ решения по заданию, надеюсь слово с максимальной долей согласных найти сможешь ?
Цитата Для каждого слова заданного предложения указать долю согласных. uses crt; -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
flashg |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(klem4 @ 6.08.05 22:39) Вот тебе ЧЕТКОЕ решения по заданию, надеюсь слово с максимальной долей согласных найти сможешь ? маленькая проблема - это нормально ли я запустил прогу я ввожу текст провека задания одинадцать жму энтер для всех прописало 0% :o |
klem4 |
![]()
Сообщение
#13
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата(flashg @ 6.08.05 21:11) маленькая проблема - это нормально ли я запустил прогу я ввожу текст провека задания одинадцать жму энтер для всех прописало 0% :o по мойму по константе limits можно было понять, что программа раюотает с литиницей, а не кирилицей ... -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
flashg |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да иещё ранее в посте №6 первый код ты мне дал я его рассширел но есть маленькое но
достаточно ввести только этого и он всё посчитает т.е. не надо вводить OR вот что я заметил. |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Ну-ну... А для заглавных букв ты ЕЩЕ в 2 раза будешь увеличивать программу?
|
flashg |
![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(klem4 @ 6.08.05 23:14) по мойму по константе limits можно было понять, что программа раюотает с литиницей, а не кирилицей ... а вообще возможно сделать чтобы кирилицу понимала. Цитата(volvo @ 6.08.05 23:18) Ну-ну... А для заглавных букв ты ЕЩЕ в 2 раза будешь увеличивать программу? а есть спсоб лучше |
klem4 |
![]()
Сообщение
#17
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
так, помойму мы с тобой оба страшно тупим...могу предложить вот такой вариант, вроде можно еще короче. Щас дам еще варинт без массива.
uses crt; вот тебе версия без массив : uses crt; больше вопросов быть не должно. Сообщение отредактировано: klem4 - 6.08.2005 20:49 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
flashg |
![]()
Сообщение
#18
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
как насчёт примера с долями
Код uses crt; type Tstr = string; TWords = array[1..50] of TStr; var str:Tstr; words:TWords; n,j:integer; function GetWords(var s:Tstr; var W:TWords):integer; const limits=[#0..#32,'.',',','!','?',':',';']; var i,bword,count:integer; begin i:=1; count:=0; while(i<=Length(s)) do begin while(i<=length(s))and(s[i] in limits) do inc(i); if i<=length(s) then begin bword:=i; while(i<=length(s))and(not(s[i] in limits)) do inc(i); inc(count); W[count]:=copy(s,bword,i-bword); end; end; GetWords:=count; end; function GetP(var s:Tstr):integer; const [B][U]sogl=[#224..#256]-['а','е','ё','э','у','ю','и','о','ы','я']; [/U][/B] var i,p:integer; begin p:=0; for i:=1 to length(s) do if s[i] in sogl then inc(p); GetP:=p*100 div length(s); end; Begin clrscr; write('s='); readln(str); n:=GetWords(str,words); for j:=1 to n do writeln('Для слова ''',words[j],''' доля согласных = ',GetP(words[j]),'%'); readln End. я думал что надо поменять вот эту строчку а всё равно не воспринимает кирилицу - что ещё надо поменять |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
sogl=[#224..#256]-['а','е','ё','э','у','ю','и','о','ы','я']; ты это серьезно? А что, в интервале 'а' .. 'п' согласных букв нет совсем? А ты, между прочим, этот интервал даже не рассматриваешь, он находится раньше символа #224... Кстати, НАУЧИСЬ уже формулировать вопросы правильно !!! Почему из тебя все надо клещами тянуть? Это, в конце концов, ТВОЕ задание, или нет? Цитата всё равно не воспринимает кирилицу - Поясни, что это значит... ТЕЛЕПАТОВ ЗДЕСЬ НЕТ !!!(P.S. Следующий твой неверно сформулированный вопрос приведет к наказанию. Надоело. Каждый раз одно и тоже...) |
flashg |
![]()
Сообщение
#20
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: ![]() ![]() ![]() |
я набираю тексты (предложения) русскими буквами жму ENTER мне выводит информацию что тексты (слова) соодержат согласных 0%
вот что я имел ввиду под словом - не воспринимает кирилицу. Бить будете ? :low: ![]() Сообщение отредактировано: flashg - 7.08.2005 21:10 |
![]() ![]() |
![]() |
Текстовая версия | 11.08.2025 2:01 |