Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2016, 12:40   #1
Антон18
 
Регистрация: 27.07.2016
Сообщений: 9
По умолчанию Не могу понять алгоритм решения задачи.

Задача.
Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

Решение из учебника.
Код:
CONST М = 100;
VAR  MAS : ARRAY[1..M] OF INTEGER;
I, K, N : INTEGER;
BEGIN
WRITE('BBEДИTE РАЗМЕР МАССИВА N = ');
READLN(N);
К := 0;
FOR I := 1 ТО N DO
BEGIN
WRITE('ВВЕДИТЕ ЭЛЕМЕНТ МАССИВА');
READLN(MAS[I]);
END;
FOR I := 1 ТО N-1 DO
IF MAS[I] = MAS[I+1] THEN К := K+1;
WRITELN('ОДИНАКОВЫХ ПАР СОСЕДНИХ ЭЛЕМЕНТОВ ', К)
END.

Пожалуйста, оформляйте Ваш код согласно правилам.
У меня несколько вопросов
1. Что это за К := 0 ? Если это отсчет количества элементов, то почему именно отсчет с нуля ведется? Или я неправильно понял?

2. Какую функцию выполняет цикл в строке FOR I := 1 ТО N DO и FOR I := 1 ТО N-1 DO. Что это за N-1?

3. В книге написано "если очередной MAS[ I ] равен следующему MAS[I +1], то увеличиваем зна-
чение К на единицу;" А зачем его увеличивать, когда нам надо найти одинаковую пару чисел? Это ж не поиск максимального элемента.

Последний раз редактировалось Вадим Мошев; 31.07.2016 в 13:02.
Антон18 вне форума Ответить с цитированием
Старый 31.07.2016, 12:46   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
1. Что это за К := 0 ? Если это отсчет количества элементов, то почему именно отсчет с нуля ведется? Или я неправильно понял?
Эээ.. а вы как считаете? У нас, обычно, если нет элементов, то 0, а дальше 1, 2, 3, ...

Цитата:
Какую функцию выполняет цикл в строке FOR I := 1 ТО N DO
А если дальше прочитать
Код:
WRITE('ВВЕДИТЕ ЭЛЕМЕНТ МАССИВА');
? Ни на какие мысли не наталкивает?

Цитата:
FOR I := 1 ТО N-1 DO
Решает задачу собственно

Цитата:
Что это за N-1?
А с каким элементов вы собрались сравнивать последний?

Цитата:
А зачем его увеличивать, когда нам надо найти одинаковую пару чисел?
А если прочитать условие внимательно?
Цитата:
Найти, сколько в нем пар одинаковых соседних элементов.
Цитата:
Это ж не поиск максимального эдемента.
А он тут причем?

Вот уж прямая иллюстрациия фразы "смотрю в книгу - вижу фигу"...

Последний раз редактировалось p51x; 31.07.2016 в 12:54.
p51x вне форума Ответить с цитированием
Старый 31.07.2016, 13:05   #3
Антон18
 
Регистрация: 27.07.2016
Сообщений: 9
По умолчанию

Почему у вас на аватарке написано "Профессионал"? Если вы и толком объяснить новичку не можете алгоритм непонятной ему задачи. Или решили умника из себя построить и прикольнуться над начинающим изучать программирование? Слабо нормально объяснить? Мне нужно понять алгоритм задачи. Пока нормального ответа нету. Очень надеюсь, что найдется настоящий профессионал и объяснит по-людски этот фарш из непонятных для меня строк.
Антон18 вне форума Ответить с цитированием
Старый 31.07.2016, 13:46   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Почему у вас на аватарке написано "Профессионал"?
Где вы увидели у меня аватарку?

Цитата:
Если вы и толком объяснить новичку не можете алгоритм непонятной ему задачи.
Мы не в детсаде и я не ваша мама попу вам вытирать.

