Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задачка с массивами, помогите пожалуйста!

51K
15 марта 2010 года
xiwnik
23 / / 15.03.2010
Доброго времени суток!

Ребята, помогите пожалуйста разобраться с задачей, я осилил на половину, а вот как дальше быть, не могу разобраться.

Задача:
Цитата:

Вычислить среднее арифметическое элементов массива, расположенных между его min и max значениями. Если min размещается в массиве раньше max, то упорядочить массив на данном промежутке по возрастанию его элементов.



Как понял я:
Создаем массив с рандомными элементами, количество элементов вводим с клавиатуры. Затем находим min и max значения (с этим я справился). После нужно определить положение максимального и минимального элементов массива. Посчитать среднее арифметическое элементов между min и max, вывести результат. Ну и в конце: если min размещается в массиве раньше max, то упорядочить массив на данном промежутке по возрастанию его элементов.

Я недавно начал изучать С++ в универе, не пинайте сильно, если я ошибаюсь. Заказал книжку Г.Шилдта, жду, ее советую на всех форумах, которые я посещал.

Код программы, которая у меня получилась:

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

using namespace std;

int s; // глобальная переменная - размерность итогового массива

int max_el(int *f) // функция нахождения максимального элемента массива
{
int i, q;
q=0;
for(i=0; i<s; i++)
 if (f>q) q=f;
return q;
}

int min_el(int *f) //функция нахождения минимального элемента массива
{
int i, q, temp;
for(i=1; i<s; i++)
 {
 for(q=s-1; q>=i; q--)
  {
   if(f[q-1] < f[q])
   {
    temp=f[q-1];
    f[q-1]=f[q];
    f[q]=temp;
   }
  }
 }
return temp;
}

int main()
{
    int i,n, max, min;
    int *a;
   
    cout <<"KOJIU4ECTBO EJIEMEHTOB MACCUBA: "; cin >> s;
   
    a=(int*) malloc (s*sizeof(int)); //резервирование памяти под  массив
   
    for (i=0; i<s; i++) a=rand(); //заполнение массива псевдослучайными числами
    cout << "\n";
    for(i=0; i<s; i++)
    cout << "a["<<i<<"] = " << a << "\n";

           max=max_el(a); //нахождение максимального
    cout << "\n""MAKCUMAJIbHbIU EJIEMEHT MACCUBA: "<<max<< "\n";

    min=min_el(a); //нахождение мминимального
    cout << "\n""MUHUMAJIbHbIU EJIEMEHT MACCUBA: "<<min<< "\n";

    free(a); //Очищаем память
    return 0;
   
}


