Консультация № 198140
04.04.2020, 14:45
0.00 руб.
1 57 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Помогите составить алгоритм задачи и поделится ответом. Я запутался в решении.
Прикрепленные файлы:
effae729a27ef8edf38a994b56225f5665b500f4.jpg

Обсуждение

давно
Посетитель
400728
1649
05.04.2020, 16:14
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
это условный оператор, а он циклически повторяется, то есть является неотъемлимой частью цикла.
Вы правы.... там должно быть,я не так мысль выразил: пусть в ромбике останется проверка , как в Вашем алгоритме блок-схеме, но тогда распишите в алгоритме набор 3х действий подробнее: уберите этот прямоугольник с инкрементом ШагНомераЦикла....
Цитата: Алексеев Владимир Николаевич
У нас уже 23 часа. До завтра!
спокойной ночи, приятных снов!
давно
Посетитель
400728
1649
05.04.2020, 16:17
общий
Адресаты:
Цитата: Зенченко Константин Николаевич
Ну, если убрать все лишнее,
и эти операторы:
inc(y,y);
dec(x);
inc(y,y),
они не лишние, но непонятные...а заменить на другие?
давно
Посетитель
400728
1649
05.04.2020, 16:26
общий
Адресаты:
Цитата: Зенченко Константин Николаевич
writeln('Y:=':8,y);
эта строка непонятна....
давно
Посетитель
400728
1649
05.04.2020, 16:27
общий
Адресаты:
Цитата: Зенченко Константин Николаевич
begin
y:=z;
в задаче нет этой переменной...
давно
Старший Модератор
31795
6196
05.04.2020, 20:30
общий
Адресаты:

Цитата: Анатолий Викторович
они не лишние, но непонятные...а заменить на другие

dec(x) => dec(x,1) => х:=x-1;
inc(y,y) => y:=y+y;

Цитата: Анатолий Викторович
эта строка непонятна

writeln('Y:=':8,y); => вывести на экран значение Y

Цитата: Анатолий Викторович
в задаче нет этой переменной

Я удалил, все лишнее, а о Z - забыл, сорри, там должно быть 3.

Вот три цикла, которые возможны:for, repeat, while
[code lang=css]var
x,y:integer;
begin
for y:= 1 to 5 do x:=y;
y:=1;
while y<5 do inc(y);
repeat
inc(y);
until y=5
end.[/code]
Дают такую блок-схему:

То, что первый цикл написован 6-ти гранником, это скорее заслуга используемого мной построителя блок-схем по коду, Другие мение продвинутые, рисуют его как второй вариант, и точно также создают машинный код компиляторы.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
400728
1649
05.04.2020, 21:09
общий
Адресаты:
Цитата: Зенченко Константин Николаевич
это скорее заслуга используемого мной построителя блок-схем по коду
Какой построить используете? Название?
давно
Посетитель
400728
1649
05.04.2020, 21:17
общий
05.04.2020, 21:19
Адресаты:
так не лучше выглядит программа? И счётчик есть...
Код:
 begin
y := 3;
x := y * 3;
if x < 5 then x := 4;
i := 0;
while (x > 8) and (i < 2) do
begin
y := y + y;
x := x - 1;
y := y + y;
i := i + 1;
end;
Write(y);
end.
давно
Посетитель
400728
1649
05.04.2020, 21:22
общий
Адресаты:
Ваша блок-схема так выглядит:
Прикрепленные файлы:
803e89c7c10838e095166a5ef189f433.png
давно
Посетитель
400728
1649
05.04.2020, 21:25
общий
05.04.2020, 21:27
Адресаты:
у меня так: и без Шести угольника... проще
Прикрепленные файлы:
326499f31d675080659a5509b95d74af.png
давно
Старший Модератор
31795
6196
05.04.2020, 22:27
общий
Адресаты:
Цитата: Анатолий Викторович
а как вставить сюда код? Как сделано у Вас?

Жмете
и выбираете ЯП.

Цитата: Анатолий Викторович
Какой построить используете? Название?

