функции и процедуры

  • Автор темы CRESTEEN
  • Дата начала
C

CRESTEEN

#1
ребят помогите пожалуйста. написала программу, но преподаватель сказал что неправильно идет поиск минимального значения элемента и алгоритм перестановки. и в каждой функции массив должен передаваться в качестве параметра один раз. не пониамю как сделать. Обьясните пожалуйста))))

вот задание
Написать функцию, которая находит минимальный элемент в массиве среди положительных (если такого нет, то вернуть значение -1) и меняет его местами с последним элементом массива. Функция должна возвращать значение минимального элемента. Использование глобальных переменных внутри функции запрещено (т.е. массив должен передаваться как параметр). Написать программу, в которой при помощи генератора псевдослучайных чисел создаются два одномерных массива одинакового размера. К ним должна быть применена описанная выше функция. На экран должны быть выведены начальные массивы, их найденные минимальные элементы и измененные массивы. Создание и вывод массивов оформить в виде функций, не возвращающих значений.

вот мой код
C++:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
const int n=10; //globalnaya tipizirovannaya konstanta n - kol-vo elementov
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//funkziya vozvraschaet index min polozhitelnogo elementa
int getmin(int ar[n]){
int i,j=0;//schetchik i resultat funkzii
int ch=0;//logicheskaya peremennaya
for (i=1;i<n;i++){//prosmotr elementov so 2
if ((ar[i]>0)&&(ch==0)){ch=1;j=i;}//esli vstretili polozhitelniy element ch=1
if ((ar[i]<ar[j])&&(ch==1)&&(ar[i]>0))j=i;//ischem min iz ostavshihsya >0
}
if (ch==0){j=-1;}//vozvraschaem -1 esli net >0
return j;}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//zapolnyaem massivi psevdosluchaynimi chislami
int rma(int ar1[n],int ar2[n]){
int k;//schetchik
for (k=0;k<n;k++){//zapolnyaem oba massiva
ar1[k]=random(201)-100;
ar2[k]=random(201)-100;
}
return 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//vivodim zadanniy massiv
int oa(int arr[n]){int k;//schetchik
for (k=0;k<n;k++){
printf ("%4i",arr[k]);
}

return 0;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
int main(){
int a1[n],a2[n];//obyavlyaem 2 massiva
int l,t,p;//l-swaper, t,p - znachenie funkzii getmin dlya a1 i a2))
clrscr();//chistim ekran (modul conio)
randomize();//vkluchaem generator psevdosluchaynyh chisel(modul stdlib)
rma(a1,a2);//zapolnyaem
t=getmin(a1);//uznayem index min >0 v 1 massive
p=getmin(a2);//uznayem index min >0 vo 2 massive
//`````````````````````````````````````//
printf("\n\n");//otstup dlya krasoty
oa(a1);//vivodim 1 massiv

if (getmin(a1)!=-1){
//esli est >0 element to menyaem min iz >0 s poslednim cherez l
printf("\n%i\n",a1[getmin(a1)]);
l=a1[n-1];
a1[n-1]=a1[t];
a1[t]=l;
printf("\n\n");	} else printf("vse ne polozhitelnye");
//libo vivodim soobschenie mol nete >0
oa(a1);
//vivodim izmenenniy ili ne tronutiy massiv
printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//`````````````````````````````````````//
printf("\n\n");//otstupbl dlya kpacoTbl
oa(a2);//vyvodim 2 massiv
if (getmin(a2)!=-1){//esli est >0 to menyaem min iz >0 s poslednim cherez l
printf("\n%i\n",a2[getmin(a2)]); printf("\n\n");
l=a2[n-1];
a2[n-1]=a2[p];
a2[p]=l; }else printf("vse ne polozhitelnye");
//vivodim soovschenie mol oshibochka vyshla netu >0
oa(a2);//vivodim izmenenniy ili ne tronutiy 2 massiv
//````````````````````````````````````//

getch();//smotrim KpacoTy (modulya ne nado)
return 0; }
 
R

RiCrO

#2
О майн год... Май айз :rolleyes:

Леди, убедительная просьба привести пост в порядок и использовать теги code. В противном случае помощь в решении проблемы не получите.

Добавлено: Ещё раз посмотрел на пост.... Потом на кнопку "На предыдущую страницу "... потом опять на пост....

В конечном итоге дошло до "Закрыть вкладку". Я машинально сделал это.

Не уж то на меня пост так подействовал? Жуть...
 
I

ierofant

#3
C++:
#include <iostream>
#include <algorithm>

static const int N = 10;
typedef int Ar [N];

static std::ostream& operator<< (std::ostream &_out, const Ar &_ar) 
{
for (int i = 0; i < N; ++i) _out << _ar [i] << " ";
return _out;
}

static void myrand (int &_x) {_x = rand () % 200 - 100;}
static bool pred (int _i, int _j) {return _i > 0 && (_j < 0 || (_j > 0 && _i < _j));}
static int get_min (Ar &_ar)
{
int *min = std::min_element (_ar, _ar + N, pred);
if (min < _ar + N) _ar [N - 1] = *min;
return min < _ar + N ? *min : -1;
}

int main ()
{
srand (time (NULL));
Ar ar1, ar2;
std::for_each (ar1, ar1 + N, myrand);
std::for_each (ar2, ar2 + N, myrand);

std::cout << "Исходный массив:" << std::endl << ar1 << std::endl;
int min = get_min (ar1);
if (min != -1)
{
std::cout << "Минимальный положительный элемент: " << min << std::endl;
std::cout << "Изменённый массив:" << std::endl << ar1 << std::endl;
}
else std::cout << "Минимальный положительный элемент не найден" << std::endl;
std::cout << std::endl;

std::cout << "Исходный массив:" << std::endl << ar2 << std::endl;
min = get_min (ar2);
if (min != -1)
{
std::cout << "Минимальный положительный элемент: " << min << std::endl;
std::cout << "Изменённый массив:" << std::endl << ar2 << std::endl;
}
else std::cout << "Минимальный положительный элемент не найден" << std::endl;

return 0;
}