Цитата:
Или решили умника из себя построить и прикольнуться над начинающим изучать программирование?
Ну да больше нет прикола, чем заставить неуча читать хотя бы условие задачи.

Цитата:
Слабо нормально объяснить?
Что именно? У вас задача "найти пары одинаковых соседних элементов". Вы, когда одеваетесь, в состоянии найти пару туфель?

Цитата:
Мне нужно понять алгоритм задачи.
Ну так прочитайте - весь алгоритм из одного простейшего цмкла. У вас в руках 1, 2, 2, 5, 10, 10, 5 рублевые монеты. Сколько среди них пар одинаковых соседних?

Цитата:
Пока нормального ответа нету.
Ну если для вас тягость просто прочитать условие задачи, то и любой ответ вам не поможет.

Цитата:
Очень надеюсь, что найдется настоящий профессионал и объяснит по-людски этот фарш из непонятных для меня строк.
Возьмите любу. книжку по паскалю, инет и прочитайте про циклы. Все. Там нет сложных строчек.
p51x вне форума Ответить с цитированием
Старый 31.07.2016, 14:05   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Цитата:
1. Что это за К := 0 ? Если это отсчет количества элементов, то почему именно отсчет с нуля ведется? Или я неправильно понял?
Счетчик обнуляем. Это означает, что перед подсчетом мы еще не начинали искать элементы. Здесь K = 0.
Во время подсчета мы считаем количество соседних элементов; если мы нашли, то увеличиваем счетчик на единицу, и тогда переменная K станет 1 (0 + 1). Если еще нашли соседние элементы, K станет 2. И т.д. В конечном итоге переменная K покажет сколько соседних элементов.
Допустим, если во всем массиве нет соседних элементов, то переменная К так и осталось равным 0, т.е. счетчик остался обнуленным. Это и означает К := 0.

Цитата:
2. Какую функцию выполняет цикл в строке FOR I := 1 ТО N DO и FOR I := 1 ТО N-1 DO. Что это за N-1?
В качестве примера. Допустим, пользователь ввел размер массива N = 5.
1-й цикл означает ввести элементы массива с 1 до 5 (т.е. 5 элементов массива).
2-й цикл означает сравнить соседние элементы. Цикл прогоняется с 1 до N-1 (до 4), "N-1" нужен для того, чтобы в последнем проходе цикла должны сравниваться последний и предпоследний элементы:
MAS[I] = MAS[I+1]
MAS[4] = MAS[4+1]
MAS[4] = MAS[5] - если I подставить
Если сделать цикл FOR I := 1 ТО N DO, то увидим следующую ошибку:
MAS[I] = MAS[I+1]
MAS[5] = MAS[5+1]
MAS[5] = MAS[6] - а шестого элемента нет!!!
Поэтому цикл лучше прогонять до N-1.

Цитата:
3. В книге написано "если очередной MAS[ I ] равен следующему MAS[I +1], то увеличиваем значение К на единицу;" А зачем его увеличивать, когда нам надо найти одинаковую пару чисел? Это ж не поиск максимального элемента.
А в первом посте:
Цитата:
Найти, сколько в нем пар одинаковых соседних элементов.
Уточняющий вопрос Антону:
Что нужно найти:
- одинаковую пару чисел?
или
- сколько пар одинаковых соседних элементов?


Я могу ответить и на 4-й вопрос, который нигде не задавался: если вдруг спросят
Цитата:
4. Что означает CONST М = 100;
Максимальный размер массива. Пользователь может ввести число (размер массива) от 1 до 100. А если введет другое число, то программа аварийно завершит работу! Страшно, аш жуть!!!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 31.07.2016 в 14:13.
newerow1989 вне форума Ответить с цитированием
Старый 31.07.2016, 17:59   #6
Антон18
 
Регистрация: 27.07.2016
Сообщений: 9
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Я могу ответить и на 4-й вопрос, который нигде не задавался:
Это я уже понял.

