Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 854

Раздел: C++
/ вопрос открыт /

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

skipper102 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: skipper102 (статус: Посетитель)
Вопрос отправлен: 23 декабря 2010, 19:41
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ну вот как-то так:

#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <math.h>
 
using namespace std;
 
/*
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество отриц. элементов массива;
2) сумму модулей элементов массива, расположенных после минимального по
   модулю элемента.
3) Заменить все отриц. элементы массива их квадратами.
4) Упорядочить элементы массива по возрастанию.
*/
 
#define n 10 // длина массива
 
// Заполнение массива случайными значениями
void MakeArray(double *X)
{
  for (int Index = 0; Index != n; Index++)
    X[Index] = (double)(rand() - rand()) / 0xfc;
}
 
// Подсчёт отрицательных элементов массива
unsigned GetNegativeCount(double *X)
{
  unsigned Count = 0;
  for (int Index = 0; Index != n; Index++)
    if (X[Index] < 0) Count++;
  return Count;
}
 
// Вычисление суммы модулей элементов массива,
// расположенных после минимального по модулю элемента.
double GetSum(double *X, unsigned *MinIndex)
{
  double Min = fabs(X[0]), Sum = 0.0;
  *MinIndex = 0;
 
  for (int Index = 1; Index != n; Index++)
    if (fabs(X[Index]) < Min)
    {
      Min = fabs(X[Index]);
      *MinIndex = Index;
    }
 
  for (int Index = 0; Index != *MinIndex; Index++)
    Sum += fabs(X[Index]);
 
  return Sum;
}
 
// Замена все отриц. элементы массива их квадратами.
void NegativeToSquare(double *X)
{
  for (int Index = 0; Index != n; Index++)
    if (X[Index] < 0)
      X[Index] *= X[Index];
}
 
// Сортировка по возрастанию
void Sort(double *X)
{
  double Temp;
 
  for (int Index1 = 0; Index1 != n; Index1++)
    for (int Index2 = Index1; Index2 != n; Index2++)
      if (X[Index1] > X[Index2])
      {
        Temp = X[Index1];
        X[Index1] = X[Index2];
        X[Index2] = Temp;
      }
}
 
// Вывод массива на консоль
void OutArray(double *X)
{
  for (int Index = 0; Index != n; Index++)
    printf("  %0.2f", X[Index]);
  printf("\n");
}
 
int main(int argc, char *argv[])
{
  double X[n]; // массив из n элементов
  double Sum;  // сумма модулей элементов массива,
               // расположенных после минимального по модулю элемента.
  unsigned MinIndex; // номер элемента, минимального по модулю
 
  MakeArray(X);
 
  printf("Source array:\n");
  OutArray(X);
 
  printf("\nNegative items: %d\n", GetNegativeCount(X));
 
  Sum = GetSum(X, &MinIndex);
  printf("\nSum of absolute values before absolute minimum (%0.2f): %0.2f\n", X[MinIndex], Sum);
  printf("\nAfter changes negative items to it's squares:\n");
  NegativeToSquare(X);
  OutArray(X);
 
  printf("\nArray after sorting:\n");
  Sort(X);
  OutArray(X);
 
  printf("\n\n");
  system("PAUSE");
  return EXIT_SUCCESS;
}

Экзешник прицепляю к ответу.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 24 декабря 2010, 09:56
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 28 декабря 2010, 23:06; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 23 декабря 2010, 20:53 [#1]:

Скажи мне, уважаемый, а почему ты не можешь сделать эту лабу самостоятельно? Это ж элементарщина!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
skipper102

skipper102 (статус: Посетитель), 23 декабря 2010, 21:09 [#2]:

Я знаю, что это элементарщина, но у меня получается неправильно, я начал был делать, вот:
s = 0;
for(i=1;i<=N;i++)
{
si = 0;
for(j=1;j<=i;j++)
si+=sin((double) i );
s+=1.0/si;
}
cout << s;
2 задача
кол-во отриц. элем.
int k = 0;
for(i=0; i < n ; i++)
if ( a [ i ] < 0) k++;
bugmenot

bugmenot (статус: 3-ий класс), 23 декабря 2010, 23:10 [#3]:

это -- другой вариант
виконання програми розпочинається з того самого мiсця, де призупинилося.

min@y™

min@y™ (статус: Доктор наук), 25 декабря 2010, 12:00 [#4]:

Цитата (skipper102):

Оценка за ответ: 5

А где коммент? Подошло или как? Правильно ли работает?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
eclipse

eclipse (статус: Посетитель), 28 декабря 2010, 23:06 [#5]:

пипец!
1-м те надо найти отрицательные элемементы... это те которые меньше 0!
2- короче тупо в мясо ве значения которые меньше по модулю и всё!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.04 сек.