Другие языки программирования и технологии

Несколько вопросов по Паскалю =)

Недавно начали изучать, поэтому пока еще плохо разбираюсь. Возникло несколько вопросов по программе. Писал сам ее, так что не ругайтесь, пожалуйста=) var mas:array [1..100] of integer; max,min,n,i:integer; begin randomize; write ('размерность массива='); readln (n); {ВВОД размерности массива} for i:=1 to n do begin mas:=random(20); write(mas:4);end;{ВЫВОД случайных чисел массива} {поиск и вывод МАКСИМАЛЬНОГО значения массива} max:=mas; for i:=1 to n do if max<mas<i> then max:=mas; writeln;writeln ('максимальное значение=',max); {поиск и вывод МИНИМАЛЬНОГО значения массива} min:=mas; for i:=1 to n do if min>mas then min:=mas; writeln('минимально значение=',min);end. 1) ВОПРОС! в первой строчке написан массив 1..100, а как сделать так чтоб не 100 там стояло, а такое число, которое мне нужно. Например, 10 или 20, но при этом, чтоб я его сам вводил с клавиатуры в программе!(т.е. const n=.. -не подходит, а если просто вместо 100 написать n, то пишет неизвестный идентификатор:( 2) вопрос! в 4 строчке написано randomize; а нужно ли его писать??? и без него прекрасно все работает. зачем он? 3) если не сложно, подскажите как найти какой посчету элемент минимального/максимального числа. Спасибо, друзья!
var mas:array [1..100] of integer;
max,min,n,i,mincount, maxcount:integer;
begin
write ('размерность массива=');
readln (n);
for i:=1 to n do
begin
mas[ i]:=random(20);
write(mas:4,'-');
end;
writeln;
max:=mas[1];
maxcount=1;
for i:=1 to n do
if mas[ i]>max then
begin
max:=mas[ i];
maxcount = i;
end;
writeln ('максимальное значение=',max, ' на позиции=', maxcount);
min:=mas[1];
mincount = 1;
for i:=1 to n do
if mas[ i]
КМ
Кайсар Мухаметгалиев
1 846
Лучший ответ
Юра Акщенцев max:=mas[1];
maxcount=1;
for i:=1 to n do
if mas[ i]>max then
begin
max:=mas[ i];
maxcount = i;
end;
а почему вы поставили здесь begin? скажите, пожалуйста, когда его нужно ставить??? при каких условиях???
В принципе, все верно описал uctopuk, только он в первом пункте ошибочно назвал динамические структуры данных динамическим программированием, что совершенно разные вещи.
Т. е. в переменных нужно описывать не сам массив, а указатель на него, после чего в программе запросить, какое количество элементов массива нужно, вычислить нужный объем памяти для размещения массива нужной длины и запросить память.
Примерно так:
var mass : ^array[0..0]of integer;
n, len : longint;
begin
write('Введите длину массива');
readln(n);
len := n*sizeof(integer);
getmem(mass, len);
...
freemem(mass,len); // в конце не забыть освободить память.
end.

По поводу randomize, опять же, uctopuk написал все правильно. Если вдруг в каком-либо компиляторе это не так, значит, разработчик библиотеки допустил ошибку. Дело в том, что всегда ДОЛЖНА присутствовать возможность получать в разных запусках одну и ту же псевдослучайную последовательность. Это зачастую необходимо для отладки.

По поводу begin - он всегда используется в паре с end, - в тех случаях, когда в том месте программы, где по структуре должен быть один оператор, нужно выполнение нескольких. Например, если при выполнении условия нужно выполнить один оператор, то он записывается без begin...end, а если несколько - все они заключаются в операторные скобки begin...end.
DT
Don!!! Tvoy Adrenalin
11 765
Юра Акщенцев getmem(mass, len);
указывает на эту строчку и пишет "ожидалась переменная типа указатель"
как в Паскале высчитываются вот эти случайные числа??
Спасибо.
вопрос 1. затрудняюсь ответить Паскаля под рукой нет, а на вскидку не помню
вопрос 2. не обязательно
вопрос 3. Как только находится мин или макс элемент присвойте некой переменной значение I - это будет по счету нужный Вам элемент
GM
Giorgi Meladze
11 017
Во первых, у тебя ошибка в программе. Двойные неравенства в паскале не допускаются, надо использовать AND. Хотел еще придраться к отстутствию порядкового номера элемента, но когда сам написал, понял, что она воспринимает его как ББ-код.. . :))

По существу.
1) Это нужно использовать динамическое программирование. А это уже гораздо серьезней. Или выполнить работу с массивом в виде процедуры, но это, наверное, глупо будет выглядеть. :)
2) randomize писать нужно, поскольку генератор случайных чисел в паскале (да как и везде, в общем) является на самом деле псевдослучайным. Если не писать рандомайз, то будет выпадать всегда одна ита же последовательность (попробуй) . Рандомайз задает начальное вхождение в псевдослучайный ряд, для большей псевдослучайности.. . :))
3)
а) Задаем еще одну переменную, отвечающую за номер минимального элемента.
б) Принимаем значение минимума равного, например, первому элементу, а номер минимума - 1.
в) пробегаем массив и сравниваем последующие элементы с минимумом. Если получаем число меньшее минимума, загоняем его в минимум, а его порядковый номер - в номер минимального элемента.
Юра Акщенцев вот именно, что ББ-код!!! =)))
Простите) а где вы нашли двойные неравенства?)
по поводу рандомайза) попробовал))) как выводил случайные числа, так и выводит) причем всегда разные) может потому что у меня Pascal ABC???
и еще) вот кусок уже немножко другой программы)
max:=mas[1];
maxcount:=1;
for i:=1 to n do
if mas[ i]>max then
begin
max:=mas[ i];
maxcount = i;
end;
по-прежнему нахождение максимального элемента, но добавилось нахождение его места еще))
у меня вопрос, почему здесь написано begin? понимаю что без него не попрет программа, но как узнать надо его писать или нет?в каких случаях??
Спасибо=)