Форум » Для флейма » Random в Turbo Pascal » Ответить

Random в Turbo Pascal

SkyNET: Здравствуйте ! Столкнулся с такой сложностью: Нужно заполнить массив Полностью Случайными Числами... Чтобы они не повторялись... Увеличить размер Random-а бесполезно - всё равно есть шанс, что выпадет одинаковые значения.

Ответов - 4

gustow: а если что-то типа "Random()*Random()" ? (т.е. берешь 2 [или более] подряд значения функции и как-то наподобие комбинируешь)

SkyNET: Спасибо за идею... А как можно поменять количество элементов в массиве в коде программы? Ну чтобы сам задавал их число при выполнении... Добавлено 20 минут спустя: Мдаа... Вот что значит много свободного времени Получилась так сказать эпическая программа: program minmax; {Задание: Переставить минимальное и максимальное число в случайном массиве...} uses crt; var a:array[1..25] of Integer; var i,c,c_min,c_max,n_min,n_max: Integer; var rMin,rMax: Integer; {Мин. и макс. числа в массиве} begin randomize; clrscr; Writeln('Пожалуйста введите минимальное число в массиве'); readln(rMin); Writeln('Спасибо. А теперь пожалуйста введите максимальное число в массиве'); readln(rMax); writeln('В массиве будут числа, в интервале от ',rMin,' до ',rMax,'. :D:D:D'); writeln; writeln; {Можно было обойтись и без этого, но так проще} writeln; {Это сделано для отступа} c_min:=rMax; {От максимального числа в массиве, к минимуму} {Добовляем для погрешности random-а} rMin:=rMin+5; {Цикл заполнения массива} for i:=1 to 25 do begin a:=rMin+random(rMax); a:=a-5+random(5); write(a,' '); end; {==Цикл нахождение минимального и максимального числа==} for i:=1 to 25 do begin {Находим максимум и его номер в массиве } if a>c_max then begin c_max:=a; n_max:=i; end; {Находим максимум и его номер в массиве } if a<c_min then begin c_min:=a; n_min:=i; end; end; {} writeln; writeln('Max.num:',n_max,' Min.nim:',n_min); writeln('Maximum:',c_max,' Minimum:',c_min); {} c:=a[n_max]; a[n_max]:=a[n_min]; a[n_min]:=c; {} for i:=1 to 25 do begin write(a,' '); end; readln; end. program fuck; uses crt; var a:array[1..10] of Integer; var i,c,c_min,c_max,n_min,n_max: Integer; var rMin,rMax: Integer; {Мин. и макс. числа в массиве} begin randomize; clrscr; Writeln('Пожалуйста введите минимальное число в массиве'); readln(rMin); Writeln('Спасибо. А теперь пожалуйста введите максимальное число в массиве'); readln(rMax); writeln('В массиве будут числа, в интервале от ',rMin,' до ',rMax,'. :D:D:D'); writeln; writeln; {Можно было обойтись и без этого, но так проще} writeln; {Это сделано для отступа} c_min:=rMax; {От максимального числа в массиве, к минимуму} {Цикл заполнения массива} for i:=1 to 10 do begin a:=rMin+random(rMax); write(a,' '); end; {==Цикл нахождение минимального и максимального числа==} for i:=1 to 25 do begin {Находим максимум и его номер в массиве } if a>c_max then begin c_max:=a; n_max:=i; end; {Находим максимум и его номер в массиве } if a<c_min then begin c_min:=a; n_min:=i; end; end; {} writeln; writeln('Max.num:',n_max,' Min.nim:',n_min); writeln('Maximum:',c_max,' Minimum:',c_min); {} c:=a[n_max]; a[n_max]:=a[n_min]; a[n_min]:=c; {} for i:=1 to 25 do begin write(a,' '); end; readln; end.

gustow: SkyNET пишет: А как можно поменять количество элементов в массиве в коде программы? Ну, "по-клипперовски" (там запросто "динамические" массивы делаются) это типа: [pre2]private a:={1, 3, 5, 6, 2} // увеличиваем длину массива (добавляем в конец элемент со значением Nil) asize(a, len(a)+1) // вставляем новый элемент на 3-ю позицию в массиве (его значение Nil), // все, начиная c 3-го, сдвигаются к концу, 3-й эл-т = Nil ains(a, 3) // присваиваем 3-му эл-ту значение a[3]:=35 // в итоге имеем: // a:={1, 3, 35, 5, 6, 2} [/pre2]И все дела! Вот что значит много свободного времени Даа... Прям Достоевский какой-то :))


Sergey Spirin: SkyNET пишет: А как можно поменять количество элементов в массиве в коде программы? Ну чтобы сам задавал их число при выполнении... Студент? И это домашнее задание? Я почему спрашиваю - странно было бы в другом случае использовать Turbo Pascal. Последняя версия ведь была аж в 1992 году. Дальше Delphi. И, насколько я помню, динамические массивы появились именно в Delphi. В Turbo их, кажется, не было. А если так, то нужно использовать указатели, то есть, реализовать эти динамические массивы самостоятельно. В этом ничего сложного нет, и в этом, наверное, суть задачи - научиться именно настоящему, живому программированию, которого, кстати, в Клипперах/Харбурах нет. По задаче: Пишите маленикий наборчик функций типа: InitArray, FreeArray, GetElem и так далее, какие нужны будут. И вместо статического массива используете указатель. Черезвычайно полезное упражнение



полная версия страницы