FCEditor
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Мастер-Эксперт
259041
7459
06.04.2020, 15:08
общий
Адресаты:
Вы писали : "уберите этот прямоугольник с инкрементом ШагНомераЦикла" - прямоугольник олицетворяет целый блок кода (самый большой в Вашей программе!). Убрать его - значит отказаться от бОльшей части операций, предписанных Вам в Условии задачи. Вы можете убрать прямоугольник в своей копии моего Ответа и тогда увидите результат своего творчества. Я уже не буду портить свой Ответ, который воплощён в "живую" программу, добросовестно проверенную мною в нескольких ОперСистемах.

"тогда распишите в алгоритме набор 3х действий подробнее" - в 2005г в хабаровской академии мне показали Игоря : "это - наш лучший программист, его программы побеждали в столичных конкурсах!". Я успел понаблюдать за работой Игоря, пока его не переманили в Москву. Игорь виртуозно набивал код на клавиатуре и изредка поглядывал на листок бумажку с Алгоритмом. На бумажке были т-ко ромбики (ветвления по Условиям) и квадратики (блоки с Б кусками кода). Я тогда ещё понял: в Алгоритме должны быть только общие (глобальные) направления! Никаких операторов с действиями!

"а в моём цикл начинается с шагаНомера =0" - да, я вспомнил : 20…40 лет назад я проектировал и создавал вычислительные узлы (в тч модернизировал вычислительный комплекс ИИСЭ-48). Тогда действительно все счётчики обнулялись перед началом счёта, и в самом начале выполнения очередного шага цикла счётчик инкрементировался, первый шаг получал N1, и таким образом счёт шагов был всё равно с единицы, а не с нуля. Это обеспечивало соответствие последнего шаг-номера количеству проделанных шагов.

Сейчас современные средства программирования облегчают труд программиста, освободив его от рутины со счётчиком. Достаточно просто указать начальный номер, и программа сама инкрементирует счётчик-значение. Во многих задачах можно вообще не думать о счётчике, но в Вашем задании прямо указано : "не более 2 раз", и поэтому я учёл указание ссылкой на чтение показаний счётчика.

Я всё тщательно продумал и предложил Вам лучший на мой взгляд вариант алгоритма. Вы можете усовершенствовать его. Можете опубликовать его на этой странице, если у Вас ещё недостаточно навыков реализовать свой алгоритм в программу для теста. Эксперты помогут Вам.
давно
Посетитель
400728
1649
06.04.2020, 20:33
общий
06.04.2020, 20:34
Адресаты:
Цитата: Алексеев Владимир Николаевич
если у Вас ещё недостаточно навыков реализовать свой алгоритм в программу для теста
слово Есть - убрать , я только пытаюсь учится стоить алгоритмы... и волей неволей от заданной задачи начал с изучения блок-схемы алгоритма.
Цитата: Алексеев Владимир Николаевич
Никаких операторов с действиями!
это только для таких асов как Игорь и ему подобных, а начинающему программисту сначала нужно ездить на 1 потом на 2ой скорости, а когда езда будет освоена полностью и грамотно, то тогда переходить на повышенной скорости и может ,но не каждый, стать каскадёром, как опять Ваш знакомый.
Цитата: Алексеев Владимир Николаевич
прямоугольник олицетворяет целый блок кода
Цитата: Алексеев Владимир Николаевич
Убрать его - значит отказаться от бОльшей части операций, предписанных Вам в Условии задачи.
комментарий выше...

давно
Посетитель
400728
1649
06.04.2020, 20:59
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
Я уже не буду портить свой Ответ, который воплощён в "живую" программу, добросовестно проверенную мною в нескольких ОперСистемах.
Ваша программа на VBScript работает безупречно! похоже только Вы на этом сайте программируете на этом языке.
Вам большое спасибо! Не проходите мимо, когда буду выкладывать похожие и не похожие задания
давно
Посетитель
400728
1649
07.04.2020, 18:21
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
, тк нужную переменную i очень трудно найти в большом коде среди множества слов, содержащих букву i
не понял, почему трудно? На клавиатуре она есть- Не вижу, в чём проблема? Или эта проблема на языке VBScript ? Но Вы же набираете этот код в Блокноте...
Зачем искать среди мн. этот код?
давно
Мастер-Эксперт
259041
7459
08.04.2020, 11:23
общий
Адресаты:
Вы спрашивали "почему трудно? На клавиатуре она есть" - да клавиша i есть на клавиатуре, но я писал Вам о другом: "нужную переменную i очень трудно найти в большом коде среди множества слов, содержащих букву i" - отличайте клавишу от имени переменной.

