Задачка с массивами, помогите пожалуйста!
Ребята, помогите пожалуйста разобраться с задачей, я осилил на половину, а вот как дальше быть, не могу разобраться.
Задача:
Вычислить среднее арифметическое элементов массива, расположенных между его min и max значениями. Если min размещается в массиве раньше max, то упорядочить массив на данном промежутке по возрастанию его элементов.
Как понял я:
Создаем массив с рандомными элементами, количество элементов вводим с клавиатуры. Затем находим min и max значения (с этим я справился). После нужно определить положение максимального и минимального элементов массива. Посчитать среднее арифметическое элементов между min и max, вывести результат. Ну и в конце: если min размещается в массиве раньше max, то упорядочить массив на данном промежутке по возрастанию его элементов.
Я недавно начал изучать С++ в универе, не пинайте сильно, если я ошибаюсь. Заказал книжку Г.Шилдта, жду, ее советую на всех форумах, которые я посещал.
Код программы, которая у меня получилась:
#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;
}
Очень надеюсь на вашу помощь. Я учусь на вечерней основе, там много не объясняют... х(
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_i до max_i проходите массив, считая среднее арифметическое...
ну вот, как вариант, именно так.
Сильно не пинайте, я не гуру, многого еще не знаю, вот результат:
Если 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 файла, он не закрывался, как только я вожу число. Спасибо!
Перед return 0;
Допиши
И тогда прога будет ждать нажатие любой клавиши, после нажатия любой (кроме кнопок на системнике :) ) вызовиться return и прога закроется.
но задержка не срабатывала.
z0rch, еще раз спасибо, теперь буду знать, что нужно подключать данную библиотеку! С библиотекой <conio.h> все работает отлично! :p