Помощь - Поиск - Пользователи - Календарь
Полная версия: Одномерный Массив
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
18192123
Задан целочисленный массив Х из 20 элементов. Определить количество соседств двух положительных и двух отрицательных чисел.

Натолкните на мысль: какие должны быть условия для указанного соседства.....
???
мисс_граффити
Соседство двух положительных и двух отрицательных - это:
-3 -3 3 3
3 3 -3 -3
или еще и
-3 3 -3 3
3 -3 3 -3
-3 3 3 -3
3 -3 -3 3
?
18192123
Цитата(мисс_граффити @ 15.02.2007 15:16) *

Соседство двух положительных и двух отрицательных - это:
-3 -3 3 3
3 3 -3 -3
или еще и
-3 3 -3 3
3 -3 3 -3
-3 3 3 -3
3 -3 -3 3
?

в условии задачи точно не определено , но лучше предусмотреть все варианты, приведённые выше.
мисс_граффити
ок...
а с таким случаем как быть:
-3 -3 3 3 -3 -3 3 3
это сколько соседств?
...если считать соседствами все предложенные в сообщении #2 случаи....
18192123
Цитата(мисс_граффити @ 15.02.2007 18:09) *

ок...
а с таким случаем как быть:
-3 -3 3 3 -3 -3 3 3
это сколько соседств?
...если считать соседствами все предложенные в сообщении #2 случаи....

тогда рассматриваем этот вариант:
Соседство двух положительных и двух отрицательных - это:
-3 -3 3 3
3 3 -3 -3
мисс_граффити
то есть -3 -3 3 3 -3 -3 3 3 - это 3 соседства?
18192123
Цитата(мисс_граффити @ 15.02.2007 18:52) *

то есть -3 -3 3 3 -3 -3 3 3 - это 3 соседства?

ну не знаю....если точно следовать условию задачи, то нам нужны только такие соседства
5 5 -5 -5
volvo
Ты можешь решить, какой из приведенных ниже вариантов ТЕБЯ устраивает?

(считается, что есть 3 соседства)
-3 -3 3 3 -3 -3 3 3
-3 -3 3 3 -3 -3 3 3
-3 -3 3 3 -3 -3 3 3

(считается, что есть только 2 соседства)
-3 -3 3 3 -3 -3 3 3
-3 -3 3 3 -3 -3 3 3
18192123
мне нужен такой вариант 5 5 -5 -5 5 5 -5 -5 - здесь 2 соседства
Алена
Так:
#include <stdio.h>

int main() {
const int n = 20;
const int a[n] = {
5, 5, -5, -5, 5, 5, -5, -5, 0, 3, -1, 4, 5, 5, -5, -5, 5, 5, -5, -5
};

for(int i = 2, count = 0; i < n - 1; i++) {

if( ((a[i-2] > 0) && (a[i-1] > 0)) &&
((a[i ] < 0) && (a[i+1] < 0)) ) count += 1, i++;

}

printf("count = %d\n", count);
return 0;
}

?
18192123
Цитата(Алена @ 16.02.2007 12:27) *

Так:
#include <stdio.h>

int main() {
const int n = 20;
const int a[n] = {
5, 5, -5, -5, 5, 5, -5, -5, 0, 3, -1, 4, 5, 5, -5, -5, 5, 5, -5, -5
};

for(int i = 2, count = 0; i < n - 1; i++) {

if( ((a[i-2] > 0) && (a[i-1] > 0)) &&
((a[i ] < 0) && (a[i+1] < 0)) ) count += 1, i++;

}

printf("count = %d\n", count);
return 0;
}

?

объясни пожалуйста один момент


return 0;


я пока в Си мало разбираюсь....эта строчка как-то связана с тем, что ф-я main возвращает значение или как?
volvo
Цитата
эта строчка как-то связана с тем, что ф-я main возвращает значение или как?
Именно так. Эта строчка нужна для того, чтобы программа соответствовала Стандарту С++, который требует от каждой программы вернуть какое-либо значение. Если эту строчку убрать, то компилятор выдаст предупреждение. Если сделать void main() - то программа вообще не скомпилируется...
WishMaster
Цитата
Если сделать void main() - то программа вообще не скомпилируется...

Разве???
Сколько раз писал
void main()
{
//здесь код
}

и все хорошо шло.И даже работало smile.gif
volvo
Компилятор, поддерживающий Стандарт как положено - не должен пропускать этот код. Стандартом явно оговорено:
Цитата(Стандарт (3.6.1.2))
An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined.
Все, что "implementation-defined" - есть очень большая вероятность, что будет НЕпереносимо на другие компиляторы, с int будет работать ВЕЗДЕ, ибо должно...

