• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Найти ошибки в программе по замене букв в тексте. Турбо Паскаль.

  • Автор темы Автор темы IvaIlga
  • Дата начала Дата начала

IvaIlga

Новые
Регистрация
11 Ноя 2010
Сообщения
11
Реакции
0
Баллы
0
Найти ошибки в программе по замене букв в тексте. Турбо Паскаль.

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