Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Инверсия массива

Автор: 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. Я просто новичек в этом очень трудно понимается это может быть через блок схемы до меня допрет ? =(