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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2017, 18:38   #1
mixaM
Новичок
Джуниор
 
Регистрация: 24.04.2017
Сообщений: 2
По умолчанию Одномерные массивы

В одномерном массиве, состоящем из N вещественных элементов, вычислить:
1) Сумму отрицательных элементов массива.
2) Произведение элементов массива, расположенных между максимальным и
минимальными элементами.
3) Заполнить его случайными значениями и распечатать его по 10 чисел в строке.
4) Упорядочить элементы массива по возрастанию.
Вот код
Код:
#include <stdio.h>
#include <math.h>
#include  <stdlib.h>
void swap (int *a, int *b)
 
{
    int c = *a;
    *a = *b;
    *b = c;
}
 
void Poisk (double a[], int size, int *imax, int *imin )
 
{
    int i;
 
    double max,min;
    max=0;
    *imax=i;
    min=0;
    *imin=i;
    printf("Poisk\n");
    for (i = 0; i < size; i++)
 
    {
        printf("%d\t%f\n", i, a[i]);
        if(max<a[i])
        {
        max=a[i];
        *imax=i;
        }
         if(min>a[i])
        {
        min=a[i];
        *imin=i;
        }
    }
   
}
 
void Show (double a[], int size )
{
    int i;
     for (i = 0; i <size; i++)
        {
        if (i  % 10 == 0)
        {
                printf ("\n");
        }
 
                printf ("%.1lf  ", a[i]);
 
        }
    printf("\n");
 
 
}
 
 
void Sorting (double a[],int size)
{
    int i = 0, t = 0, j = 0;
 
    for (j = 0; j < size - 1; j++)
    {
        for (i = size - 2; i >= j ; i--)
        {
        if (a[i] > a[i+1])
            {
            t = a[i];
            a[i] = a[i+1];
            a[i+1] = t;
            }
        }
    }
    Show(a,size);
}
 
double Summa (double a[], int size)
{
    int i;
    double sum = 0;
    for (i = 0; i < size; i++)
        {  if (a[i] < 0) sum = sum + a[i]; }
    return sum;
}
 
double Proizvedenie (double a[], int size)
{
int first,
end;
double pr = 1;
 
Poisk(a, size, &first, &end);
for (first; first < end; first++)
{
pr *= a[first];
}
 
return pr;
}
 
 
int main()
{
    srand(time(NULL));
    int size,i,N,n;
 
    printf ("Vvedite N\n ");
    scanf ("%i", &size);
 
 
   double *a =(double *)malloc(size*sizeof(double));
 
 
    for (i = 0; i < size; i++)
    {
 
    a[i] = (rand() % 201) - 100;
    }
    Show(a, size);
    printf ("summa = %.1lf\n", Summa(a, size));
    printf (" proizvedenie = %.1lf \n", Proizvedenie(a, size));
 
    printf ("Po vozrastaniy: ");
    Sorting(a, size);
    free(a);
    return 0;
}
Сумму и сортировку делает правильно, а когда считает произведение добавляет либо максимальное либо минимальное значение в вычисление. Препод предложил сделать так:

Код:
void Poisk (double a[], int size, int *imax, int *imin )
 
{
    int i;
 
    double max,min;
    max=0;
    *imax=i;
    min=0;
    *imin=i;
    printf("Poisk\n");
    for (i = 0; i < size; i++)
 
    {
        printf("%d\t%f\n", i+1, a[i]);
        if(max<a[i])
        {
        max=a[i];
        *imax=i;
        }
         if(min>a[i])
        {
        min=a[i];
        *imin=i;
        }
    }
    if(*imax<*imin)
    {
    *imax++;
    *imin--;
    }
    if (*imax>*imin)
    {
    *imax--;
    *imin++;
    }
 
}
Но и тут та же самая проблема. Помогите найти ошибку. И подскажите, как добавить условие, когда между максимальным и минимальным ничего нет.

Последний раз редактировалось mixaM; 10.10.2017 в 20:40.
mixaM вне форума Ответить с цитированием
Старый 11.10.2017, 15:15   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Код:
  max=0;
    min=0;
Это сразу не верно, т.к. 0 может не быть в массиве, нада инициализировать элементом массива

Код:
  max=a[0];
    min=a[0];
А в остальном ваша версия вроде верна, препод фигню написал.

Кстати тут еще во что: если сделать поиск ДО сортировки, до индекс мин может быть больше индекса макс, т.е. вам нужно делать цикл от меньшего из них 2их + 1 до большего из них 2их -1. А вот после сортировки - индексы будут 0й и последний.
Кроме того, они могут быть и соседними индексами, т.е. все это нужно учесть.

Последний раз редактировалось alexzk; 11.10.2017 в 15:22.
alexzk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Одномерные массивы ~Sл@\/яH~ Общие вопросы C/C++ 3 20.11.2011 16:29
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Одномерные массивы chistayastranichka Помощь студентам 2 29.05.2009 00:56
Одномерные массивы chistayastranichka Паскаль, Turbo Pascal, PascalABC.NET 0 28.05.2009 10:37