forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Массивы (http://forum.boolean.name/showthread.php?t=13496)

KingMaks 14.10.2010 18:56

Массивы
 
Непредставляю как написать алгоритм для решения етих задач
может кто знает:

1. Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и
отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести номер первого
элемента, нарушающего закономерность.

2. Дан массив A[1..N,1..N]. Составить программу, которая прибавила бы каждому элементу данной
строки элемент, принадлежащий этой строке и главной диагонали.

Reks888 14.10.2010 19:58

Ответ: Массивы
 
1.
Код:

Цикол для i от 0 до N
    Если знак(a[i])=знак(a[i+1]) выводим i+1 и заканчиваем программу
Конец цикола
Выводим 0
Конец программы

2. Не понял условия.

Как ты игру написал если не можешь такие задачи решить?
Вот вам и blitz3d...

Phantom 14.10.2010 22:40

Ответ: Массивы
 
Насчёт второго, типа так что ли?
1 2 3 4 5 | +1
6 7 8 9 0 | +7
7 4 5 1 2 | +5
9 5 4 2 3 | +2
7 9 7 3 2 | +2

KingMaks 18.10.2010 23:59

Ответ: Массивы
 
Reks888 ахах так просто оказалось:)
а я начал перемножать a[i]*a[i+1] и если равно меньше нуля то продолжаем
а если больше нуля то выводим:)

И я сам чото не пойму второй задачи, ну написал алгоритм как я его понял
завтра папробую здать, надеюсь приймет:)

moka 19.10.2010 20:03

Ответ: Массивы
 
Reks888,
Такой массив не прокатит:
{1,2,3,5,6,..}
Нужно проверять на модулис (оператор % в си-подобных языках), в BlitzBasic это MOD.
Проверяешь на деление по модулю на 2, и если следующий по индексу такойже, значит либо это два чётных, либо два нечётных, в зависимости от результата при делении по модулю.
C# код (сори, я тупо забыл блиц):
Код:

// цикл для каждого эллемента исключая последний
for (int i=0;i<A.Length()-1,i++) {
  if(A[i] %2 == A[i+1] %2) {
    return A[i+1];
  }
}
return null;

код написан в броузере

В Блице условное выражение будет что-то типо:
Код:

If (A[i] MOD 2)=(A[i+1] MOD 2)
Таким образом подобный массив пройдёт:
{1,4,7,8,9,10,27}
Т.к. он подходит под условие что каждый следующий должен быть чётным если предыдущий не чётный, и в точности наоборот.

Reks888 19.10.2010 21:03

Ответ: Массивы
 
MoKa, посмотри условие первой задачи. В условии нет ничего про четные и нечетные числа, только про собственно знак.

moka 19.10.2010 21:23

Ответ: Массивы
 
Упс точно. Хе хе.
Тогда поправка:
{-5,4,2,-3,6,-7}
Такой массив не пройдёт учитывая тот код выше.
Тут же нужно проверять примерно таким образом:
Уже не помню, позволяет ли блиц получять результат логического выражения в скобках без привязки, если да то такой код прокатит:
If (Abs(A[i])=A[i])=(Abs(A[i+1])=A[i+1])
Выражение "(Abs(A[i])=A[i])" проверяет чётное или нет, если чётное то возвратит true, если не чётное то false, т.к. Abs получает модуль числа, который всегда положительный.
С таким выражением, массив приведённый сверху не пройдёт проверку.

Reks888 19.10.2010 21:32

Ответ: Массивы
 
такой массив по-любому не пройдет, хватит чушь нести.
If sgn(a[i])=sgn(a[i+1]) решает все проблемы

moka 19.10.2010 21:51

Ответ: Массивы
 
sgn, угу, не abs.
Нету у меня манеры править предыдущие сообщения..
Зы, сперва думал речь идёт о чётном не чётном, вот и из непонимания напостил..
Блин, блиц открыть что-ли, 2 года с лишним уже прошло..


Часовой пояс GMT +4, время: 00:34.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot