|
Вопрос # 4 950/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
Посмотрите пожалуйста правильно ли составил на паскале "Задан список из 10 буквенных имен девочек. Получить на месте этого списка новый список, состоящий из тех же ласкательных имен"
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: bayker85 (статус: Посетитель)
Вопрос отправлен: 23 января 2011, 16:30
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 18; последнее сообщение — 25 января 2011, 13:40; участников в обсуждении: 6.
|
bayker85 (статус: Посетитель), 23 января 2011, 16:33 [#1]:
program imena;
uses crt;
var
i: integer;
s: string;
c1, c2, c3: char;
begin
clrscr;
write('Введите имя: ');
readln(s);
i := length(s);
c1 := 'а'; c2 := 'ш'; c3 := 'я';
if (s[i]) = c1) then
if (s[i-1] = c2) then
begin
s[i] := 'е';
s := s + 'нька';
end
else
begin
s[i] := 'о';
s := s + 'чка';
end
else
if (s[i] = c3) then
begin
s[i] := 'е';
s := s + 'чка';
end;
writeln('Преобразованное имя = ', s);
readln;
end.
|
|
Егор (статус: 10-ый класс), 23 января 2011, 17:53 [#2]:
неправильно
имя Лиля преобразует не в "Лилечка", а в "Лилочка"
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
min@y™ (статус: Доктор наук), 23 января 2011, 18:03 [#3]:
А чо, моя программа не подошла?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 23 января 2011, 18:06 [#4]:
упс. 
я ошибся.
program imena;
uses crt;
var
i: integer;
s: string;
c1, c2, c3: char;
begin
clrscr;
write('Введите имя: ');
readln(s);
i := length(s);
c1 := 'а'; c2 := 'ш'; c3 := 'я';
if (s[i]) = c1) then
if (s[i-1] = c2) then
begin
s[i] := 'е';
s := s + 'нька';
end
else
begin
s[i] := 'о';
s := s + 'чка';
end
else
if (s[i] = c3) then
begin
s[i] := 'е';
s := s + 'чка';
end;
writeln('Преобразованное имя = ', s);
readln;
end.
код хорошо бы форматировать
правильно. только я бы обошёлся без переменных с1, с2 и с3, а писал бы прямо в тексте программы:
if (s[i]) = 'a') then
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
bayker85 (статус: Посетитель), 23 января 2011, 19:30 [#5]:
min@y™: А ты же на дельфи делал. И програмный код не скинул.
|
|
DeadMoon (статус: Посетитель), 23 января 2011, 19:43 [#6]:
Приветствую... собственно я автор этого скромного кода. c1, c2 и с3 ввел потому что компилятор ругался когда сразу с 'а' сравнивал (хз почему давно в паскале не писал) а сам алгоритм чем можно дополнить??? например к имени "Алсу" или "Любовь"
|
|
Егор (статус: 10-ый класс), 23 января 2011, 19:58 [#7]:
Цитата (DeadMoon):
например к имени "Алсу" или "Любовь" ну, думаю, с филологами в этом случае консультироваться надо
if (s[i]) = c1) then
ошибка одна лишняя закрывающая скобка.
Цитата (DeadMoon):
c1, c2 и с3 ввел потому что компилятор ругался когда сразу с 'а' сравнивал
странно. я попробовал напрямую сравнивать - компилятор проглотил спокойно. borland pascal 7.0
...
if s[i] = 'а' then
if (s[i-1] = 'ш') then
...
else
if (s[i] = 'я') then
...
DeadMoon: на с++ пишем?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
DeadMoon (статус: Посетитель), 23 января 2011, 20:30 [#8]:
Егор: на си только начинаем, сам еще студент =) в случае с филологами есть один консультант =)) (девушка у меня филолог). компилятор на паскале какой-то глючный, он временами ругается без причины, со скобкой - возможно погрешность на то, что я сперва слил код байкеру (эму и нужна эта хрень для курсовой), а потом код только попал сюда... ну это все не важно. меня больше интересует вопрос изьянов в алгоритме. Возможно нужно принимать во внимание не только предпоследнюю букву, но и третью с конца. возможно нужно ввести определенное правило по выбору окончаний (нька и чка).
проверку на женское имя или мужское я уже не беру во внимание =)
|
|
Егор (статус: 10-ый класс), 23 января 2011, 20:35 [#9]:
можно найти список женских имён и на его основании уже составить правила преобразования
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
min@y™ (статус: Доктор наук), 24 января 2011, 08:24 [#10]:
Цитата (bayker85):
А ты же на дельфи делал. И програмный код не скинул.
Ладно, внесу свои 5 копеек. Вот кусок моей программы:
procedure TMainForm.ForwardConversion;
var
Index, Len: Integer;
Suffix: string;
begin
// Прямое преобразование
Memo.Lines.BeginUpdate();
SourceLines.Assign(Memo.Lines);
try
for Index:= 0 to Memo.Lines.Count - 1 do
begin
Len:= Length(Memo.Lines[Index]);
if (Len > 1) and (Memo.Lines[Index][Len] in ['а', 'я'])
then begin
case Memo.Lines[Index][Len] of
'а': if Memo.Lines[Index][Len - 1] <> 'ш'
then Suffix:= 'очка'
else Suffix:= 'енька';
'я': Suffix:= 'ечка';
else Suffix:= '';
end; // case
if Suffix <> ''
then Memo.Lines[Index]:= Copy(Memo.Lines[Index], 1, Len - 1) + Suffix;
end;
end;
finally
Memo.Lines.EndUpdate();
end;
end;
Естественно, он преобразует правильно не все имена, но большинство часто встречающихся. Предлагаю добавить сюда список исключений.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 24 января 2011, 10:51 [#11]:
Посмотрел я на ваши алгоритмы. Плохие они. Ну вот к примеру преобразования имени Маша. Это на самом деле уже уменьшительное.
Есть ещё много имен, которые не попадут под правила. Вот к примеру классическое оригинальное имя Ия (для тех кто сомневается - http://ru.wikipedia.org/wiki/Саввина_Ия_Сергеевна)
Поэтому, если уж такая задача и возникла, нужно решать где то так.
Составить как можно полнее список имен. их на самом деле не так много, около полутысячи (http://www.andein.ru/ - тут есть списки в текстовой форме).
Итак, шаг первый - просто составляем массив имен и соответствующие уменьшительные. Лучше сразу выписывать по несколько вариантов. Программа будет простой
Дальнейшее улучшение - делим результаты на группы, которые имеют общее поведение. и напротив имен подписываем номер правила.
Плюс этого метода - мы гарантировано не исковеркаем имя. Мы выведем "имя не в базе, может ошибочка?" А сами можем применить специальный метод сравнения имен и попробовать определить похожее и предложить его.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 24 января 2011, 11:26 [#12]:
Цитата (Вадим К):
Посмотрел я на ваши алгоритмы. Плохие они.
Ой, да ладно! Эта программа пишется вовсе не на века, а совсем даже для "сдал, удалил, забыл".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
bayker85 (статус: Посетитель), 24 января 2011, 23:40 [#13]:
min@y™: Ты прав! Какого хрена мне надо перед всеми именами отчитоваться дла препода!!!!!!! Сделал то что есть и все! А блок схему я не знаю как делать. Вот мой новый програмный код. Посмотрите пожалуйста уважаемые эксперты!!!
program imena;
uses crt;
const
n = 10;
var
k, x: integer;
c1, c2, c3: char;
a: array [1..n] of string;
i: array [1..n] of integer;
begin
clrscr;
for k := 1 to n do
begin
write('Введите имя', k,': ');
readln(a[k]);
{writeln('Последняя буква имени = ', s[length(s)]);
writeln('Предпоследняя буква имени = ', s[length(s)-1]);}
i[k] := length(a[k]);
c1 := 'а'; c2 := 'ш'; c3 := 'я';
if (a[k][i[k]] = c1) then
if (a[k][i[k]-1] = c2) then
begin
a[k][i[k]] := 'е';
a[k] := a[k] + 'нька';
end
else
begin
a[k][i[k]] := 'о';
a[k] := a[k] + 'чка';
end
else
if (a[k][i[k]] = c3) then
begin
a[k][i[k]] := 'е';
a[k] := a[k] + 'чка';
end;
end;
writeln;
for k := 1 to n do
writeln('Преобразованное имя = ', a[k]);
writeln;
readln;
end.
|
|
bayker85 (статус: Посетитель), 24 января 2011, 23:42 [#14]:
Помогите блак схему сделать!!! ПЖЛСТ!!!!!!!!
|
|
bayker85 (статус: Посетитель), 24 января 2011, 23:47 [#15]:
Егор: А кто поможет с этим???
Напишите процедуру рисования графика функции. y=arctan x/2 Предусмотреть вывод оцифрованных координатных осей соответственно области построения, подписей к графику. Рационально расположить элементы рисунка (график, оси, цифры и штрихи масштабирования, подписи) на экране.
|
|
bayker85 (статус: Посетитель), 24 января 2011, 23:49 [#16]:
С меня пиво!!!!!!!!!!!!!!!!!!
|
|
min@y™ (статус: Доктор наук), 25 января 2011, 08:30 [#17]:
Цитата (bayker85):
Напишите процедуру рисования графика функции. y=arctan x/2 Предусмотреть вывод оцифрованных координатных осей соответственно области построения, подписей к графику. Рационально расположить элементы рисунка (график, оси, цифры и штрихи масштабирования, подписи) на экране.
За это пиво предлагаешь?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ерёмин А.А. (статус: *Администратор), 25 января 2011, 13:40 [#18]:
bayker85: новые вопросы задавайте отдельно. Если этот вопрос решён, измените его состояние.
|
26 января 2011, 13:14: Статус вопроса изменён на решённый (изменил автор вопроса — bayker85)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|