Вот например Ваш выше-пост #33 , где Вы предложили "так не лучше выглядит программа? И счётчик есть…" Там Ваш код содержит ошибку : счётчик начинает работать с нуля (по Вашему упорному желанию), но Вы игнорировали моё "можно начинать цикл с любой цифры, но тогда для выполнения Условия задачи "но не более 2 раз" придётся добавлять вычислитель разницы для получения кол-ва шагов" , Вы НЕ добавили вычислитель разницы.

В результате Ваша программа сегодня сработает правильно по первому условию "Пока X больше 8", игнорируя ошибочное условие2 "но не более 2 раз". Но через год или 2 Вы запустите программу с другим начальным X-значением и обнаружите, что программа вместо "не более 2 раз", отработала как "но не более 3 раз". Вы начнёте корректировать программу, а Ваш мозг уже забыл алгоритм за много месяцев. Чтоб найти/исправить ошибку Вы начинаете искать в Б коде имена переменных : что именно они обозначают?, какой смысл содержат?

Это легко, когда код маленький или имена переменных уникальны. Но искать в много-страничном коде имя переменной i среди огромного кол-ва слов, содержащих букву i (is , this , Option Dim Lim Script Win Exit File if Title Exists ReadLine String…) - Ваши старые глаза не выдержат напряжения (как и мои, кровоизлияние было много раз). Имена переменных надо назначать с умом! Это актуально для всех языков программирования.
давно
Посетитель
400728
1649
08.04.2020, 12:35
общий
08.04.2020, 15:14
Адресаты:
Цитата: Алексеев Владимир Николаевич
отличайте клавишу от имени переменной.
теперь дошло...
Цитата: Алексеев Владимир Николаевич
Вы НЕ добавили вычислитель разницы.
А надо?
Ведь у меня в ромбике стоит проверка условия, что i<2 , а это значит , что первый цикл i:=o, второй i:=0+1 и третий не будет выполняться, т.к. 2=2
Разве не так? поправьте...

как добавить этот вычислитель при моём нуле?
Я правильно понял, если Х= 15, а Y = 1 , то программа работать не будет?
давно
Мастер-Эксперт
259041
7459
09.04.2020, 05:18
общий
Адресаты:
Сосчитайте свои пальцы на руке, начиная с нуля (как Вы любите) - у Вас получится 4. Но Ваши глаза видят, что у Вас 5 пальцев! Значит, Ваш счётчик от нуля - ошибочный!
Сосчитайте свои пальцы, начиная с 2. И тогда Вы поймёте, что Количество и КонечноеПоказаниеСчётика - это не одно и то же!

Моя весёлая знакомая любит шутить : "Любой каприз за Ваши денюжки!". Мы все должны расплачиваться за свои капризы. Так и в Вашем случае : Платой за Ваш каприз "использовать счёт от нуля" будет замена простого конечного показания счётчика на дополнителный оператор получения количества
Количество = ПоказаниюСчётика + 1 - НачальноеСостояние.

Избавиться от этого усложнения алгоритма (и программы) можно простым счётом от "1" (не от 0), как это делают малые дети.
в сети
Управляющий
143894
2148
09.04.2020, 08:25
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
Моя весёлая знакомая любит шутить : "Любой каприз за Ваши денюжки!"

Ваша веселая знакомая из-за своей скромности не договаривает. Полностью в оригинале фраза звучит так: "Любой каприз за Ваши деньги, вплоть до изнасилования!"
Об авторе:
Устав – есть устав! Если ты устав – то отдыхай!


давно
Мастер-Эксперт
259041
7459
09.04.2020, 09:12
общий
Адресаты:
Какой источник Вы считаете оригиналом?

Я полагаю, на любую сказанную короткую фразу можно найти похожее сопоставление в каком-то фильме, романе… и заметить что сказанная фраза не соответствует "оригиналу".
в сети
Управляющий
143894
2148
09.04.2020, 09:28
общий
Адресаты:
Город-герой Одесса.
Об авторе:
Устав – есть устав! Если ты устав – то отдыхай!


