Помощь - Поиск - Пользователи - Календарь
Полная версия: Инверсия массива
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Vitamin
Здравсвуйте мне дали вот такое задание:
Заполнить массив из 12 элементов случайными числами в интервале от -12 до 12 и выполнить инверсию для каждой 3-ти массива.
Никак не могу понять как это сделать.
Подскажите пожалуйста.
@nto$ka
Случайные числа:

В паскале есть функция 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)]
Гость
Цитата(@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
Сори я нейчано написал от гостя
@nto$ka
Цитата
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
Цитата(@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. Я просто новичек в этом очень трудно понимается это может быть через блок схемы до меня допрет ? =(
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.