Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 21.12.2012, 14:52   #1 (permalink)
Матроскин
4846АМ
 
Аватар для Матроскин
 
Регистрация: 07.05.2010
Сообщений: 1,941
Записей в дневнике: 22
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 3 сообщениях
Репутация: 7564
По умолчанию Программа выдает неверные значения

Цель: посчитать произведение элементов, стоящих между нулевыми элементами массива
код:
Код:
#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;
}
Где кроется ошибка?
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем
Матроскин вне форума   Ответить с цитированием

Старый 21.12.2012, 14:52
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно участники форума давали ответ в похожих темах

Вычислить значения функции, заданной графически
Вычислить значения функции, заданной графически
Программа для вычисления значения первой и второй производных функции x^n в заданной
Значения напряжения в реальном времени
Pascal ABC. Массивы. Нахождение значения переменной Y

Старый 21.12.2012, 23:13   #2 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

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

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

2) функция scanf ... вы ей передаете полностью массив, причем в цикле, т.е. несколько раз. Ну и кроме того, что она не умеет работать с массивом ей надо передавать еще и адрес переменной, а не саму переменную(ее значение)
т.е. В вашем случае:
Код:
scanf("%d", &a[i]);
а то у вас получается еще первый элемент заполнился числом(кст. не понимаю, почему не выкинулос ошибкой), а остальные 0
kreol вне форума   Ответить с цитированием
Старый 24.12.2012, 15:05   #3 (permalink)
Матроскин
4846АМ
 
Аватар для Матроскин
 
Регистрация: 07.05.2010
Сообщений: 1,941
Записей в дневнике: 22
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 3 сообщениях
Репутация: 7564
По умолчанию

лучше не стало... и вообще может быть это Code Blocks мне мозги парит? Проверьте пожалуйста в билдере программу
Миниатюры
2012-12-22_154045.png  
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем
Матроскин вне форума   Ответить с цитированием
Старый 24.12.2012, 17:49   #4 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

Я как раз в нем и работаю.
Код:
Код:
#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
kreol вне форума   Ответить с цитированием
Старый 24.12.2012, 18:29   #5 (permalink)
Матроскин
4846АМ
 
Аватар для Матроскин
 
Регистрация: 07.05.2010
Сообщений: 1,941
Записей в дневнике: 22
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 3 сообщениях
Репутация: 7564
По умолчанию

спасибо огромное
__________________
Человек будет свободен до тех пор, пока дважды два равно четырем
Матроскин вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.