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

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

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

> Для заданого предложения указать долю согласных., Задание - необходимо регить на PASCAL
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


Для каждого слова заданного предложения указать долю согласных. Определить слово в котором доля согласных максимальна.

Задание - необходимо регить на PASCAL на TYRBO или BORLAND.

Я нашёл pas фаил содержащий код программы для нахождения одной буквы в строке

я его немного переделал и теперь он находит две буквы. Но прога сразу увеличелась на 50% blink.gif

а также у меня нет кода (я не знаю как его прописать) для второй части задания.

Определить слово в котором доля согласных максимальна.

ПОПРАКА

: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

В чём глюк ? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
Closed Topic Открыть новую тему 
Ответов(1 - 19)
сообщение
Сообщение #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
count := 0; s := _word[i]; { для удобства работы }
for i := 1 to length(s) do
if s[i] in soglas then inc(count);
writeln('в слове №', i, ' процент согласных = ', 100*count/length(s), '%');
end;

где _word - это массив слов, через который функция разбиения строки возвратит результат, а soglas - множество, содержащее все согласные буквы.

А вот для этого:
Цитата(flashg @ 4.08.05 17:39)
Определить слово в котором доля согласных максимальна.
тебе придется еще хранить максимальное значение count, но нахождение максимума "на лету" тоже неоднократно обсуждалось, и элементарно находится в поиске...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






count := 0;

чем оно является - ошибка 3
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


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


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


сново не получается сделать чтобы считал более 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 (поиск) - я не нашёл заглавия (под темы)
функцию разбиения строки на слова
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Что-то ты неясное замутил smile.gif

может так ? ;)

uses crt;
var
s:string;

a_count, b_count, i:integer;

Begin

clrscr;

a_count:=0; b_count:=0;

write('s='); readln(s);

if (pos('a',s)<>0)or(pos('b',s)<>0) then

for i:=1 to length(s) do
case s[i] of
'a': inc(a_count);
'b': inc(b_count);
end;

writeln('a : ', a_count);
writeln('b : ', b_count);

readln;

End.


хотя конечно можно сделать и pos с удалением элементов из строки.

вариант с POS

uses crt;
var
s:string;

a_count, b_count, i:integer;

Begin

clrscr;

a_count:=0; b_count:=0;

write('s='); readln(s);

if (pos('a',s)<>0)or(pos('b',s)<>0) then begin
while(pos('a',s)<>0) do begin
i:=pos('a',s);
delete(s,i,1);
inc(a_count);
end;

while(pos('b',s)<>0) do begin
i:=pos('b',s);
delete(s,i,1);
inc(b_count);
end;
end;

writeln('A : ',a_count);
writeln('B : ',b_count);


readln;

End.


Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(flashg @ 6.08.05 16:50)
а в FAQ (поиск) - я не нашёл заглавия (под темы) функцию разбиения строки на слова

Значит, плохо искал: FAQ: Строки - Разбить на слова
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


да это я и хотел получить хотя вот тут какое есть сомнение

вот задание (первая часть)

Для каждого слова заданного предложения указать долю согласных.

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


Гость






flashg, прекращай переливать из пустого в порожнее! angry.gif В посте №2 (между begin и end) содержится то, что тебе нужно для решения задачи. Дальше - самостоятельно. Задание дали ТЕБЕ, а не НАМ !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


Пост № 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

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


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Вот тебе ЧЕТКОЕ решения по заданию, надеюсь слово с максимальной долей согласных найти сможешь ?

