IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Инверсия массива
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Кирилл

Репутация: -  0  +


Здравсвуйте мне дали вот такое задание:
Заполнить массив из 12 элементов случайными числами в интервале от -12 до 12 и выполнить инверсию для каждой 3-ти массива.
Никак не могу понять как это сделать.
Подскажите пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Случайные числа:

В паскале есть функция 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)]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(@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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Кирилл

Репутация: -  0  +


Сори я нейчано написал от гостя
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Цитата
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)]

Сообщение отредактировано: @nto$ka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Кирилл

Репутация: -  0  +


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

Сообщение отредактировано: Vitamin -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 20:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name