давно
Посетитель
400728
1649
09.04.2020, 09:34
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
Количество = ПоказаниюСчётика + 1 - НачальноеСостояние.
у моего нового механического электрического счётчика все показания в нуле....
когда я включил обогреватель мощностью на 1квт, то спустя ровно 1 час , показания счётчика стали 00001.00квт.... а цикл был начат с нуля.
Цитата: Алексеев Владимир Николаевич
Сосчитайте свои пальцы на руке
и где тут связь с пальцами?
давно
Мастер-Эксперт
259041
7459
09.04.2020, 12:48
общий
Адресаты:
Пример со счётом пальцев побуждает активировать (напрячь) внимание к тому, что бездумное назначение начального состояния счётчика может привести к ошибке в работе алгоритма (и программы).
Если Ваш мозг упирается и не хочет напрягаться, то мои дальнейшие пояснения БЕСполезны ("не желающий видеть да не увидит").

А когда Вы передохнёте и будете готовы вдуматься в разницу, тогда поясняю: Показания Вашего электро-счётчика Вы считываете ПОСЛЕ его вычислительной работы, и его показания соответствуют прошедшей ч-з него эл-энергии.

А показания счётчика циклов считываются Вашим Алгоритмом ДО начала принятия им решения "повторять набор из 3 действий".
Если условие "Пока X больше 8" не сработает по какой-то причине (пользователь изменит начальное Y-значение), тогда Ваш алгоритм выполнит условие "но не более 2 раз" 3 раза вместо 2х. Теперь понятно?

Если снова непонятно, измените мой скрипт и убедитесь.
В строке For n0=1 измените на For n0=0
а строку Y = 3 'Первые операции присваивания.
замените на Y = 5
Цикл будет выполнен 3жды вместо 2жды.
Изменённый скрипт прилагаю.
Прикрепленные файлы:
4e28da83cea36ce9e77bd3b326dc7a26.zip
давно
Посетитель
400728
1649
09.04.2020, 18:07
общий
09.04.2020, 19:09
Адресаты:
Цитата: Алексеев Владимир Николаевич
Цикл будет выполнен 3жды вместо 2жды.
я не умею программировать, а только учучь , а тем более в на языке VBScript
Вот в Вашей программе я сделал изменения:

nLim =[color=red] 1 'Лимит колич-ва шагов цикла.

For n0= 0 to nLim 'Оператор цикла по кол-ву шагов n0 от 1 до nLim .[/color]
Y = 5 'Первые операции присваивания.
X = 3*Y


запустил программу Вашу и она выполнила два цикла, и третьего не было...
Если откомпилировать программу на турбо Паскале, то она точно так бы выполнила проходы... но у меня нет такой возможности....
может кто с портала откомпилирует...

давно
Мастер-Эксперт
259041
7459
10.04.2020, 02:48
общий
Адресаты:
Вы писали : "может кто с портала откомпилирует..." - процесс компиляции очень прост, он длится пару секунд для м кодов. Однако, прежде чем компилировать, нужно написать код программы (что именно компилировать?), в Вы не написали код.

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

"я не умею программировать, а только учучь" - Вы плохо учитесь : отвлекаетесь на бесплодное слово-блудие в rfpro.ru/question/198184 , прочие Судоку-головоломки, задаёте риторические вопросы в rfpro.ru/question/198137 пост#3 … Этим Вы распыляете своё внимание и отвлекаете внимание экспертов, которые пытаются помочь Вам. Если уж Вы приняли серьёзное решение учиться программированию, тогда выберите язык программирования и учите его сосредоточенно.

"Вот в Вашей программе я сделал изменения: nLim = 1 'Лимит колич-ва шагов цикла." - Вы успешно обманули сами себя, ибо я старательно писал для Вас пояснение : "nLim - это Лимит колич-ва шагов цикла". Он должен соответствовать условию задачи "но не более 2 раз".
Присвоением nLim=1 Вы подменили условие на "но не более 1 раза" и хвастаете якобы победой: "запустил программу Вашу и она выполнила два цикла, и третьего не было". Разве Вы не видите, что программа выполнила на 1 цикл больше заданного Вами изза того, что Вы запутываете проблему вместо того, чтобы распутать её упрощением?

