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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2009, 02:36   #1
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию C++. Одномерные массивы.

Помогите исправить ошибки.

Задание:
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1. сумму отрицательных элементов массива;
2. произведение элементов массива, расположенных между максимальным и минимальным элементами.
Упорядочить элементы массива по возрастанию.


Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <tchar.h>
#define frand()  ((double) rand() / (RAND_MAX+0.2))
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	float n,p,s,sp;
	long int mas[10];
	int trash=0;
	cout<<"Vvedite razmer massiva:\n";
		cin>>n;
	s=0;p=0;sp=1;
	while (n<2)
	{
		if ((n<2)&&(n<10))
			{
				cout<<"N ne dolgno 6blt' men'she 2-yx i 6ol'she 10";
				cout<<"Poprobyu*te ewe raz";
				cout<<"n= ";cin>>n;
				cout<<"Razmer= "; cin>>n;
			}
		p=p+1;
		if (p=3)
			{
				cout<<"Vbl prevblsili 4islo popbltok!";
				cout<<"Razmer massiva 6ydet = 10";
				n=10;
			}
	}
	cout<< "\n Massiv: \n" ;
	for (int i=0;i<n;i++)
		{
			mas[i]=rand();
			cout<<mas[i]<< " \n" ;
		}
	for (int i=1;i<=n;i++)
		{
			for (int j=1;j<=n-i;j++) 
				{
					if (mas[j]>mas[j+1]) 
						{
							trash=mas[j]; 
							mas[j]=mas[j+1];
							mas[j+1]=trash;
						}
				}
		}
	cout<<"\n PreobrazovaHHblu* massiv: \n" ;
	for (int i=0;i<n;i++)
		{
			cout<<mas[i]<< " \n" ;
		}
	for (int i=0;i<n;i++)
		{
			if (mas[i]<0) s=s+mas[i];
		}
	for (int i=0;i<n;i++)
		{
			sp=sp*mas[i];
		}
	cout<<"\nSumma otrizatel'Hblx elementov:\n";
	cout<<"\n"<<!s<<"\n";
	cout<<"\nproizvedenie elementov massiva, raspologennblx megdy min i max:\n";
	cout<<"\n"<<!sp-mas[1]-mas[n]<<"\n";
	system("\npause\n");
	return 0;
}
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 20.09.2009, 05:57   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Код:
	for (int i=0;i<n;i++)
		{
			mas[i]=rand();
			cout<<mas[i]<< " \n" ;
		}
Функция rand возвращает псевдослучайное целое в интервале
от 0 до 32767.А Вам еще нужны и отрицательные
Цитата:
1. сумму отрицательных элементов массива;
Процедура srand может использоваться перед вызовом
rand для установки начальной случайной точки. srand не задано.
Отталкивайся лучше всего от времени:
Код:
#include <time.h>
#include <stdlib.h>
srand(time(NULL));
int i=rand();
j не объявленная переменная
Код:
for (int j=1;j<=n-i;j++)
ЗЫ ну это то что прямо режит глаз
dampirik вне форума Ответить с цитированием
Старый 20.09.2009, 07:44   #3
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

я бы так написал:
Код:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int obmen(int *a,int *b)
  {
    int c=*a;
    *a=*b;
    *b=c;
  }
main()
  {
    int c,i,y,pro,sumotr=0,min=0,min1=0,max=0,n,k=0;
    printf("%s\n","Введите размерность массива");
    c=getchar(); //гетч вводит только 1 байт
    c=c-'0';
    int mass[c];
    srand(time(0)); //задаем точку сеинья рендома
    for (i=0;i<c;i++)
      {
        n=rand()%2;
        if (n==1)
          n=-1;
        else
          n=1;
        mass[i]=n*rand()%10+1; //заполняем массив рендомными значениями
                               //в промежутке от 1 до 10 для отладки
        printf("%d ",mass[i]);
       }
    //считаем сумму отрицательных элементов
    for (i=0; i<c;i++)
      {
        if (mass[i]<0)
          sumotr=sumotr+mass[i];
      }
    printf("\nsumotr = %d\n",sumotr);
    //найдем минимальный элемент массива
    for (i=0;i<(c-1);i++)
       {
          if ((mass[i]<=mass[i+1])&&(mass[i]<=mass[min]))
            min=i;
        }
    if (mass[c-1]<mass[min])
      min=c-1;
    printf("min = %d\n",mass[min]);
     //найдем максимальный элемент массива
    for (i=0;i<(c-1);i++)
      {
        if ((mass[i]>=mass[i+1])&&(mass[i]>=mass[max]))
          max=i;
      }
    if (mass[c-1]>mass[max])
      max=c-1;
    printf("max = %d\n",mass[max]);
    //произведение между мин и макс
    if ((min<max)&&(mass[min+1]!=mass[max]))
      {
        pro=1;
        for (i=(min+1);i<max;i++)
          {
            pro=pro*mass[i];
          }

       }
    if ((max<min)&&(mass[max+1]!=mass[min]))
      {
        pro=1;
        for(i=(max+1);i<min;i++)
          {
            pro=pro*mass[i];
          }

      }
    if (((max<min)&&(mass[max+1]!=mass[min]))||((min<max)&&(mass[min+1]!=mass[max])))
      printf("pro = %d\n",pro);
    else
      printf("В промежутке нет значений\n");
    //упорядочевание массива по возрастанию

    for (i=0;i<c;i++)
      {
        min1=k;
        for(y=k;y<(c-1);y++)
          {
            if ((mass[y]<=mass[y+1])&&(mass[y]<=mass[min1]))
              min1=y;
          }
        k++;
        if (mass[c-1]<mass[min1])
          min1=c-1;
        obmen(&mass[i],&mass[min1]);

      }
       printf("\n");
    //вывод упорядоченного массива
    for(i=0;i<c;i++)
      printf(" %d ",mass[i]);
    printf("\n");
  }
