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


Ответ
 
Опции темы Опции просмотра
Старый 09.12.2015, 13:52   #1 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Паскаль. Даны два символьных массива...

В последовательности символов, вводимых с клавиатуры , подсчитать количество пар символов "*". Признак завершения ввода: два символа "+".
votsarskam вне форума   Ответить с цитированием

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

Посмотрите, может быть в обсуждаемых топиках проблема уже решена

Паскаль. Проверить наличие одинаковых элементов массива
Паскаль. Методы работы с элементами массива
Даны два массива по 15 элементов
Обработка символьных строк

Старый 09.12.2015, 14:02   #2 (permalink)
MagentaTiger
Специалист
 
Аватар для MagentaTiger
 
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,427
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 17820
По умолчанию

Я так понял время к зачетной неделе в учебных заведениях идет ?
И от клубов, девочек, компьютерных игр, вдруг надо резко перейти к программированию ? Да тяжело вам
Приведите свой пример решения задачи, а мы если что подправим ...
MagentaTiger вне форума   Ответить с цитированием
Старый 09.12.2015, 14:08   #3 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

к сожалению нет,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.
votsarskam вне форума   Ответить с цитированием
Старый 09.12.2015, 14:11   #4 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Данный пример не завершает программу после ввода 2 "+" подряд
votsarskam вне форума   Ответить с цитированием
Старый 09.12.2015, 14:19   #5 (permalink)
MagentaTiger
Специалист
 
Аватар для MagentaTiger
 
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,427
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 17820
По умолчанию

Уже лучше
Во первых
переменная к не инициализирована, перед циклом repeat сделайте k:=0;
Во вторых
зачем вы в цикле делаете x:=y; ? вы тем самым сбиваете условие выхода из цикла
Перед первым readln в цикле я бы сделал что нибудь типа writeln('Введите следующую пару символов');, что бы не путаться когда вводить следующую пару
Ну и раз в задаче речь идет о массивах, наверное надо было бы по идее (я так думаю) сначала заполнить эти массивы и лишь потом считать количество пар '*' - но это на ваше усмотрение
Да и условие выхода из цикла не верно
надо или until (x<>'+') or (y<>'+');
или уж until not ((x='+') and (y='+'));
MagentaTiger вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 09.12.2015, 14:29   #6 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от MagentaTiger Посмотреть сообщение
Во первых переменная к не инициализирована, перед циклом repeat сделайте k:=0;
Олег, в большинстве нынешних реализаций Паскаля переменные обнуляются по умолчанию. Так что желательно, конечно, но не критично.
Цитата:
Сообщение от MagentaTiger Посмотреть сообщение
Во вторых зачем вы в цикле делаете x:=y; ? вы тем самым сбиваете условие выхода из цикла
Полностью согласен - абсолютно ненужное и нелепое действие, приводящее к ошибке.
Цитата:
Сообщение от MagentaTiger Посмотреть сообщение
Ну и раз в задаче речь идет о массивах, наверное надо было бы по идее (я так думаю) сначала заполнить эти массивы и лишь потом считать пары '*' ...
Можно, но не обязательно. Мне кажется, обрабатывать последовательность можно и "с колес".

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

Ладно, сейчас нарисую.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 09.12.2015, 14:30   #7 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Нет с массивами я напутал,вот сама задача-В последовательности символов, вводимых с клавиатуры , подсчитать количество пар символов "*". Признак завершения ввода: два символа "+".
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 +
votsarskam вне форума   Ответить с цитированием
Старый 09.12.2015, 14:40   #8 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Вот, как вариант полностью отлаженной программы:
Код:
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.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 09.12.2015, 14:42   #9 (permalink)
MagentaTiger
Специалист
 
Аватар для MagentaTiger
 
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,427
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 17820
По умолчанию

Цитата:
Сообщение от votsarskam Посмотреть сообщение
завершает программу после 3 +
Ну так условие until не верно , и да у я не совсем правильно понял условия задачи ..., я то думал что два массива заполняется (так как в теме топика написано про два массива зачем то
А если просто последовательность символов, то конечно writeln надо убрать ...
так все проще , сейчас если до Володи успею то нарисую

ЗЫ. Не успел
MagentaTiger вне форума   Ответить с цитированием
Старый 09.12.2015, 15:02   #10 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Все хорошо,конечно,но опять же программа после ++ не завершается((
votsarskam вне форума   Ответить с цитированием
Ads

Яндекс

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

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

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

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




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

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