Просто нигде нет внятных объяснений. Если б был такой учебник по Паскалю, чтоб каждую строчку кода автор детально объяснял. Тогда не пришлось бы мучиться в догадках, что означает каждая строка или переменная.
Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Что нужно найти:
- одинаковую пару чисел?
или
- сколько пар одинаковых соседних элементов?
В задаче же написано сколько пар одинаковых соседних элементов?

Последний раз редактировалось Антон18; 31.07.2016 в 18:05.
Антон18 вне форума Ответить с цитированием
Старый 31.07.2016, 18:02   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

А в чем мое объяснение не понятно?

Сейчас же лето!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 31.07.2016 в 18:09.
newerow1989 вне форума Ответить с цитированием
Старый 31.07.2016, 18:43   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
В задаче же написано сколько пар одинаковых соседних элементов?
да, так и написано. нужно подсчитать КОЛИЧЕСТВО пар.

вот счётчик (подсчёт количества) и храниться в переменной K
вначале там ноль (K:=0 - т.к. вначале обнуляем счётчик.

потом увеличиваем его на единичку каждый раз, когда встречается пара одинаковых элементов.

например, если Вы введёте 6 чисел
1 2 2 2 2 2
то ответ будет 4.
(четыре одинаковых пары соседних элементов).
Понятно, почему?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.08.2016, 14:56   #9
Антон18
 
Регистрация: 27.07.2016
Сообщений: 9
По умолчанию

Проверьте, пожалуйста, мое понимание этой программы.
Код:
 
CONST М = 100;
VAR  MAS : ARRAY[1..M] OF INTEGER;
I, K, N : INTEGER;
BEGIN
WRITE('BBEДИTE РАЗМЕР МАССИВА N = ');{пользователь вводит размер массива}
READLN(N);{программа считывает значение и записывает в переменную N}
К := 0;{теперь ставим счетчик массива на 0}
FOR I := 1 ТО N DO{программа просматривает значения массива от 1 до числа указанного пользователем}
BEGIN{в процеесе просмотра задаем новые указания программе}
WRITE('ВВЕДИТЕ ЭЛЕМЕНТ МАССИВА');{пользователь вводит некое число из заданного ним массива}
READLN(MAS[I]);{это число записывается в индекс MAS[I]}
END;{конец}
FOR I := 1 ТО N-1 DO{программа просматривает элементы массива -1 заданный пользователем элемент}
IF MAS[I] = MAS[I+1] THEN К := K+1;{если элемент, заданный пользователем равен просмотренному элементу, то добавляем его в счетчик}
WRITELN('ОДИНАКОВЫХ ПАР СОСЕДНИХ ЭЛЕМЕНТОВ ', К){прогроамма выводит счетчик кол-ва одинаковых элементов в программе}
END.
Антон18 вне форума Ответить с цитированием
Старый 02.08.2016, 15:01   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
{пользователь вводит размер массива}
программа выводит строку

Цитата:
{теперь ставим счетчик массива на 0}
нет здесь "счетчика массива", количество пар - вы же их считать собрались

Цитата:
{это число записывается в индекс MAS[I]}
не в индекс, а в элемент массива

Цитата:
{если элемент, заданный пользователем равен просмотренному элементу, то добавляем его в счетчик}
нет, прочитайте условие задачи: если текущий элемент равен следующему или нашли два рядомстоящих одинаковых
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм решения задачи Amet13 Помощь студентам 1 21.04.2012 13:16
ребят я не могу понять как решать эти задачи!может кто помочь в решении представленной задачи? Andrusha07 Помощь студентам 0 09.03.2012 23:08
Алгоритм решения задачи snpccvs Помощь студентам 8 13.02.2012 22:50
Не могу понять алгоритм. anabenne БД в Delphi 15 20.06.2011 05:05
как понять алгоритм и среду решения для скачивания файлов genhoo Помощь студентам 4 05.05.2011 15:19