dampirik вне форума Ответить с цитированием
Старый 20.09.2009, 09:47   #4
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Ваш код у меня не компилится, ошибка говорит о тои что нет библиотеки "stdafx.h", подключаю её, и компилятор выдаёт 43 ошибки=(
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 20.09.2009, 15:53   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
#include <stdio.h>
#include <iostream>
#include <time.h>

// Задание:
// В одномерном массиве, состоящем из n вещественных элементов, вычислить:
// 1. сумму отрицательных элементов массива;
// 2. произведение элементов массива, расположенных между максимальным и минимальным элементами.
// 3. Упорядочить элементы массива по возрастанию.

double first(double arr[], int len)
{
	double sum = 0;

	for(int i = 0; i < len; i++)
		if(arr[i] < 0)
			sum += arr[i];

	return sum;
}

double second(double arr[], int len)
{
	int index_min = 0;
	int index_max = 0;
	double mult = 1;

	for(int i = 0; i < len; i++) {
		if(arr[i] < arr[index_min])
			index_min = i;
		if(arr[i] > arr[index_max])
			index_max = i;
	}

	if(index_min > index_max) {
		int temp_index = index_min;
		index_min = index_max;
		index_max = temp_index;
	}

	for(int i = index_min+1; i < index_max; i++)
		mult *= arr[i];

	return mult;
}

void sort(double arr[], int len)
{
	for(int i = 0; i < len-1; i++)
		for(int j = i+1; j < len; j++)
			if(arr[i] > arr[j]) {
				double temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}

	return;
}

int main()
{
	double arr[10];

	srand(time(0));
	for(int i = 0; i < 10; i++) {
		arr[i] = rand()%256 - 128;
		std::cout << arr[i] << ' ';
	}

	std::cout << "\nSuma otricatelnyh: " << first(arr, 10) << std::endl;
	std::cout << "Proizvedenie mejdu min i max: " << second(arr, 10) << std::endl;

	sort(arr, 10);

	std::cout << "Otsortirovannyj massiv:\n";
	for(int i = 0; i < 10; i++)
		std::cout << arr[i] << ' ';
	
	return 0;
}
Только по поводу второго задания... Немного не понял, надо между минимальным и максимальным до сортировки или после? сделал до.
netrino вне форума Ответить с цитированием
Старый 20.09.2009, 17:45   #6
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

В задании не указано до или после=) поэтому я думаю можно и после, а если до, то только мороки больше=) спасибо огромное=)
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 20.09.2009, 21:56   #7
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Цитата:
Ваш код у меня не компилится, ошибка говорит о тои что нет библиотеки "stdafx.h", подключаю её, и компилятор выдаёт 43 ошибки=(
Я g++ компилятор использую, консоль.
dampirik вне форума Ответить с цитированием
Старый 18.07.2011, 22:30   #8
beavis1990
 
Регистрация: 18.07.2011
Сообщений: 4
По умолчанию

здесь только нет 3-го задания, оно просто есть в теории в учебнике Т.А. Павловской


#include <iostream>
using namespace std;
int main ()
{
const int n=5;
int mas[n];
int i, Minch=0, Maxch=0, pro;

for(i=0;i<n;i++)cin>>mas[i];

for(i=0;i<n;i++)
{
if(mas[i]<mas[Minch])Minch=i;
}
for(i=0;i<n;i++)
{
if(mas[i]>mas[Maxch])Maxch=i;
}

if(Minch<Maxch)
{
pro=1;
for(i=Minch;i<Maxch;i++)
pro*=mas[i];
}

cout<<"Minimal'noe chislo massiva:" << mas[Minch]<<"\n"<<"Maximal'noe chislo massiva:" << mas[Maxch]<<"\n";

cout<<"Proizvedenie chisel mezhdu MIN i MAX: " << pro<<"\n";

cin.get ();
cin.get ();
return 0;
}
beavis1990 вне форума Ответить с цитированием
Старый 18.07.2011, 22:41   #9
beavis1990
 
Регистрация: 18.07.2011
Сообщений: 4
По умолчанию

Ссори вот кусочи кода на сумму отрицательных элементов

for (i=0,sum=0;i<n;i++)
{
if (mas[i]<0) sum+=mas[i];
}
beavis1990 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Одномерные массивы. P@niSheR Паскаль, Turbo Pascal, PascalABC.NET 1 16.09.2009 22:05
Одномерные массивы britva666 Помощь студентам 7 23.06.2009 22:03
Одномерные массивы chistayastranichka Паскаль, Turbo Pascal, PascalABC.NET 0 28.05.2009 10:37
Одномерные Массивы ТРОЯН=) Помощь студентам 4 03.02.2009 00:11