Массивы, коррекция кода

eek

Для одномерного массива целых чисел B (n) найти частное от деления суммы индексов парных положительных элементов на произведение индексов нечетных элементов заданного массива, где 0 <= n <=55.В чем ошибка:
#include <stdio.h>
#include <math.h>
 
main() {
int d, n, i, b[55];
int P = 1; 
int S = 0; 
int Vidpovid;
 
    while(1) {
               printf("Vvedit' n: ", n);
               scanf("%d", &n);
               d = (0 <= n) && (n <= 55);
               if(d) break;
               printf("P.P.V!!!");
}    
     
    for(i = 0; i < n; i++) {
               printf("\nVvedit' znachennia elementiv masuvy b [%d]: ", i);
               scanf("%d", &b[i]);
}     
      
               printf("\nVuvodumo masuv b[%d]: ", n);
               for(i = 0; i < n; i++) {
                     if( i % 2 == 0)
                         S = S + i;
                           else
                               if( i % 2 != 0 )
                                   P = P * i;
}
 
               printf("\n\n\nVuvodumo masuv b[%d]: ", n);
               for(i = 0; i < n; i++) {
                     printf("%d", b[i]);
}
               Vidpovid = S % P;
                        printf("%d", &Vidpovid);                   
                        scanf("%d", &n);
               }
5 ответов

eek

Строка 23 - лишняяВ строке 25: if (b[i] %2 == 0) - вам же нужен четный ("парный") положительный элемент, а не индекс строка 28 - лишняястрока 8: ****** Vidpovid; - вы считаете частное - это не int строка 36: Vidpovid = 1. * S / P строка 37: какой дивный "принт", вам нужен адрес или значение переменной? с учетом ****** будет так: printf("%.3lf", Vidpovid) - форматный вывод с округлением до 3 знаков.


eek

Переделал вот так:
#include <stdio.h>
#include <math.h>
 
main() {
int d, n, i, b[55];
int P = 1; 
int S = 0; 
int Vidpovid;
 
    while(1) {
               printf("Vvedit' n: ", n);
               scanf("%d", &n);
               d = (0 <= n) && (n <= 55);
               if(d) break;
               printf("P.P.V!!!");
}    
     
    for(i = 0; i < n; i++) {
               printf("\nVvedit' znachennia elementiv masuvy b [%d]: ", i);
               scanf("%d", &b[i]);
}     
      
               for(i = 0; i < n; i++) {
                     if( b[i] % 2 == 0 && b[i] > 0)
                         S = S + i; // S += i
                           else
                               if( b[i] % 2 != 0  && i != 0)
                                   P = P * i; // P *= i
}
               printf("\nSuma dorivnue: %d", S);
               
               printf("\nDobytok dorivnue: %d", P);
                     
 
               printf("\n\n\nVuvodumo masuv b[%d]: ", n);
               for(i = 0; i < n; i++) {
                     printf("%d ", b[i]);
}
               Vidpovid = S % P;
                        printf("\n Chastka dorivnue: %d", Vidpovid);                   
                        scanf("%d", &n);
               }
Вроде как все работает. Ввожу элементы массива:
элементы индексы
1 0
2 1
4 2
8 3
3 4
6 5
S (парных элементов, сумма их индексов) = 1 + 2 + 3 + 5 = 11. P (непарных элементов, произведение индексов) = 4.Остаток от деления = 3.п.с я сделал чтобы i != 0, потому что в противном случае при произведение будет ноль.


eek

найти частное от деления
Остаток от деления
Что ищем?


eek

Это я переводил условие с украинского, остаток будет правильнее.


eek

Это я переводил
Зрозуміло )