Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Найти ошибки в программе по замене букв в тексте. Турбо Паскаль. (http://www.tehnari.ru/f41/t42853/)

IvaIlga 03.12.2010 11:15

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

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.

Vladimir_S 03.12.2010 22:12

Цитата:

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

Да... это, пожалуй, достижение. Дело в том, что за жизнь свою долгую немало я программ перевидел, и своих, и чужих, но такой неряшливости и такого чудовищного количества ошибок еще не встречал. Браво! Вот лишь некоторые:
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.



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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.