Pascal ABC. Вывод на экран случайного числа.
|
|
AKukuruz | Дата: Пятница, 24 Июня 2016, 09:43 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Где-то ошибка... Синтаксис пока не усвоил так что не могу сам ее найти.
Код uses crt;
var i: real;
begin random(i); read('i'); end.
Вместо числа выводит переменную i.
|
|
| |
Gudleifr | Дата: Пятница, 24 Июня 2016, 09:56 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| Цитата AKukuruz ( ) пока не усвоил 1. random получает (диапазон) и возвращает (сл.число) integer. 2. read - это чтение, а пе выдача 3. перед end точка с запятой не ставится (в pascal она не завершает, а разделяет операторы). 4. нужно еще randomize - для запуска random
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Сообщение отредактировал Gudleifr - Пятница, 24 Июня 2016, 09:58 |
|
| |
AKukuruz | Дата: Суббота, 25 Июня 2016, 12:01 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Спасибо, почти понял. Read по невнимательности написал... Randomize включает рандом. А random задает диапазон...Добавлено (25 июня 2016, 12:01) --------------------------------------------- А что нужно добавить в код чтобы зациклить вывод?
|
|
| |
Gudleifr | Дата: Суббота, 25 Июня 2016, 12:17 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| Цитата AKukuruz ( ) что нужно добавить в код чтобы зациклить Очевидно, цикл.
Так дело не пойдет. Вам надо сделать одно из двух: покопаться в исходниках примеров (которые скачались вместе с pascal), либо почитать одну из книжек Вирта.
Или, на крайняк, начать изучать программирование...
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
|
|
| |
AKukuruz | Дата: Суббота, 25 Июня 2016, 19:21 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Тут кстати сделано без рандомайзера. Взято отсюда. http://pascalabc.net/WDE/?file=AlgBegin/01_Begin/06_Random.pas
Код var r1,r2: integer; // значения на верхних гранях кубиков begin r1 := Random(6)+1; r2 := Random(6)+1; writeln('Очки, выыпавшие на кубиках: ',r1,' ',r2); writeln('Сумма очков равна ',r1+r2); end.
Код uses crt;
var i:integer;
begin while(true) do begin; randomize; i:=random(10); writeln('Случайное число ' + (i).ToString()); for i := 1 to 10 do writeln('Случайное число ' + (i).ToString()); end; end.
Если выведено число из диапазона товывести случайное число опять.
А еще можно через repeat, но я не могу понять в какой части кода должен быть этот оператор и где ошибка...
Исходники я и так смотрю, кстати на сайте по ссылке непрохие примеры. Но когда свой код пишу то бывают непонятки... Еще просмотрел несколько книжек типа "песен". По моему они мало пригодны для изучения - много ненужной воды. Вообще изучение намного лучше идет когда есть наставник или знакомый который может указать на ошибку...
Сообщение отредактировал AKukuruz - Суббота, 25 Июня 2016, 19:32 |
|
| |
Gudleifr | Дата: Суббота, 25 Июня 2016, 19:34 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| Цитата AKukuruz ( ) А тут без рандомайзера. Зависит от реализации. Возможно, например, что при каждом запуске программы будет возвращаться одно и то же число. В BASIC-ах специально предусмотрены средства для "переигрывания" случайных последовательностей: начать с той же точки, вернуть последнее... В серьезном программировании принято писать свои генераторы случайных чисел (см.второй том Кнута).
P.S. И перестаньте ставить точку с запятой перед end. Т.е. между последним writeln и end у Вас еще вставлен лишний "пустой оператор". В сложных if/while-цепочках на этом можно и огрести.
P.P.S.
Цитата AKukuruz ( ) Вообще изучение намного лучше идет когда есть наставник или знакомый который может указать на ошибку... Это дурость. Лучший ответ учителя программирования: "Не работает? Значит, Вы что-то сделали неправильно". Только тогда Вы поймете, что в книгах не "вода", а смысл.
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Сообщение отредактировал Gudleifr - Суббота, 25 Июня 2016, 19:38 |
|
| |
AKukuruz | Дата: Воскресенье, 26 Июня 2016, 10:32 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| "Не работает? Значит, Вы что-то сделали неправильно" Это само собой. А что именно неправильно не всегда понятно...
Огрести? Да я и так огребаю от проги уже... При включении программы вылезают ошибки именно в том месте... Как раз где вы и сказали. Что-то про "должен быть оператор, а стоят точки". Но смысл его я не понял...
Пустой оператор он придуман вообще для каких целей? Оператор он вроде бы указывает на какое-то действие... А пустой оператор ничего не делает... Ятп это уже особенности языка какие-то.
|
|
| |
Gudleifr | Дата: Воскресенье, 26 Июня 2016, 10:49 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| Цитата AKukuruz ( ) А что именно неправильно не всегда понятно... А это и есть программирование. Искать ошибки за Вас - как подсказывать решение интересной головоломки или спойлерить конец детектива. А, начиная с некоторого момента, это станет просто невозможным.
Цитата AKukuruz ( ) Пустой оператор он придуман вообще для каких целей? В алголоподобных языках часто встречается ситуация, когда по синтаксису должен стоять оператор, но делать ничего не надо.
Цитата AKukuruz ( ) Ятп это уже особенности языка какие-то. Наоборот, команда, которая ничего не делает, присутствует даже в машинных языках.
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
|
|
| |
AKukuruz | Дата: Вторник, 28 Июня 2016, 19:52 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Код uses crt;
var i: integer; procedure Random_d(i: integer); begin for i := 1 to 10 do writeln('Случайное число ' + (i).ToString()) end; begin while(true) do SetWindowTitle('Вывод случайного числа'); clrScr; randomize; i:=random(10); random_d(i);
end.
Тут при запуске все зависает, я так понимаю потому что происходит какое-то переполнение? Надо бы количество циклов ввести...
Сообщение отредактировал AKukuruz - Вторник, 28 Июня 2016, 19:53 |
|
| |
Gudleifr | Дата: Вторник, 28 Июня 2016, 20:01 | Сообщение # 10 |
почти ветеран
Сейчас нет на сайте
| Цитата AKukuruz ( ) Тут при запуске все зависает, Цитата AKukuruz ( ) while(true) do SetWindowTitle('Вывод случайного числа'); А как этот цикл может не зависнуть?
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
|
|
| |
Saitei | Дата: Среда, 29 Июня 2016, 00:35 | Сообщение # 11 |
старожил
Сейчас нет на сайте
| Цитата AKukuruz ( ) while(true) do
Код while <условие> do <оператор 1>; //Пока … делай …
Если хочешь использовать несколько операторов в своём цикле - проставь операторные скобки (begin и end после do):
Код while(true) do //бесконечный цикл, т.к. условие всегда истинно begin /* code */ end;
|
|
| |
Gudleifr | Дата: Среда, 29 Июня 2016, 11:03 | Сообщение # 12 |
почти ветеран
Сейчас нет на сайте
| Saitei, см. выше про точки с запятой. Добавлено (29 июня 2016, 11:03) --------------------------------------------- P.S. Торжество реформы образования. Вирт придумал специальный язык для обучения программирования - PASCAL. Но мы ищем способ побыстрее и попроще изучить само это вспомогательное средство. Очевидно, что до программирования дело просто не дойдет.
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
|
|
| |
AKukuruz | Дата: Среда, 29 Июня 2016, 14:24 | Сообщение # 13 |
был не раз
Сейчас нет на сайте
| Цитата Gudleifr ( ) А как этот цикл может не зависнуть?
Ухх... Я даже на это внимание не обратил...
Код uses crt;
var i: integer; procedure Random_d(i: integer); begin i:=random(10); while(true) do for i := 1 to 10 do writeln('Случайное число ' + (i).ToString()) end; begin SetWindowTitle('Вывод случайного числа'); random_d(i);
end.
Исправил, но числа выводит в порядке возрастания... А не случайно.
|
|
| |
Gudleifr | Дата: Среда, 29 Июня 2016, 14:29 | Сообщение # 14 |
почти ветеран
Сейчас нет на сайте
| Цитата AKukuruz ( ) но числа выводит в порядке возрастания Как Вы и просили...
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
|
|
| |