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

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

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

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


Бывалый
***

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

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


Составьте программу вычисления суммы номеров мест, на которых в слове S стоят гласные буквы. Есть кое-какие мысли, вот
 function Rus(mes: string):string;
var i: integer;
begin
for i:=1 to length(mes) do
case mes [i] of
'А'..'п': mes[i]:=chr(Ord (mes [i])-64);
'р'..'я': mes[i]:=chr(ord (mes[i])-16);
end;
rus:=mes;
end;

var s:string;
i,summa:integer;
begin
write (rus('введите текст - '));
readln (s);
summa:=0;
for i:=1 to length (s) do
case s[i] of
'а': summa:=summa+1;
'е': summa:=summa+1;
'и': summa:=summa+1;
'о': summa:=summa+1;
'у': summa:=summa+1;
'ы': summa:=summa+1;
'ю': summa:=summa+1;
'э': summa:=summa+1;
'я': summa:=summa+1;
end;
writeln (rus('текст-" '),s,' "');
writeln (rus('сумма номеров='),summa);
readln;
end.
Но программа выдает 0. Помогите разобраться

Добавлено через 5 мин.
ой, только сейчас понял, что я написал blink.gif case вместе с for-ом blink.gif вот дурак

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


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

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

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


Для английских слов можно вот как-то так:
function SumVowelPos (s: string): integer;
var
i,n: integer;
begin
n:=0;
for i:=1 to Length(s) do if UpCase(s[i]) in ['A','E','I','O','U','Y'] then n:=n+i;
SumVowelPos:=n
end;

Для русского языка нужно вместо UpCase использовать свою функцию.

Добавлено через 2 мин.
кстати, case можно записать короче:
case s[i] of
'а','е','и','о','у','ы','ю','э','я': summa:=summa+i;
end;



Добавлено через 8 мин.
Цитата(Lapp @ 27.03.2010 23:06) *
Для русского языка нужно вместо UpCase использовать свою функцию.
Еще вариант - просто перечислить в условии мелкие буквы тоже:
  for i:=1 to Length(s) do
if s[i] in ['А','Е','И','О','У','Ы','Ю','Э','Я','а','е','и','о','у','ы','ю','э','я'] then
n:=n+i;


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


Бывалый
***

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

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


Цитата(Lapp @ 27.03.2010 23:06) *

Для английских слов можно вот как-то так:
function SumVowelPos (s: string): integer;
var
i,n: integer;
begin
n:=0;
for i:=1 to Length(s) do if UpCase(s[i]) in ['A','E','I','O','U','Y'] then n:=n+i;
SumVowelPos:=n
end;

Для русского языка нужно вместо UpCase использовать свою функцию.

Добавлено через 2 мин.
кстати, case можно записать короче:
case s[i] of
'а','е','и','о','у','ы','ю','э','я': summa:=summa+i;
end;

Добавлено через 8 мин.
Еще вариант - просто перечислить в условии мелкие буквы тоже:
  for i:=1 to Length(s) do
if s[i] in ['А','Е','И','О','У','Ы','Ю','Э','Я','а','е','и','о','у','ы','ю','э','я'] then
n:=n+i;


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


Бывалый
***

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

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


не понимаю, в чем проблема, но программа все равно не хочет считать сумму номеров

function Rus(mes: string):string;
var i: integer;
begin
for i:=1 to length(mes) do
case mes [i] of
'А'..'п': mes[i]:=chr(Ord (mes [i])-64);
'р'..'я': mes[i]:=chr(ord (mes[i])-16);
end;
rus:=mes;
end;
var s:string;
i,summa:integer;
begin
write (rus('введите текст - '));
readln (s);
summa:=0;
for i:=1 to Length(s) do
if s[i] in ['А','Е','И','О','У','Ы','Ю','Э','Я','а','е','и','о','у','ы','ю','э','я'] then
summa:=summa+i;
writeln (rus('текст-" '),s,' "');
writeln (rus('сумма номеров='),summa);
readln;
end.
Выводит 0
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


а что ты вводишь?
у меня для английских букв все нормально отработало
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

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

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


Цитата(Client @ 28.03.2010 11:48) *

а что ты вводишь?
у меня для английских букв все нормально отработало

я с русскими работаю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


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


Гость






Хитрый какой... То есть, для того, чтобы текст показывался в консоли нормально, ты догадался вызвать Rus, а то, что пользователь вводит ответ другой кодировке - не догадался? Либо делай обратное преобразование полученного от пользователя ответа, и потом, как ты делал - сравнивай посимвольно, либо так:

{ ...  }
var
alpha: string;

begin
write (rus('введите текст - '));
readln (s);
summa:=0;
alpha := rus('АЕИОУЫЮЭЯаеиоуыюэя');
for i:=1 to Length(s) do
if Pos(s[ i ], alpha) > 0 then summa:=summa+i;
writeln (rus('текст-" '),s,' "');
writeln (rus('сумма номеров='),summa);
readln;
end.
Понимаешь, что изменилось?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

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

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


Цитата(volvo @ 28.03.2010 12:03) *

Хитрый какой... То есть, для того, чтобы текст показывался в консоли нормально, ты догадался вызвать Rus, а то, что пользователь вводит ответ другой кодировке - не догадался? Либо делай обратное преобразование полученного от пользователя ответа, и потом, как ты делал - сравнивай посимвольно, либо так:

{ ...  }
var
alpha: string;

begin
write (rus('введите текст - '));
readln (s);
summa:=0;
alpha := rus('АЕИОУЫЮЭЯаеиоуыюэя');
for i:=1 to Length(s) do
if Pos(s[ i ], alpha) > 0 then summa:=summa+i;
writeln (rus('текст-" '),s,' "');
writeln (rus('сумма номеров='),summa);
readln;
end.
Понимаешь, что изменилось?

понял! в моем варианте программа никак не могла найти заданные символы в веденной строке... не догодался еще раз использовать rus... спасибо

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

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

 





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