Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 03.12.2010, 11:15   #1 (permalink)
IvaIlga
Member
 
Регистрация: 11.11.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Lightbulb Найти ошибки в программе по замене букв в тексте. Турбо Паскаль.

Здравствуйте! Задали написать программу, но довести ее до рабочего состояния у меня не получается Условия задания слудующие: "В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву "б" на сочетание "ак", если "б" стоит на нечетном месте. По словом "текст" понимается строка символов, слова в которой, разделены пробелами, ".", ",", "!", "?", ";", ":", одним или несколькими." Ниже приведу код, помогите разобраться,пожалуйста.

program zamena;
var
i:byte;
text:string;;
begin
writeln("Vvedite text");
readln(text);
for i = 1 to lenght(text) do
if i mod 2 = 0 and pos(text, i, 1) = "а" then
otvet: = "е"
else
otvet: = pos(text, i, 1)
end if
inc(i);
text:= otvet;
writeln(text) ;
readln();
for i = 1 to lenght(text)
if i mod 2 = 1 and pos(text, i, 1) = "б" then
otvet = otvet & "ак"
else
otvet = otvet & pos(text, i, 1)
end if
inc(i);
writeln(text) ;
readln();
end.
IvaIlga вне форума   Ответить с цитированием

Старый 03.12.2010, 11:15
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Рекомендую обратить внимание на данные топики, в них могут быть полезные ответы

Расчет производной на языке турбо паскаль
Турбо Паскаль

Старый 03.12.2010, 22:12   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от IvaIlga Посмотреть сообщение
Здравствуйте! Задали написать программу, но довести ее до рабочего состояния у меня не получается Условия задания слудующие: "В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву "б" на сочетание "ак", если "б" стоит на нечетном месте. По словом "текст" понимается строка символов, слова в которой, разделены пробелами, ".", ",", "!", "?", ";", ":", одним или несколькими." Ниже приведу код, помогите разобраться,пожалуйста.
Да... это, пожалуй, достижение. Дело в том, что за жизнь свою долгую немало я программ перевидел, и своих, и чужих, но такой неряшливости и такого чудовищного количества ошибок еще не встречал. Браво! Вот лишь некоторые:
1. Паскаль не использует двойных кавычек (разве что как символ при вводе/выводе текста), только одинарные (апострофы).
2. В цикле for..to при задании исходного значения переменной цикла используется знак присваивания, а не равенства, т.е.
for i:=1 to n do - правильно, а
for i=1 to n do - неправильно.
3. Функция Pos имеет два, а не три параметра.
4. Функция, возвращающая длину строки, пишется Length, а не Lenght.
5. Что за таинственная переменная otvet? Она нигде не описана.
6. end if - такого в Паскале не водится, это же не Бэйсик.
7. Знак & как символ какой бы то ни было операции в Паскале не употребляется.
И т.д., и т.п., и проч. - продолжать можно долго.
Ниже я приведу свое решение Вашей задачи (естественно, отлаженную программу). Единственное - чтобы не путаться с кодировками кириллицы, я заменил русские буквы латинскими, т.е. a (лат.) заменяется на e (лат.) и b на ak. Попробуйте разобраться:
Код:
program zamena;
var
 i,N_a,N_b:byte;
 text:string;
 P_a,P_b:Array[1..128] of byte;

BEGIN
 N_a:=0;
 N_b:=0;
 writeln('Vvedite text');
 readln(text);
 for i:=1 to length(text) do
  if (i mod 2 = 0) and (text[i]='a') then
   begin
    Inc(N_a);
    P_a[N_a]:=i;
   end else
  if (i mod 2 = 1) and (text[i]='b') then
   begin
    Inc(N_b);
    P_b[N_b]:=i;
   end;

 for i:=1 to N_b do
  P_b[i]:=P_b[i]+(i-1);

 for i:=1 to N_a do
  begin
   Delete(text,P_a[i],1);
   Insert('e',text,P_a[i]);
  end;

 for i:=1 to N_b do
  begin
   Delete(text,P_b[i],1);
   Insert('ak',text,P_b[i]);
  end;

 writeln(text) ;

 readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.