• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Gantz

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

BashOrgRu

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, извини) Забрал твой хлеб)
 
B

BashOrgRu

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

Gantz

у меня ошибка была вот
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

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

DarkKnight

Если нужна динамика, то вот.. Но это мне кажется затруднит понимание..
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();
}
 

Вложения

  • floatmass.jpg
    floatmass.jpg
    36,2 КБ · Просмотры: 397
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!