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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2017, 19:12   #1
Зураб
 
Регистрация: 23.03.2017
Сообщений: 5
По умолчанию Функция в СИ

Здравствуйте!

МОжет, кто-то сможет подсказать. Есть у меня программа:

а) Найти среднее арифметическое положительных чисел, а также минимальное и максимальное среди отрицательных чисел.
б) Упорядочить все числа, начиная с элемента с номером j по убыванию.
в) Среди остальных чисел обнулить каждое число, которое является четным.

тут все понятно, программу я сделал и захотел разделить ее на функции, которые будут выполнять отдельные операции. Но тут что-то пошло не так.

Сделал я первую операцию в виде функции. Все гуд, все работает! Попытался сделать то-же самое со 2й операций и программа крашнулась и черт пойми, что не так. ( новичок, хотя по разделу думаю понятно )



Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
const int N=8;
int sum(int m[N]);
int maxmin(int m[N]);
int sum(int m[N]){
       float b=0;
       int num=0, i;
        puts("\n\n >>> ЗАДАНИЕ : А <<< \n");

        for(i=0;i<N;i++){
            if(m[i]>0){
                b+=m[i];    // считаем сумму положительных чисел
                num++;        // считаем кол. положительных чисел
                printf("\n #%d %d ",i+1,m[i]);
                }
            }
                b=b/num; //считаем среднее арифм.

            printf("\n\n Средне арифметическое %.2f",b);
            printf("\n Положительных чисел: %d\n", num);}

int maxmin(int m[N]){

        int i, min, max, min_pos=0, max_pos=0;

        min=m[0];
        max=-100;

            for(i=0;i<N;i++){
                if(m[i]<0){
                    if(m[i]>max){ // если эл. массива больше максимума мы приравниваем его максимуму
                        max=m[i];
                        max_pos=i+1;
                    }
                    if(m[i]<min){ // если эл. массива меньше минимума мы приравниваем его минимуму
                        min=m[i];
                        min_pos=i+1;
                    }
                }
            }

            printf("\n #%d Минимальное значение: %d",min_pos,min);
            printf("\n #%d Максимальное значение: %d",max_pos,max);
            }

int main()
{
   setlocale(LC_ALL, "RUS");

   int m[N];
   int i;


        printf("Введите массив:\n");
        for(i=0;i<N;i++)   //Заполняем массив данными
        {
        printf(" [%d] ",i+1);
        scanf("%d",&m[i]);
        }


        // задание A

        sum(m[N]);

        maxmin(m[N]);
            // задание Б

    int k, j, nMin, c;

            puts("\n\n >>> ЗАДАНИЕ : Б <<< \n");

            printf("Введите значение k: ");
            scanf("%d", &k);

                for ( i = k; i < N-1; i ++ ){
                    nMin = i; // ищем минимальный, начиная с A[i]

                for ( j = i+1; j < N; j ++ )
                    if ( m[j] < m[nMin] )
                        nMin = j;

                    if ( nMin != i ) // если минимальный не стоит на своем месте,…
                {
                        c = m[i];
                        m[i] = m[nMin]; // ставим его на место
                        m[nMin] = c;
                }
            }

            printf("\n Отсортированный массив:\n");
                for ( i = 0; i < N; i ++ )
                    printf(" %d ", m[i]);


                    // задание В

                    puts("\n\n >>> ЗАДАНИЕ : B <<< \n");

                for(i=0;i<=N;i++){
                        if(i<k){
                        if(m[i]%2!=0)  //проводим операции только с числами до j элемента
                            m[i]=0;  //приравниваем парные к 0
                        }
            }

            printf("Массив с обнуленным парными:");

            for ( i = 0 ; i < N ; i++ )
            printf("%d ", m[i]);
            printf("\n\n");
 return 0;
}

Последний раз редактировалось Зураб; 06.04.2017 в 19:23.
Зураб вне форума Ответить с цитированием
Старый 06.04.2017, 19:13   #2
Зураб
 
Регистрация: 23.03.2017
Сообщений: 5
По умолчанию

Вот исходный:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
const int N=8;

