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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2013, 20:04   #1
TadyT
 
Регистрация: 23.01.2013
Сообщений: 3
По умолчанию Вывод на экран целых чисел

Помогите решить задачку:

Изобразите графически алгоритм и напишите программу, в которой на экран дисплея последовательно один за другим
распечатываются 5 чисел, целых, случайных из интервала от 1 до 35, причем все числа разные.
TadyT вне форума Ответить с цитированием
Старый 23.01.2013, 20:23   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
Randomize;
for i:=1 to 5 do WriteLn(Random(36));
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.01.2013, 21:43   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Sciv, есть проблема.. :
Цитата:
причем все числа разные
Poma][a вне форума Ответить с цитированием
Старый 23.01.2013, 21:45   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Sciv, есть проблема.. :
"Ой, это как нибудь без меня" (с) Ромаха

тем более что вот тут Виталий уже решил похожую задачу:

http://programmersforum.ru/showthread.php?t=225499
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.01.2013, 22:57   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

+ код в пост #2 выдаёт числа от 0 до 35
правильно получать случайные числа от 1 до 35, конечно:
Код:
Random(35)+1

целиком код для решения этой простенькой задачи может выглядеть так:
Код:
const N=5;
var 
 mas : array[1..N] of integer;
 i,  k, L : integer;
 wasBefore : boolean;
begin
  Randomize;
  mas[1] := Random(35)+1;
  for i:=2 to N do begin
      repeat
        L := Random(35)+1;
        wasBefore := false;
        for k:=1 to i-1 do
           if mas[k]=L then begin 
                wasBefore := true; 
                break
           end;
     until not wasBefore;
     mas[i] := L;
  end;    

  {выдача полученных чисел}
  for i:=1 to N do Write(mas[i]:3,' ');
  WriteLn;
  Reaadln;
end.

Последний раз редактировалось Serge_Bliznykov; 23.01.2013 в 23:06.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2013, 23:06   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
+ код в пост #2 выдаёт числа от 0 до 35
Согласен, моя ошибка.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.01.2013, 18:35   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

1. Строго говоря, исходное условие несовместимо, т.к. случайность противоречит требованию, чтобы числа не повторялись.
2. Если же требуются не случайные числа, а числа из диапазона в случайном порядке, то и генерировать эту последовательность нужно соответствующим образом:
- сначала заполнить массив нужной длины (в данном случае 35) последовательными числами,
- затем перемешать эти числа (random используется именно на этапе перемешивания).
s-andriano вне форума Ответить с цитированием
Старый 24.01.2013, 19:14   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

s-andriano,
Цитата:
- сначала заполнить массив нужной длины (в данном случае 35) последовательными числами,
- затем перемешать эти числа (random используется именно на этапе перемешивания).
Хорошо, допустим, сделали всё по Вашему алгоритму. Как далее выбрать 5 разных элементов массива?
Если a[1], a[2], a[3], etc, или a[32], a[1], a[3], a[22]..
То эти числа будут не просто "псевдослучайными", а "псевдопсевдослучайными"..

Я полностью одобряю вариант Сержа..
Poma][a вне форума Ответить с цитированием
Старый 24.01.2013, 23:59   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Poma][a, не горячитесь можно поступить и так, как предложил s-andriano
есть случаи, когда это единственно реально работающий подход (ну, например, тасование колоды карт). В данном случае (когда нужно 5 чисел в диапазоне от 1 до 35), мой вариант с запоминанием предыдущих вариантов, мне лично кажется более простым и эффективным.
Но и вариант с заполнением массива, правильным (см. форум тут) тасованием, и выборкой 5 первых элементов НЕ ХУЖЕ!!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.01.2013, 19:38   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
не горячитесь
Даже в мыслях не было.. Надо было смайликов наставить

Серж, соль в том что про тасование карт я ПОЛНОСТЬЮ согласен.. (Помню была такая темка с подобной задачей, я тупо random'ил, потом кто-то (уж не помню кто) открыл мне тайну этого способа..)
Но тут, мне кажется, другая песня.. Мы должны вывести не ВСЕ элементы массива, а только 5.. Поэтому будет не хорошо выводить какие-то определенные элементы массива каждый раз: только 1, 3, n, etc.. => в данном случаем этот вариант не годится.. (ИМХО)
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана последовательность n целых чисел, определить есть ли среди них точные квадраты и вывести их на экран. dmitriy20104 Паскаль, Turbo Pascal, PascalABC.NET 4 27.06.2012 10:12
вывод чисел на экран TotKtoNado Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 22 02.01.2012 14:18
Ввод с клавиатуры два целых числа без знака и вывод на экран их сумму. gelya_17 Помощь студентам 5 18.10.2010 10:31
Вывод целых и десятичных чисел Maycal Общие вопросы C/C++ 2 24.10.2007 12:34