Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2013, 19:13   #1
Deymonn
 
Регистрация: 04.01.2013
Сообщений: 7
По умолчанию Задача на массив.

Условие: Задан целочисленный знаковый массив из N элементов.
Необходимо: 1) Найти среднее значение чисел в диапазоне от А до В
2) Найти сумму элементов до минимального
3) Найти произведение элементов после максимального
Вот мой не до конца работающий код, точнее он сделан по пункту 1 и есть небольшой фундамент для 2 и 3 пункта. Помогите реализовать 2 и 3 пункт у самого не получается.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int main()
{
	int* a;
	int T=0,A,B,len, max, min;
	unsigned char r=0;
	float SZ;
	srand(time(NULL));
	printf("Vvedite razmer massiva:\n");
	do 
	{
		scanf("%d", &len);                       
	} while ((len < 1));
	do{printf("\n Vvedite diaposon A= ");
		scanf("%d", &A);
    	printf("\n Vvedite diaposon B= ");
		scanf("%d", &B);}while(A>B);
	a = new int[len]; 
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", a[i] = rand()%200 - 100); 
		if (i == 0)                              
		{   
			min = a[0];
			max = a[0];
			continue;
		}
		if (a[i] > max)
		{
			max = a[i];
		
		}
		if (a[i] < min)
		{ 
			min = a[i];		
		}
        if((a[i]>=A)&&(a[i]<=B))
		{T+=a[i];
		 r++;
		SZ=0;}
		SZ=(float)T/r;
	}
	delete []a;
	
	printf("\n Srednee znachenie v diaposone=%.6f", SZ);
	printf("\nMAX = %d, MIN = %d", max, min);
	getch();
	return 0;
}

Допустим массив из 5 элементов :
3 5 6 -5 2
Диапазон А=2
Диапазон В=6
Тогда Среднее значение в диапазоне = 2+3+5+6/4=4
Минимальный элемент = -5
Сумма до минимального = 3+5+6=14
Максимальное значение = 6
Произведение после максимального = -5*2= 10
Сумму и произведение не получается реализовать, очень буду признателен за помощь )
Deymonn вне форума Ответить с цитированием
Старый 04.01.2013, 19:41   #2
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

Код:
min = mas[0];
index = 0;
for (int i=0; i<N; i++)
if (min>mas[i])
{
    min = mas[i];
    index = i;
}

sum = 0;
for (int i=0; i<index; i++)
sum+=mas[i];
вроде так... писал код здесь. может будут ошибки)

Код:
max = mas[0];
index = 0;
for (int i=0; i<N; i++)
if (max<mas[i])
{
    max = mas[i];
    index = i;
}
dob = 1;
for (int i=index+1; i++; i<N)
dob*=mas[i];

Последний раз редактировалось Pein95; 04.01.2013 в 19:45.
Pein95 вне форума Ответить с цитированием
Старый 04.01.2013, 21:46   #3
Deymonn
 
Регистрация: 04.01.2013
Сообщений: 7
По умолчанию

Вот твоим способом попробовал, даже если без среднего зна-я, Сумму и произведение при кол-ве ел-в = 5 выдает не те числа которые нужно
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int main()
{
	int* a;
	int index,len,max,pro, min,sum;
	srand(time(NULL));
	printf("Vvedite razmer massiva:\n");
	do 
	{
		scanf("%d", &len);                       
	} while ((len < 1));

	a = new int[len]; 
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", a[i] = rand()%200 - 100); 
		min = a[0];
        index = 0;
          for (int i=0; i<len; i++)

           if (min>a[i])
		   {
            min = a[i];
            index = i;
		   }

           sum=0;
          for (i=0; i<index; i++)
		  {
            sum+=a[i];
		  }
		  max = a[0];
          index = 0;
          for ( i=0; i<len; i++)
          if (max<a[i])
		  {
           max = a[i];
           index = i;
		  }
          pro = 1;
          for (i=index+1; i<len; i++)
          pro*=a[i]; 
		  
	}
	delete []a;
	printf("\nSUM=%d",&sum);
	printf("\nPRO=%d",&pro);
	
	printf("\n MIN = %d \n MAX = %d",  min, max);
	getch();
	return 0;
}
Deymonn вне форума Ответить с цитированием
Старый 04.01.2013, 22:55   #4
Deymonn
 