Очень надеюсь на вашу помощь. Я учусь на вечерней основе, там много не объясняют... х(
8.4K
16 марта 2010 года
z0rch
275 / / 02.09.2008
Код:
int s,max_i,min_i; // пусть будут глобальными

int max_el(int *f) // функция нахождения максимального элемента массива
{
int i, q;
q=f[0];max_i=0;    //обратите внимание на эту строку
for(i=1; i<s; i++)   // и на эту
 if (f>q)
 {
     q=f;
     max_i=i; // запомним позицию максимального
 }
return q;
}

потом именно таким же образом, а не вашей ф-ией, ищите минимальный элемент и его позицию.
Цитата:
Если min размещается в массиве раньше max, то упорядочить массив на данном промежутке по возрастанию его элементов.


сравниваете индексы, и только в нужном варианте сортируете.(хотя можете и свой вариант доработать, это не принципиально)

Цитата:
Вычислить среднее арифметическое элементов массива, расположенных между его min и max значениями


циклом от min_i до max_i проходите массив, считая среднее арифметическое...
ну вот, как вариант, именно так.

51K
16 марта 2010 года
xiwnik
23 / / 15.03.2010
z0rch, спасибо за подсказку. С Задачей я справился!
Сильно не пинайте, я не гуру, многого еще не знаю, вот результат:

Код:
/* Вычислить среднее арифметическое элементов массива, расположенных между его min и max значениями.
   Если min размещается в массиве раньше max, то упорядочить массив на данном промежутке по возрастанию
   его элементов. */

#include "stdafx.h"
#include <iostream>
#include <stdio.h>

using namespace std;

int s, min_i, max_i; // Глобальная переменная

int max_el(int *f) // Функция нахождения максимального элемента массива
{
int i, q;
q=f[0];
for(i=1; i<s; i++)
 if (f>q)
 {
     q=f;
 }
 return q;
}

int min_el(int *f) // Функция нахождения минимального элемента массива
{
int i, q;
q=f[0];
for(i=1; i<s; i++)  
 if (f<q)
 {
     q=f;
 }
return q;
}

int mi_i(int *f) // Функция нахождения максимального элемента массива
{
int i, q;
q=f[0];
max_i=0;    
for(i=1; i<s; i++)  
 if (f<q)
 {
     q=f;
     max_i=i; // Запомним позицию максимального
 }
 return max_i;
}

int ma_i(int *f) // Функция нахождения максимального элемента массива
{
int i, q;
q=f[0];
min_i=0;    
for(i=1; i<s; i++)  
 if (f>q)
 {
     q=f;
     min_i=i; // Запомним позицию минимального
 }
 return min_i;
}


int bubble_sort(int *f) // Функция сортировки методом пузырька
{
int i, q, temp;
for(i=1; i<s; i++)
 {
 for(q=s-1; q>=i; q--)
  {
   if(f[q-1] > f[q])
   {
    temp=f[q-1];
    f[q-1]=f[q];
    f[q]=temp;
   }
  }
 }
return (0);
}

int main()
{   /* Объявляем переменные */
    int i, f, maxEl, minEl, maxNum, minNum;
    int *a;
    double g;
   
    /* Вводим с клавиатуры количество элементов массива */
    cout <<"KOJIU4ECTBO EJIEMEHTOB MACCUBA: "; cin >> s;

    /* Резервирование памяти под массив */
    a=(int*) malloc (s*sizeof(int));
   
    /* Заполнение исходных массивов псевдослучайными числами */
    for (i=0; i<s; i++) a=rand();
    cout << "\nUCXODHbIU MACCUB:\n";
    for(i=0; i<s; i++)
    cout << "a["<<i<<"] = " << a << "\n";

    /* Нахождение минимального значения элемента массива и его номер */
    minEl=min_el(a); // Минимальное значение
    minNum=mi_i(a); // Номер массива
    cout << "\n""MUHUMAJIbHbIU EJIEMEHT MACCUBA: a["<<minNum<<"] = "<<minEl<<"\n";

    /* Нахождение максимального значения элемента массива и его номер */
    maxEl=max_el(a); // Максимальное значение
    maxNum=ma_i(a); // Номер массива
    cout << "MAKCUMAJIbHbIU EJIEMEHT MACCUBA: a["<<maxNum<<"] = "<<maxEl<<"\n";

    /* Вычисляем среднеарифмитическое элементов массива, расположенных между minEl и maxEl значениями */
    g=0;
    f=minNum+1; // Увеличиваем номер minEl массива на 1, чтобы не учитывать его при расчетах
    for (i=f; i<maxNum; i++)
    {
        g=(g+a)/i;
    }
    cout << "CPEDHEAPUFMUTU4ECKOE EJIEMEHTOB MACCUBA: " <<g<<"\n";

    /* Производим сортировку массива по возрастанию на промежутке между minEl и maxEl елементами при
    условии, что minEl размещается в массиве раньше чем maxEl, в противном случае сортировку не производим. */
    if (minNum<maxNum)
    {
    bubble_sort(a); //сортировка
    cout << "\nCOPTUPOBKA EJIEMEHTOB MACCUBA IIO BO3PACTAHUIO:\n";
    for(i=f; i<maxNum; i++)
    cout << "a["<<i<<"] = " << a << "\n";
    }
    else
    {
        cout << "3HA4EHU9 EJIEMEHTOB MACCUBA HE IIOIIADAIOT IIOD YCJIOBUE 3ADA4U";
    }
    /* Освобождаем память*/
    free(a);
    return 0;
}


Если что не так, поправьте пожалуйста. Данный код я скомпилировал и он благополучно запускается и выдает нужный результат.

Вопрос:
Что нужно добавить в код, чтобы при запуске exe файла, он не закрывался, как только я вожу число. Спасибо!
14K
16 марта 2010 года
Fenja
138 / / 20.03.2009
Цитата:
Что нужно добавить в код, чтобы при запуске exe файла, он не закрывался, как только я вожу число.


Перед return 0;
Допиши

 
Код:
getch();

И тогда прога будет ждать нажатие любой клавиши, после нажатия любой (кроме кнопок на системнике :) ) вызовиться return и прога закроется.
8.4K
17 марта 2010 года
z0rch
275 / / 02.09.2008
добавлю, что _getch() находится в библиотеке <conio.h>, которую естественно надо подключить
51K
17 марта 2010 года
xiwnik
23 / / 15.03.2010
Fenja, спасибо, я пробовал использовать,
 
Код:
getch();

но задержка не срабатывала.
z0rch, еще раз спасибо, теперь буду знать, что нужно подключать данную библиотеку! С библиотекой <conio.h> все работает отлично! :p
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог