Форум «Всё о Паскале» _ Теоретические вопросы _ Инверсия массива
Автор: Vitamin 11.12.2012 1:59
Здравсвуйте мне дали вот такое задание: Заполнить массив из 12 элементов случайными числами в интервале от -12 до 12 и выполнить инверсию для каждой 3-ти массива. Никак не могу понять как это сделать. Подскажите пожалуйста.
Автор: @nto$ka 11.12.2012 13:45
Случайные числа:
В паскале есть функция random.
Если написать x:=random; то в икс будет занесено случайное дробное значение от нуля до единицы.
Но т.к. тебе нужны целые, то для этого служит функция random(a) которая возвращяет целое значение от нуля до a
Чтобы получить некоторое целое значение от a до b воспользуйся формулой a+random(b-a+1); В твоем случае это выглядит как -12+random(12+12+1);
Чтобы функция random работала правильно в самом начале программы вызывают процедуру randomize;
Инверсия:
Для каждой трети массива - это по 4 чисел.
Сделай внешний цикл i:=0 to 2 и внутренний цикл j:=1 to 2
Таким образом, тебе нужно будет поменять местами m[j+2*i] и m[5-(j+2*i)]
Автор: Гость 19.12.2012 23:34
Цитата(@nto$ka @ 11.12.2012 9:45)
Случайные числа:
В паскале есть функция random.
Если написать x:=random; то в икс будет занесено случайное дробное значение от нуля до единицы.
Но т.к. тебе нужны целые, то для этого служит функция random(a) которая возвращяет целое значение от нуля до a
Чтобы получить некоторое целое значение от a до b воспользуйся формулой a+random(b-a+1); В твоем случае это выглядит как -12+random(12+12+1);
Чтобы функция random работала правильно в самом начале программы вызывают процедуру randomize;
Инверсия:
Для каждой трети массива - это по 4 чисел.
Сделай внешний цикл i:=0 to 2 и внутренний цикл j:=1 to 2
Таким образом, тебе нужно будет поменять местами m[j+2*i] и m[5-(j+2*i)]
Не совсем понял как это делать из всего, что ты написал я понял только это
Код
uses crt; var A:array[1..12]of integer; i,j,c:integer; begin clrscr; randomize; for i:=1 to 12 do begin A[i]:=random(24)-12; write(A[i]:4); end;
Автор: Vitamin 19.12.2012 23:35
Сори я нейчано написал от гостя
Автор: @nto$ka 20.12.2012 13:24
Цитата
A[i]:=random(24)-12;
random(24) вернет случайное значение от 0 до 23. Даже если выпадет 23, вычитая из него 12 ты получишь 11. А тебе нужна вероятность получить 12. Поэтому, правильнее будет так: A[i]:=random(25)-12;
И еще:
for i:=0 to 2 do for j:=1 to 2 do //Вот сдесь нужно поменять два элемента местами. Надеюсь сможешь сам
Попробую объяснить по-другому. Внешний цикл i перебирает трети твоего массива. Сначала нулевая треть, затем первая и т.д. Во внутреннем цикле j перебираются элементы данной трети. Всего нужно перебрать первых два элемента трети, т.к. первый ты меняешь с четвертым, а второй с третьим. Таким образом, тебе нужно будет поменять местами m[j+2*i] и m[5-(j+2*i)]
Автор: Vitamin 20.12.2012 16:18
Цитата(@nto$ka @ 20.12.2012 8:24)
random(24) вернет случайное значение от 0 до 23. Даже если выпадет 23, вычитая из него 12 ты получишь 11. А тебе нужна вероятность получить 12. Поэтому, правильнее будет так: A[i]:=random(25)-12;
И еще:
for i:=0 to 2 do for j:=1 to 2 do //Вот сдесь нужно поменять два элемента местами. Надеюсь сможешь сам
Попробую объяснить по-другому. Внешний цикл i перебирает трети твоего массива. Сначала нулевая треть, затем первая и т.д. Во внутреннем цикле j перебираются элементы данной трети. Всего нужно перебрать первых два элемента трети, т.к. первый ты меняешь с четвертым, а второй с третьим. Таким образом, тебе нужно будет поменять местами m[j+2*i] и m[5-(j+2*i)]
Не могу понять все равно ( P.S. Я просто новичек в этом очень трудно понимается это может быть через блок схемы до меня допрет ? =(