int main()
{
   setlocale(LC_ALL, "RUS");

   float b=0;
   int m[N];
   int num=0, i, min, max, min_pos=0, max_pos=0;


        printf("Введите массив:\n");
        for(i=0;i<N;i++)   //Заполняем массив данными
        {
        printf(" [%d] ",i+1);
        scanf("%d",&m[i]);
        }


        // задание A


        puts("\n\n >>> ЗАДАНИЕ : А <<< \n");

        for(i=0;i<N;i++){
            if(m[i]>0){
                b+=m[i];    // считаем сумму положительных чисел
                num++;        // считаем кол. положительных чисел
                printf("\n #%d %d ",i+1,m[i]);
                }
            }
                b=b/num; //считаем среднее арифм.

            printf("\n\n Средне арифметическое %.2f",b);
            printf("\n Положительных чисел: %d\n", num);


        min=m[0];
        max=-100;

            for(i=0;i<N;i++){
                if(m[i]<0){
                    if(m[i]>max){ // если эл. массива больше максимума мы приравниваем его максимуму
                        max=m[i];
                        max_pos=i+1;
                    }
                    if(m[i]<min){ // если эл. массива меньше минимума мы приравниваем его минимуму
                        min=m[i];
                        min_pos=i+1;
                    }
                }
            }

            printf("\n #%d Минимальное значение: %d",min_pos,min);
            printf("\n #%d Максимальное значение: %d",max_pos,max);



            // задание Б

    int k, j, nMin, c;

            puts("\n\n >>> ЗАДАНИЕ : Б <<< \n");

            printf("Введите значение k: ");
            scanf("%d", &k);

                for ( i = k; i < N-1; i ++ ){
                    nMin = i; // ищем минимальный, начиная с A[i]

                for ( j = i+1; j < N; j ++ )
                    if ( m[j] < m[nMin] )
                        nMin = j;

                    if ( nMin != i ) // если минимальный не стоит на своем месте,…
                {
                        c = m[i];
                        m[i] = m[nMin]; // ставим его на место
                        m[nMin] = c;
                }
            }

            printf("\n Отсортированный массив:\n");
                for ( i = 0; i < N; i ++ )
                    printf(" %d ", m[i]);


                    // задание В

                    puts("\n\n >>> ЗАДАНИЕ : B <<< \n");

                for(i=0;i<=N;i++){
                        if(i<k){
                        if(m[i]%2!=0)  //проводим операции только с числами до j элемента
                            m[i]=0;  //приравниваем парные к 0
                        }
            }

            printf("Массив с обнуленным парными:");

            for ( i = 0 ; i < N ; i++ )
            printf("%d ", m[i]);
            printf("\n\n");
 return 0;
}
Зураб вне форума Ответить с цитированием
Старый 07.04.2017, 07:51   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

1) Сделай так:
Код:
	// задание A
	
	sum(m);

	maxmin(m);
	// задание Б
2)

3_1.jpg
ura_111 вне форума Ответить с цитированием
Старый 08.04.2017, 00:56   #4
Зураб
 
Регистрация: 23.03.2017
Сообщений: 5
По умолчанию

Все-же разобрался, мб кому-то понадобиться.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
const int N=8;
int k;
 
void summ(int a[],int n);
void minmax(int a[],int n);
void zadb(int a[], int n);
void zadv(int a[], int n);
 
int main()
{
   setlocale(LC_ALL, "RUS");
 
    int m[N];
    int i;
 
        printf("Введите массив:\n");
        for(i=0;i<N;i++){
        printf(" [%d] ",i+1);           //Заполняем массив данными
        scanf("%d",&m[i]);
        }
        // задание A
        puts("\n\n >>> ЗАДАНИЕ : А <<< \n");
        summ(m,N);
        minmax(m,N);
 
 
        // задание Б
        puts("\n\n >>> ЗАДАНИЕ : Б <<< \n");
        zadb(m,N);
 
 
        // задание В
        puts("\n\n >>> ЗАДАНИЕ : B <<< \n");
        zadv(m,N);
 
 return 0;
}
 
 
void summ(int a[],int n){
    int i, num=0;
    float b=0;
        for(i=0;i<n;i++){
            if(a[i]>0){
                b+=a[i];    // считаем сумму положительных чисел
                num++;        // считаем кол. положительных чисел
                printf("\n #%d %d ",i+1,a[i]);
                }
        }
            b=b/num; //считаем среднее арифм.
 
            printf("\n\n Средне арифметическое %.2f",b);
            printf("\n Положительных чисел: %d\n", num);}
 
 
 
void minmax(int a[],int n){
    int i, min, max, min_pos=0, max_pos=0;
        min=a[0];
        max=-100;
 
        for(i=0;i<n;i++){
            if(a[i]<0){
                if(a[i]>max){ // если эл. массива больше максимума мы приравниваем его максимуму
                    max=a[i];
                    max_pos=i+1;
                }
                if(a[i]<min){ // если эл. массива меньше минимума мы приравниваем его минимуму
                    min=a[i];
                    min_pos=i+1;
                }
            }
        }
            printf("\n #%d Минимальное значение: %d",min_pos,min);
            printf("\n #%d Максимальное значение: %d",max_pos,max);
}
 
 
 
void zadb(int a[], int n){
     int j, nMin, c, i;
        printf("Введите значение k: ");
        scanf("%d", &k);
 
            for ( i = k; i < n-1; i ++ ){
                nMin = i; // ищем минимальный, начиная с A[i]
            for ( j = i+1; j < n; j ++ )
                if ( a[j] < a[nMin] )
                    nMin = j;
 
                if ( nMin != i ) // если минимальный не стоит на своем месте,…
                {
                    c = a[i];
                    a[i] = a[nMin]; // ставим его на место
                    a[nMin] = c;
                }
            }
 
            printf("\n Отсортированный массив:\n");
 
            for ( i = 0; i < n; i ++ )
            printf(" %d ", a[i]);
}
 
 
 
void zadv(int a[], int n){
    int i;
            for(i=0;i<=n;i++){
                if(i<k)
                    if(a[i]%2!=0)  //проводим операции только с числами до j элемента
                        a[i]=0;  //приравниваем парные к 0
 
            }
 
            printf("Массив с обнуленным парными:");
 
            for ( i = 0 ; i < n ; i++ )
            printf("%d ", a[i]);
            printf("\n\n");
}
Зураб вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция в с++ likos18 Помощь студентам 1 11.01.2012 13:51
функция shok.92 Общие вопросы C/C++ 6 04.12.2010 12:19
Функция asd48 Помощь студентам 2 21.12.2008 17:17
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50