Пятница, 16 Ноября 2018, 08:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Pascal ABC. Вывод на экран случайного числа.
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 ()
но числа выводит в порядке возрастания
Как Вы и просили...


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Pascal ABC. Вывод на экран случайного числа.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2018 Рейтинг