Задача: Одномерный вещественный массив, нахождение мин. по модулю элем

  • Автор темы Gantz
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Gantz

#1
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1)номер минимального по модулю элемента массива;
2)сумму модулей элементов массива, расположенных после первого отрицательного элемента
Помогите пожалуйста написать код.
C++,CodeBlocks
 

BashOrgRu

Well-known member
15.03.2009
77
0
#3
C++:
#include <stdio.h>
#include <stdlib.h>

int main()
{
const N=4;
double mas[N],min,Sum=0;
int i,minI=0;

/* Читаем массив.*/
for (i=0;i<N;i++) scanf("%lf",&mas[i]);
/* Ищем индекс минимального по модулю. */
min=fabs(mas[0]);
for (i=0;i<N;i++)
if (min>fabs(mas[i])) {
min=fabs(mas[i]);
minI=i;
}
printf("Number of min: %d\n",minI+1);

/* Находим сумму модулей элементов после первого отрицальтельного. */
minI=N-1;
for (i=0;i<N;i++) if (mas[i]<0){
minI=i;
break;
}
for (i=(minI+1);i<N;i++) Sum+=fabs(mas[i]);
printf("Sum: %lf",Sum);
return 0;
}
Добавлено: Acorn, извини) Забрал твой хлеб)
 

acorn

PHP Developer
29.08.2004
585
3
#4
l1pton17
да на эти деньги можно было торт купить :)
 

BashOrgRu

Well-known member
15.03.2009
77
0
#7
Точна) Только не minI=N а minI=N-1, так как mas[N] несуществует. Когда писал, думал, что потом исправлю этот баг и благополучно забыл нём)
 
G

Gantz

#8
у меня ошибка была вот
ISO C++ forbids declaration of 'n' with no type

но потом вроде переделал вот
C++:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>

int main()
{
const int n=4;
double mas[n],min,Sum=0;
int i,minI=0;

/* Читаем массив.*/
for (i=0;i<n;i++) scanf("%lf",&mas[i]);
/* Ищем индекс минимального по модулю. */
min=fabs(mas[0]);
for (i=0;i<n;i++)
if (min>fabs(mas[i])) {
min=fabs(mas[i]);
minI=i;
}
printf("Number of min: %d\n",minI+1);

/* Находим сумму модулей элементов после первого отрицальтельного. */
minI=n-1;
for (i=0;i<n;i++) if (mas[i]<0){
minI=i;
break;
}
for (i=(minI+1);i<n;i++) Sum+=fabs(mas[i]);
printf("Sum: %lf",Sum);
return 0;
}
но она ничего не выводит в чем дело?
 
J

jlahcejlot

#9
Может она выводит, но тут же окно закрывается ??? попробуй перед ретурном вставить getchar(); и если в условии массив должен быть размера n равзе не надо выделять память динамически ?...
 

DarkKnight

Well-known member
01.08.2010
653
0
#10
Если нужна динамика, то вот.. Но это мне кажется затруднит понимание..
1)номер минимального по модулю элемента массива;
2)сумму модулей элементов массива, расположенных после первого отрицательного элемента
C++:
/*
1)номер минимального по модулю элемента массива;
2)сумму модулей элементов массива, расположенных после первого отрицательного элемента
*/
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <time.h>
#include <iomanip>

using namespace std;

void main(void)
{
setlocale(LC_ALL,".1251"); //Локаль
srand(time(NULL)); //Инициализация генератора случ. величины
double	*Arr; //Массив (динамический)
int		Size; //Его размерность
int		Index = -1; //Индекс минимального по модулю элемента
double	MinEl = numeric_limits<double>::max(); //Минимальный по модулю элемент (его значение) пока установим в самое большое значение
double	Summa = 0; //Сумма модулей элементов расположенных после первого отрицательного элемента
bool	flag = false; //Флаг что первый отрицательный элемент найден

cout << "Введите размерность массива ";
cin >> Size;
getchar(); //Символ возврата корретки уберем

Arr = new double[Size]; //Выделим память под массив
//Генерируем значения для массива и выведим их на экран
for (int i = 0; i< Size; i++)
{
Arr[i] = (double(rand()%10000) / 1000) * (rand()%2?-1:1);
cout << Arr[i] << " ";
}

//Ну а теперь обойдем массив еще раз и выполним все задания
for (int i =0; i<Size; i++)
{
if (flag) //Если флаг установлен, то первый отрицательный элемент уже был и вычисляем сумму
Summa += abs(Arr[i]);
else if (Arr[i] < 0) flag = true; //Если флаг не установлен, но текущий эл. отрицательный значит установим его

if (MinEl > abs(Arr[i])) //Если MinEl > чем модуль Текущего эл. массива
{
MinEl = abs(Arr[i]); // То заменим MinEl
Index = i; //И запишим индекс
}
}

//Вывод результата
cout << endl << "Результат :" << endl;
cout << "Номер минимального по модулю элемента массива = " << Index+1 << endl;
cout << "Его значение в свою очередь = " << Arr[Index] << endl;
cout << "Cумма модулей элементов массива, расположенных после первого отрицательного элемента = " << Summa << endl;

getchar();
}
 

Вложения

Статус
Закрыто для дальнейших ответов.