Вся Ваша текущая консультация - это выворачивание задачи "с ног на голову". Нет никакого смысла вникать в Алгоритмы, если Вы не умеете программировать, ибо Вы не можете реализовать свой алгоритм в программу, чтобы проверить свой Алгоритм на наличие ошибок. А когда я показываю Вам Ваши ошибки, Вы ощите способы доказать, что я неправ, и мы оба бьёмся головой об стену, тратим время.
Я предлагаю прекратить бесплодные прения, чтоб заняться более полезными делами.
давно
Посетитель
400728
1649
10.04.2020, 07:15
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
Однако, прежде чем компилировать, нужно написать код программы (что именно компилировать?), в Вы не написали код.
странно, а это Вы пропустили:
Код:
    begin
y := 3;
x := y * 3;
if x < 5 then x := 4;
i := 0;
while (x > 8) and (i < 2) do
begin
y := y + y;
x := x - 1;
y := y + y;
i := i + 1;
end;
Write(y);
end.
давно
Посетитель
400728
1649
10.04.2020, 07:25
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
Вы не видите, что программа выполнила на 1 цикл больше заданного Вами изза того, что Вы запутываете проблему вместо того, чтобы распутать её упрощением?

вот скрин Вашей программы: где тут на 1 больше?
Прикрепленные файлы:
5a10e4e1fafd6e80b715f9548ceda584.jpg
давно
Посетитель
400728
1649
10.04.2020, 07:31
общий
Адресаты:
Цитата: Алексеев Владимир Николаевич
и хвастаете якобы победой: "запустил программу Вашу и она выполнила два цикла, и третьего не было
и да, у меня нет привычки хвастать - не тот возраст...
Цитата: Алексеев Владимир Николаевич
А когда я показываю Вам Ваши ошибки, Вы ощите способы доказать, что я неправ

я не ищу Вам доказать - Вы всегда правы!
в сети
Управляющий
143894
2148
10.04.2020, 09:13
общий
Адресаты:
Цитата: Анатолий Викторович
но у меня нет такой возможности....
может кто с портала откомпилирует...

Почитайте.
Об авторе:
Устав – есть устав! Если ты устав – то отдыхай!


давно
Мастер-Эксперт
259041
7459
10.04.2020, 09:34
общий
10.04.2020, 09:37
Адресаты:
Вы писали : "а это Вы пропустили" - да, я пропустил, виноват. Ваш минифорум настолько растянулся, что при чтении его приходится фильтровать контент, замечая т-ко главное, и пропускать мусор. Ваш скрин я подсознательно счёл как мусор, потому что Pascal-компилятор не скомпилирует его и возвратит ошибку на команде Write() . В кодах Зенченко в подобных строках присутствует команда WriteLn() . Ln - сокращение от Line - строка .

Я не всегда прав. Здесь мне надо было указать Вам на ошибку. Но на каждую показанную Вам ошибку Вы возвращаете возражения, и мне приходится много постов разъяснять замеченную ошибку. Учите прог-язык и старайтесь править свои ошибки самостоятельно.

"где тут на 1 больше?" - я уже устал повторять одно и то же : Вы изменили код и задали:
nLim = 1 'Лимит колич-ва шагов цикла. Это означает, более одного шага выполнять НЕЛЬЗЯ ! Иначе лимит - предел - превышен!
А на Вашем скрине прога выполнила 2 шага, то есть на 1 шаг больше предельного - заданного Вами! Теперь понятно?

Нельзя вносить сразу 2 или более одного изменения в проблемную систему (в частности в программу), иначе происходит запутывание вместо распутывания!
Внесли 1 изменение - и пробуйте получить результат. Если не поняли - измените снова, но ту же самую величину, не другую! И так, пока не прояснится её влияние в Вашем сознании.
давно
Посетитель
400728
1649
10.04.2020, 09:35
общий
10.04.2020, 09:51
Адресаты:
Цитата: Сергей Фрост
Почитайте.
у меня код написан на Паскале.... похоже мне надо ознакомится с языком VBScript
Форма ответа