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

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

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

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

Паскаль. Даны два символьных массива...

votsarskam

Новые
Регистрация
9 Дек 2015
Сообщения
23
Реакции
0
Баллы
0
Паскаль. Даны два символьных массива...

В последовательности символов, вводимых с клавиатуры , подсчитать количество пар символов "*". Признак завершения ввода: два символа "+".
 
Я так понял время к зачетной неделе в учебных заведениях идет ?
И от клубов, девочек, компьютерных игр, вдруг надо резко перейти к программированию ? Да тяжело вам :(
Приведите свой пример решения задачи, а мы если что подправим ...
 
к сожалению нет,2 недели бьюсь над программой,но либо символы считает неверно,либо программу завершает неверно.
program mg4000;
var x,y:char; k:integer;
begin
repeat
readln(x);
readln(y);
if (x='*') and (y='*') then inc(k);
x:=y;
until (x='+') and (y='+');
readln;
writeln('k='k );
end.
 
Данный пример не завершает программу после ввода 2 "+" подряд
 
Уже лучше :)
Во первых
переменная к не инициализирована, перед циклом repeat сделайте k:=0;
Во вторых
зачем вы в цикле делаете x:=y; ? вы тем самым сбиваете условие выхода из цикла
Перед первым readln в цикле я бы сделал что нибудь типа writeln('Введите следующую пару символов');, что бы не путаться когда вводить следующую пару
Ну и раз в задаче речь идет о массивах, наверное надо было бы по идее (я так думаю) сначала заполнить эти массивы и лишь потом считать количество пар '*' - но это на ваше усмотрение
Да и условие выхода из цикла не верно
надо или until (x<>'+') or (y<>'+');
или уж until not ((x='+') and (y='+'));
 
Во первых переменная к не инициализирована, перед циклом repeat сделайте k:=0;
Олег, в большинстве нынешних реализаций Паскаля переменные обнуляются по умолчанию. Так что желательно, конечно, но не критично.
Во вторых зачем вы в цикле делаете x:=y; ? вы тем самым сбиваете условие выхода из цикла
Полностью согласен - абсолютно ненужное и нелепое действие, приводящее к ошибке.
Ну и раз в задаче речь идет о массивах, наверное надо было бы по идее (я так думаю) сначала заполнить эти массивы и лишь потом считать пары '*' ...
Можно, но не обязательно. Мне кажется, обрабатывать последовательность можно и "с колес".

Тут другое... Вопрос четности. А представьте себе, что вводится последовательность
1 * * 5
В таком случае, пара звёздочек будет пропущена и не учтена, поскольку они входят в разные двойки чисел.

Ладно, сейчас нарисую.
 
Нет с массивами я напутал,вот сама задача-В последовательности символов, вводимых с клавиатуры , подсчитать количество пар символов "*". Признак завершения ввода: два символа "+".
program mg4000;
var x,y:char; k:integer;
begin
k:=0;
repeat
writeln('Введите следующую пару символов');
readln(x);
readln(y);
if (x='*') and (y='*') then inc(k);
until (x='+') and (y='+');
readln;
writeln('k=');
end.
завершает программу после 3 +
 
Вот, как вариант полностью отлаженной программы:
Код:
var
 x,y:char;
 k:integer;
 b:boolean;
Begin
 k:=0;
 write('First symbol: ');
 readln(x);
 Repeat
  write('Next symbol: ');
  readln(y);
  b:=(x='+') and (y='+');
  if (x='*') and (y='*') then inc(k);
  x:=y;
 Until b;
 writeln('k = ',k);
 readln;
End.
 
завершает программу после 3 +
Ну так условие until не верно , и да у я не совсем правильно понял условия задачи ..., я то думал что два массива заполняется (так как в теме топика написано про два массива зачем то :)
А если просто последовательность символов, то конечно writeln надо убрать ...
так все проще , сейчас если до Володи успею то нарисую :)

ЗЫ. Не успел :))
 
Все хорошо,конечно,но опять же программа после ++ не завершается((
 
Хотя нет извиняюсь, это я уже запутался :)
Все должно работать, как у Владимира в коде прописано, и выходить после двух +
 
как то так
 

Вложения

  • глпо.webp
    глпо.webp
    4.1 KB · Просмотры: 60

Вложения

  • AA01.webp
    AA01.webp
    13.9 KB · Просмотры: 31
ну вот,после всего этого что бы программа завершилась нужно ввести еще один символ
 
нужно ввести еще один символ
Можно просто нажать энтер, ну или можете тогда убрать последний readln в конце программы, правда окно программы сразу после двух + свернется и результатов ее (программы) работы вы тогда не увидите :) ...
 
спасибо вам большое,очень помогли!!))
 
Назад
Сверху