Технический форум

Технический форум (http://www.tehnari.ru/)
-   C/C++/С# (http://www.tehnari.ru/f42/)
-   -   Программа выдает неверные значения (http://www.tehnari.ru/f42/t82679/)

Матроскин 21.12.2012 14:52

Программа выдает неверные значения
 
Цель: посчитать произведение элементов, стоящих между нулевыми элементами массива
код:
Код:

#include<conio.h>
#include<stdio.h>
#include<math.h>
#define n 10
int a[n];
void g(int pe, int pe1)
{
        int i,s=1;
        for(i=pe;i<pe1;i++)
                s*=a[i];
        printf("%d",s);
}
main()
{
        int pe,i,pe1;
        puts("Vvedite massiv");
    for(i=0;i<n;i++)
        {
            printf("a[%d] ",i);
            scanf("%d",a);
        }
        for(i=0;i<n;i++)
                {if(a[i]==0)
                        {
                            pe=i+1;
                break;
                        }
                }
    for(i=n;i>0;i--)
        {if(a[i]==0)
                        {
                            pe1=i-1;
                break;
                        }
        }
    printf("%d %d\n",pe,pe1);  //выводим индексы нулевых элементов (выводит не правильно)
    g(pe,pe1); 
        getch();
        return 0;
}

Где кроется ошибка?

kreol 21.12.2012 23:13

Ура тема оформлена нормально))) редкость в форуме программистов))

1) если вы что-то возвращаете из функции, то она обязательно должна иметь какой-то тип. т.е. перед main нужно поставить int

2) функция scanf ... вы ей передаете полностью массив, причем в цикле, т.е. несколько раз. Ну и кроме того, что она не умеет работать с массивом ей надо передавать еще и адрес переменной, а не саму переменную(ее значение)
т.е. В вашем случае:
Код:

scanf("%d", &a[i]);
а то у вас получается еще первый элемент заполнился числом(кст. не понимаю, почему не выкинулос ошибкой), а остальные 0

Матроскин 24.12.2012 15:05

Вложений: 1
лучше не стало... и вообще может быть это Code Blocks мне мозги парит? Проверьте пожалуйста в билдере программу

kreol 24.12.2012 17:49

Я как раз в нем и работаю.
Код:
Код:

#include<conio.h>
#include<stdio.h>
#include<math.h>
#define n 10
int a[n];
void g(int pe, int pe1)
{
        int i,s=1;
        for(i=pe;i<pe1;i++)
                s*=a[i];
        printf("%d",s);
}

int main()
{
        int pe,i,pe1;
        puts("Vvedite massiv");
    for(i=0;i<n;i++)
        {
            printf("a[%d] ",i);
            scanf("%d", &a[i]);
            printf("a[%d] = %d\n",i,a[i]);
        }
        for(i=0;i<n;i++)
                {if(a[i]==0)
                        {
                            pe=i;
                break;
                        }
                }
    for(i=n-1;i>0;i--)
        {if(a[i]==0)
                        {
                            pe1=i;
                break;
                        }
        }
    printf("%d %d\n",pe,pe1);  //выводим индексы нулевых элементов (выводит не правильно)
    g(pe+1,pe1); 
        getch();
        return 0;
}

Результат:
Код:

Vvedite massiv
a[0] 2
a[1] 3
a[2] 5
a[3] 0
a[4] 2
a[5] 5
a[6] 3
a[7] 4
a[8] 0
a[9] 2
3 8
120


Матроскин 24.12.2012 18:29

спасибо огромное


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.