Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 23:03   #1
Neo_AG
 
Регистрация: 17.04.2012
Сообщений: 7
Восклицание Работа с процедурами

Код:
program lab9;
uses crt;
var ss: string;
  ii, len: byte;
  i: integer;

procedure glass(s: string);
var glas: set of char;
  ii, glas1: byte;
begin glas := ['a', 'е', 'ё,' и ',' о, 'у', 'э', 'ю', 'я'];
  glas1 := 0;
  for ii := 1 to len do
    if s[ii] in glas then inc(glas1);
  writeln('Количество гласных', glas1);
end;

procedure soglass(s: string);
var soglass: set of char;
  ii, soglass1: byte;
begin soglas := ['б'..'д', 'ж', 'з', 'к', '..' н ',' п ',..' т ',' ф ',..' щ'];
  soglas1 := 0;
    for ii := 1 to len do
    if s[ii] in soglas then inc(soglas1);
  writeln('Количество согласных', soglas1);
end;

procedure zivrii(s: string);
var zivri: set of char;
  ii, zivri1: byte;
begin zivri := ['0'..'9'];
  zivri1 := 0;
  for ii := 1 to len do
    if s[ii] in zivri then inc(zivri1);
  writeln('Количество цифр', zivri1);
end;

procedure probell(s: string);
var probel: set of char;
  ii, probel1: byte;
begin probel := [' '];
  probel1 := 0;
  for ii := 1 to len do
    if s[ii] in probel then inc(probel1);
  writeln('Количество пробелов', probel1);
end;
begin
  for i := 1 to 5 do
  begin
    readln(ss);
    len := length(ss);
    glass(ss);
    zivrii(ss);
    probell(ss);
    writeln;
  end;
end.

Как сделать так,чтобы в одной процедуре все это входило сразу??? т.е.чтобы больше процедур не было



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.05.2012 в 09:10. Причина: позволил себе отформатировать код
Neo_AG вне форума Ответить с цитированием
Старый 23.05.2012, 23:41   #2
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Ну дак вы сделаете все в одной процедуре и в одном цикле и все!
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 24.05.2012, 15:51   #3
lino217
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 29
По умолчанию

Ну вообще-то писать такую огромную процедуру-кашу есть плохой стиль программирования.
С какой целью вообще необходима только одна процедура?
lino217 вне форума Ответить с цитированием
Старый 24.05.2012, 18:26   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Тут по логике как раз и нужна одна процедура, чтобы не гонять цикл по одной и той же строке несколько раз.
А вот раскидывать 3 элементарных действия по трем разным подпрограммам, действительно - плохой стиль.
Да и программа в целом поучится раза в 3 короче.
s-andriano вне форума Ответить с цитированием
Старый 24.05.2012, 19:12   #5
lino217
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 29
По умолчанию

Ну почему. Я ведь и говорю, что всё зависит от цели программы. Если, например, на форме кинуть несколько кнопок, присвоив каждой обработчик в виде отдельной процедуры, то всё будет выглядеть несколько элегантнее. А строка тут как раз таки не одна и та же, ведь массивы то разные. Поэтому я не понимаю, зачем её толкать в одну процедуру. Мне ещё в университете говорили, что правильная программа должна выглядеть таким образом, чтобы каждая отдельная процедура/функция располагалась полностью на экране.
Можно ведь создать отдельную процедуру, где будет вызываться каждая подпрограмма по отдельности в виде вызова её имени.
lino217 вне форума Ответить с цитированием
Старый 24.05.2012, 19:54   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от lino217 Посмотреть сообщение
Ну почему. Я ведь и говорю, что всё зависит от цели программы.
Бкзусловно.
Цитата:
А строка тут как раз таки не одна и та же, ведь массивы то разные.
Здесь вообще нет массивов. А строка - одна.
Цитата:
Поэтому я не понимаю, зачем её толкать в одну процедуру.
Затолкните, посмотрите, что получится, тогда поймете.
Цитата:
Мне ещё в университете говорили, что правильная программа должна выглядеть таким образом, чтобы каждая отдельная процедура/функция располагалась полностью на экране.
Ну, это, скорее пожелание, чем правило, но в данном случае оно как раз будет выполняться. Даже если экран маленький.
s-andriano вне форума Ответить с цитированием
Старый 26.05.2012, 00:12   #7
Neo_AG
 
Регистрация: 17.04.2012
Сообщений: 7
По умолчанию

преподу не нравиться,когда так много процедур.(( ему именно нужно в одной процедуре все это было...
Neo_AG вне форума Ответить с цитированием
Старый 26.05.2012, 00:51   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
program lab9;
uses crt;
var ss: string;
  i: integer;
  
procedure inform(var s:string);
var glas, soglass, zivri: set of char;
  i, glas1, soglass1, zivri1, probel1: byte;
begin
  glas := ['a','е','ё','и','о','у','ы','э','ю','я'];
  soglas := ['б'..'д', 'ж', 'з', 'к'..'н','п'..'т','ф'..'щ'];
  zivri := ['0'..'9'];
  glas1 := 0;
  soglas1 := 0;
  zivri1 := 0;
  probel1 := 0;
  for i := 1 to length(s) do
	if s[i] in glas then inc(glas1)
	else
	if s[i] in soglas then inc(soglas1)
	else
	if s[i] in zivri then inc(zivri1)
	else
	if s[i]=' ' then inc(probel1);  
  writeln('Количество гласных', glas1);
  writeln('Количество согласных', soglas1);
  writeln('Количество цифр', zivri1);
  writeln('Количество пробелов', probel1);
end;

begin
  for i := 1 to 5 do
  begin
    readln(ss);
    inform(ss);
    writeln;
  end;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 26.05.2012 в 01:09.
BDA на форуме Ответить с цитированием
Старый 26.05.2012, 09:55   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Neo_AG Посмотреть сообщение
преподу не нравиться,когда так много процедур.(( ему именно нужно в одной процедуре все это было...
Нет, преподу не нравится, что Вы в своей программа выполняете много ненужных действий. Например, несколько раз прогоняете цикл, когда достаточно одного.
s-andriano вне форума Ответить с цитированием
Старый 26.05.2012, 11:52   #10
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Ну вообще-то писать такую огромную процедуру-кашу есть плохой стиль программирования.
С какой целью вообще необходима только одна процедура?
попробуем на доступном - на бусах, к примеру...

у вас рассыпались бусы с бусинами 4-х размеров... чтобы узнать количество бусин каждого из размеров, если следовать вашей логике, нужно из всех бусин выбрать бусы одного размера и сосчитать их, потом кинуть в общую кучу и повторять всё это для бусин других размеров...
а можно просто: рассортировать бусы по нужным размерам и сосчитать их...

признаком хорошего тона в программировании, если что, является создание оптимального алгоритма.. а всё остальное - происки ленивых преподов, которым лень разбираться))))
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с функциями и процедурами Luckyman Помощь студентам 0 16.05.2011 18:21
Работа с процедурами и функциями Чумак Татьяна Паскаль, Turbo Pascal, PascalABC.NET 2 27.03.2011 07:56
работа с процедурами nex 9119 Помощь студентам 2 24.01.2011 18:38
Работа с процедурами в паскале pj-infest Помощь студентам 1 13.10.2010 10:41
работа с процедурами и функциями. Tanushka5606 Паскаль, Turbo Pascal, PascalABC.NET 2 06.05.2009 23:01