Цитата
Для каждого слова заданного предложения указать долю согласных.


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
sogl=[#97..#122]-['q','e','y','u','i','o','a'];
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.



--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


Цитата(klem4 @ 6.08.05 22:39)
Вот тебе ЧЕТКОЕ решения по заданию, надеюсь слово с максимальной долей согласных найти сможешь ?


маленькая проблема - это нормально ли я запустил прогу я ввожу текст

провека задания одинадцать
жму энтер

для всех прописало 0% :o
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата(flashg @ 6.08.05 21:11)
маленькая проблема - это нормально ли я запустил прогу я ввожу текст

провека задания одинадцать
жму энтер

для всех прописало 0%  :o


по мойму по константе limits можно было понять, что программа раюотает с литиницей, а не кирилицей ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


Да иещё ранее в посте №6 первый код ты мне дал я его рассширел но есть маленькое но


uses crt;
var
s:string;
v_count, b_count, g_count, d_count, j_count, z_count, i:integer;
k_count, l_count, m_count, n_count, p_count, r_count:integer;
s_count, t_count, f_count, h_count, ch_count, sh_count, sch_count:integer;
c_count:integer;
Begin
clrscr;
v_count:=0; b_count:=0; g_count:=0; d_count:=0; j_count:=0; z_count:=0;
k_count:=0; l_count:=0; m_count:=0; n_count:=0; p_count:=0; r_count:=0;
s_count:=0; t_count:=0; f_count:=0; h_count:=0; c_count:=0; ch_count:=0;
sh_count:=0; sch_count:=0;
write('s='); readln(s);


if (pos('б',s)<>0) then
for i:=1 to length(s) do


case s[i] of
'в': inc(v_count);
'б': inc(b_count);
'г': inc(g_count);
'д': inc(d_count);
'ж': inc(j_count);
'з': inc(z_count);
'к': inc(k_count);
'л': inc(l_count);
'м': inc(m_count);
'н': inc(n_count);
'п': inc(p_count);
'р': inc(r_count);
'с': inc(s_count);
'т': inc(t_count);
'ф': inc(f_count);
'х': inc(h_count);
'ц': inc(c_count);
'ч': inc(ch_count);
'ш': inc(sh_count);
'щ': inc(sch_count);



end;
writeln('б : ', b_count);
writeln('в : ', v_count);
writeln('г : ', g_count);
writeln('д : ', d_count);
writeln('ж : ', j_count);
writeln('з : ', z_count);
writeln('к : ', k_count);
writeln('л : ', l_count);
writeln('м : ', m_count);
writeln('н : ', n_count);
writeln('п : ', p_count);
writeln('р : ', r_count);
writeln('с : ', s_count);
writeln('т : ', t_count);
writeln('ф : ', f_count);
writeln('х : ', h_count);
writeln('ц : ', c_count);
writeln('ч : ', ch_count);
writeln('ш : ', sh_count);
writeln('щ : ', sch_count);

readln;
End.



достаточно ввести только этого и он всё посчитает т.е. не надо вводить OR вот что я заметил.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Ну-ну... А для заглавных букв ты ЕЩЕ в 2 раза будешь увеличивать программу?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


Цитата(klem4 @ 6.08.05 23:14)
по мойму по константе limits можно было понять, что программа раюотает с литиницей, а не кирилицей ...


а вообще возможно сделать чтобы кирилицу понимала.


Цитата(volvo @ 6.08.05 23:18)
Ну-ну... А для заглавных букв ты ЕЩЕ в 2 раза будешь увеличивать программу?


а есть спсоб лучше
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


так, помойму мы с тобой оба страшно тупим...могу предложить вот такой вариант, вроде можно еще короче. Щас дам еще варинт без массива.

 uses crt;
var
s:string;
a:array[char] of byte;
i:integer;
ch:char;

Begin

clrscr;

readln(s);

for i:=1 to length(s) do
for ch:=#0 to #255 do
if s[i]=ch then
inc(a[ch]);

for ch:=#0 to #255 do
if a[ch]<>0 then
writeln(ch,' : ',a[ch]);

readln;
End.


вот тебе версия без массив :

uses crt;
var
s,ss:string;
i,j,count:integer;
Begin

clrscr;

readln(s);

i:=1;
ss:='';
while(i<=length(s)-1) do begin
count:=1;
for j:=i+1 to length(s) do
if (s[j]=s[i])and(pos(s[i],ss)=0) then
inc(count);


if pos(s[i],ss)=0 then begin
writeln(s[i],' : ',count);
ss:=ss+s[i];
end;
inc(i);
end;

readln;
End.


больше вопросов быть не должно.

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


как насчёт примера с долями

Код
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.


я думал что надо поменять вот эту строчку а всё равно не воспринимает кирилицу - что ещё надо поменять
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






sogl=[#224..#256]-['а','е','ё','э','у','ю','и','о','ы','я'];

ты это серьезно? А что, в интервале 'а' .. 'п' согласных букв нет совсем? А ты, между прочим, этот интервал даже не рассматриваешь, он находится раньше символа #224...

Кстати, НАУЧИСЬ уже формулировать вопросы правильно !!! Почему из тебя все надо клещами тянуть? Это, в конце концов, ТВОЕ задание, или нет?
Цитата
всё равно не воспринимает кирилицу
- Поясни, что это значит... ТЕЛЕПАТОВ ЗДЕСЬ НЕТ !!!

(P.S. Следующий твой неверно сформулированный вопрос приведет к наказанию. Надоело. Каждый раз одно и тоже...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

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


я набираю тексты (предложения) русскими буквами жму ENTER мне выводит информацию что тексты (слова) соодержат согласных 0%

вот что я имел ввиду под словом - не воспринимает кирилицу.

Бить будете ? :low: sad.gif

Сообщение отредактировано: flashg -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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