Попробуй
void main() {
}
откомпилировать GCC или Интеловским компилятором... Что будет?
18192123
Цитата(volvo @ 16.02.2007 20:59) *

Именно так. Эта строчка нужна для того, чтобы программа соответствовала Стандарту С++, который требует от каждой программы вернуть какое-либо значение. Если эту строчку убрать, то компилятор выдаст предупреждение. Если сделать void main() - то программа вообще не скомпилируется...

а почему в этой строке мы прописываем именно 0? Там может быть другое число?
или таков стандарт?
volvo
Может... Это то число, которое ты можешь вернуть в ОС как код завершения... Ноль - потому что обычно в качестве кода нормального завершения передается 0, другие значения - если надо сигнализировать об ошибке...
18192123
Цитата(volvo @ 16.02.2007 22:57) *

Может... Это то число, которое ты можешь вернуть в ОС как код завершения... Ноль - потому что обычно в качестве кода нормального завершения передается 0, другие значения - если надо сигнализировать об ошибке...

спасибо за разъяснение!
у меня возник ещё один вопрос. вот у меня в массиве 20 элементов, а как вывести эти значения на экран в таком виде:
x1 x2 x3 x4 x5
x6 x7 x8 x9 x10
x11 x12 x13 x14 x15
x16 x17 x18 x19 x20
если ввожу я эти элементы следующим образом:

int A[NUM],i;
printf ("введите 20 целых чисел:" );
for (i = 0; i < NUM; i++)
{
printf ("%d-ое число --> ", i);
scanf ("%d", &A[i]);
}


?
volvo
Ну, вот так, например:
  for(i = 0; i < NUM; ++i)
printf(" %3d%s", A[i], ((i + 1)%5) ? "" : "\n");
18192123
Объясните пожалуйста подробно, что значит строка:

printf(" %3d%s", A[i], ((i + 1)%5) ? "" : "\n");


?
volvo
18192123, это такая форма записи условного оператора. Вместо
if(a == b) c;
else d;

можно написать:
(a == b) ? c : d;

Следовательно, эта строка просто печатает пустой символ (ничего не печатает), если остаток от деления текущего индекса + 1 на пять ненулевой (то есть, есть увеличенный на 1 индекс не кратен 5), а если остаток - ноль (индекс кратен 5), то печатается символ "\n" - перевод строки...
18192123
Оказалось, что с соседствами оказалось всё намного проще... нужно было подсчитать количество соседств 2-х положительных и отдельно 2-х отрицательных.
например,
4 5 -5 -5 4
1 1 1 -8 -9
4 -4 -4 5 5
2 -4 -5 1 2
здесь кол-во соседств 2-х положительных 7, отрицательных 4.
вот программа:

#include <STDIO.H>
#define NUM 20
void main()
{
int a[NUM],i;
printf ("Vvedite 20 chelih 4isel :\n" );
for (i = 0; i < NUM; i++)
{
printf ("%d-oe 4islo --> ", i);
scanf ("%d", &a[i]);
}

int count, count1;
for( i = 0, count = 0, count1 = 0; i < NUM ; i++) {

if ((a[i] > 0) && (a[i+1] > 0))
count+=1;
if ((a[i] < 0) && (a[i+1] < 0))
count1+=1;

}
printf ("In this massiv \n");
for(i = 0; i < NUM; ++i)

printf(" %3d%s", a[i], ((i + 1)%5) ? "" : "\n");



printf("Kolichestvo sosedstv 2-h polositel'nih elementov = %d\n", count);
printf ("Kolichestvo sosedstv 2-h otricatel'nih elementov = %d\n", count1);

}


но работает несовсем корректно: чаще выдаёт верное количество , но бывает и неправильный результат, например в верхнем массиме программа выдаёт 8 соседств положительных вместо правильных 7....
В чём же дело?
Fanat
Цитата(18192123 @ 19.03.2007 22:03) *


for( i = 0, count = 0, count1 = 0; i < NUM-1 ; i++)




-1...так как последний элемент может образовывать пару только с предыдущим...
atraides
To 18192123
Случаем не на ИИТУСе учишся) какая группа?

Памагите мне разобраться с подобной задачей у я по проще но чтото не получается no1.gif


Задан целочисленный массив Х из 20 элементов. Из этого массива переписать в массив Y подряд все положительные элементы и определить наименьший из них.
мисс_граффити
М
незачем использовать чужую тему. новая задача - новая тема


ты пробовал сам что-то делать?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.