Не могу отобразить первое отрицательное число в массиве
задание таково :
Ввести массив (rand()) вывести первый положительный и последний отрицательный элементы и их позиции.
Мой код:
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
void main() {
setlocale(0, "");
srand(time(NULL));
int n, i, plus = 0, minus = 0, minus1 = 0, plus1 = 0, minus2 = 0, plus2 = 0;
printf("Введите количество чисел в массиве \n");
scanf("%d", & n);
int a[n];
for (i = 0; i < n; i++) {
a[i] = rand() % 100 - 50;
printf("%d\t", a[i]);
if (a[i] > 0 && minus2 == 0) {
minus = a[i];
minus1 = i;
minus2++;
}
if (a[i] < 0 && plus2 == 0) {
plus = a[i];
plus = i;
plus2++;
}
}
printf("\nПервое положительное число = %d, порядка %d. \n Первое отрицательное число = %d, порядка %d.", minus, minus1, plus, plus1);
}
C положительным числом проблем не возникло , а вот отрицательно выводит неправильно .
Ответы (1 шт):
надо
if (a[i]<0&&plus2==0) {plus=a[i];plus1=i;/*вот тут ошибка*/ plus2++;}
а вообще у вас алгоритм содержит одну принципиальную ошибку (правда возникающую с вероятностью 0.5^n)
если так получилось, что у вас вообще не содержится отрицательных или положительных чисел, то ваш алгоритм все равно выдает значение позиция:0, значение:0
вообще лучше, если число не определено использовать отрицательную позицию, тогда вам не потребуется вводить лишних переменных:
int plus_value = 0,
minus_value = 0,
plus_pos = -1,
minus_pos = -1;
for (i = 0; i < n; i++)
{
a[i] = rand() % 100 - 50;
printf("%d\t", a[i]);
// рассматриваем все отрицательные значения и записываем позицию последнего
if (a[i] < 0) {
minus_value = a[i];
minus_pos = i;
}
// рассматриваем положительные значения только тогда, когда не было найдено ни одного положительного значения ранее (позиция остается неопределённой - -1)
if (a[i] > 0 && plus_pos == -1) {
plus_value = a[i];
plus_pos = i;
}
}
Кроме того вам требуется выявить первый положительный элемент, а значит как только вы нашли элемент проверку выполнять дальше не следует, поэтому
для отрицательного числа (которое надо найти последнее) проверяется каждый элемент
if (a[i] < 0) {для положительного числа (которое надо найти первое) проверяется элемент до тех пор пока не будет найден первый положительный элемент
if (a[i] > 0 && plus_pos == -1) {
P.S.
Ну и соответственно когда вы выводите результаты - проверяйте minus_pos и plus_pos на -1 и выводите соответствующий текст - типа положительных чисел найдено не было
Запомните - чем меньше n, тем выше шанс, что это случится, а при n = 1 шанс равен 100%, что или отрицательных или положительных или и тех и других найдено не будет (например в массиве только 0 будет)
а за что автора вопроса минусуют?