Регистрация: 04.01.2013
Сообщений: 7
По умолчанию

Вот такой еще код тож не рабочий помогите 8(
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int main()
{
	int* a;
     
	int sum=0,pro=1,T=0,A,B,len, max, min,index,index1;
	unsigned char r=0;
	float SZ;
	srand(time(NULL));
	printf("Vvedite razmer massiva:\n");
	do 
	{
		scanf("%d", &len);                       
	} while ((len < 1));
	do{printf("\n Vvedite diaposon A= ");
		scanf("%d", &A);
    	printf("\n Vvedite diaposon B= ");
		scanf("%d", &B);}while(A>=B);
	a = new int[len]; 
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", a[i] = rand()%200 - 100); 
		if (i == 0)                              
		{   
			min = a[0];
			max = a[0];
			continue;
		}
		if (a[i] > max)
		{
			max = a[i];
            index=i;
		
		}
		if (a[i] < min)
		{ 
			min = a[i];
            index1=i;		
		}
        if((a[i]>A)&&(a[i]<B))
		{T+=a[i];
		 r++;
		SZ=0;}
		SZ=(float)T/r;
	   }
	   for ( i = 0; i < len; i++) 
	   {
	   i=index+1;
	   if(i<len)
	   {
		   pro*=a[i];
		   i++;
	   }

        i=0;
		if(i<index1)
		 {
         sum+=a[i];
		 }
	   }
	    delete[]a;
        printf("\n SUM=%d", sum);        
        printf("\n Pro=%d", pro);
     	printf("\n Srednee znachenie v diaposone=%.6f", SZ);
	    printf("\nMAX = %d, MIN = %d", max, min);
	getch();
	return 0;
}
Deymonn вне форума Ответить с цитированием
Старый 04.01.2013, 23:39   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Небольшое замечание:
Код:
SZ=(float)T/r;
вынеси за тело цикла.
Ну и конечно же убери инициализацию SZ из этого условного оператора.
Код:
if((a[i]>A)&&(a[i]<B))
		{T+=a[i];
		 r++;
		SZ=0;}
Можешь инициализировать до цикла или проигнорировать предупреждение.
Вот еще:
Код:
unsigned char r=0;
Т.е. max значение для r - 255. Может это и нормально ...
А это что за ...
Код:
for ( i = 0; i < len; i++)
 {
	i=index+1;
	if(i<len)
	{
	    pro*=a[i];
	    i++;
	}
        i=0;
	if(i<index1)
	{
           sum+=a[i];
	}
}
Жирные фиг. скобки - тело цикла. Переменная цикла i.
Вместе с тем в теле цикла встречаются операторы:
Код:
i=index+1;
и
Код:
 i=0;
Такие операции с переменной цикла делать нельзя.


Как-то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 05.01.2013, 18:59   #6
Deymonn
 
Регистрация: 04.01.2013
Сообщений: 7
По умолчанию

Спасибо, теперь все работает, разобрался)
Deymonn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на массив mimit Помощь студентам 1 14.11.2012 22:30
задача на массив diamn3452 Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2011 18:07
задача на массив. malyshka2202 Паскаль, Turbo Pascal, PascalABC.NET 0 12.12.2011 16:02
Задача на массив Влад. Паскаль, Turbo Pascal, PascalABC.NET 10 24.10.2011 20:38
Задача на массив Юрии Александрович Паскаль, Turbo Pascal, PascalABC.NET 5 08.12.2007 15:32