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

Тема в разделе "C/C++/C#", создана пользователем CRESTEEN, 23 апр 2011.

  1. CRESTEEN

    CRESTEEN Гость

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

    вот задание
    Написать функцию, которая находит минимальный элемент в массиве среди положительных (если такого нет, то вернуть значение -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; }
     
  2. RiCrO

    RiCrO Гость

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

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

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

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

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

    ierofant Гость

    Код (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;
    }
     
Загрузка...

Поделиться этой страницей