Показать сообщение отдельно
Старый 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