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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2016, 05:38   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию Одномерный массив ( Си )

При вводе n = 0 или n < 0 , работает неправильно, почему она получает значение функции read_arr() = OK= 0 ? Ведь там условия стоят , которые возвращают код ошибки....
Код:
#include <stdio.h>
#include <conio.h>
#define OK 0
#define EMPTY_MASS -2
#define ERROR -1

int read_arr(int* mas, int* n);
void change_arr(int* mas, int n);

int read_arr(int* mas, int* n)
{
    int i;
    printf("\n Input n =");
    scanf("%d", n);
    if (n == 0)
        return EMPTY_MASS;
    if (n < 0)
        return ERROR;
    printf("\n Input elements of array: \n");
    for(i = 0; i < *n; i++)
    {
        printf("\n mas[%d] = ", i);
        scanf("%d", &mas[i]);
    }
    return OK;
}
void change_arr(int* mas, int n)
{
    int i, max, num_max;
    max = mas[0];
    for(i = 1; i < n; i++)
    {
        if (mas[i] > max)
        {
            max = mas[i];
            num_max = i;
        }
    }
    i = mas[0];
    mas[0] = mas[num_max];
    mas[num_max] = i;
    for(i = 0; i < n; i++)
    {
        printf("\n mas[%d] = %d", i, mas[i]);
    }
}
int main()
{
    int mas[]= {};
    int n;

    switch (read_arr(mas, &n))
    {
        case EMPTY_MASS:
            printf("\n This array empty! \n");
            break;
        case ERROR:
            printf("\n n can't < 0! \n");
            break;
        case OK:
            printf("\n Changed array: \n");
            change_arr(mas, n);
    }
}
zaira001002 вне форума Ответить с цитированием
Старый 10.11.2016, 05:54   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Так что, в месте:
Код:
for (i = 0; i < *n; i++)
будешь использовать "*n", а здесь так:
Код:
if (n == 0)
Ты определись уже.
ura_111 вне форума Ответить с цитированием
Старый 10.11.2016, 06:03   #3
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию

ну не заметила... что ж так "определись уже".... спасибо
zaira001002 вне форума Ответить с цитированием
Старый 10.11.2016, 10:28   #4
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Я не знаю что должна была делать функция change_arr(); поэтому я ее просто заменил на функцию сортировки масива.

Обратите внимание что я сначала узнал количество елементов, и только потом создал массив на "n" елементов.

Код:
#include <stdio.h>
//#include <conio.h>

// --------------------------------------------------------
#define OK 0
#define EMPTY_MASS -2
#define ERROR -1

// --------------------------------------------------------
int read_arr(int* mas, int n);
void change_arr(int* mas, int n);

// --------------------------------------------------------
int read_arr(int* mas, int n) {

    int i;
    if (n == 0)
        return EMPTY_MASS;
    if (n < 0)
        return ERROR;

    printf("\n Input elements of array: \n");
    for (i = 0; i < n; i++) {
        printf(" mas[%d] = ", i);
        scanf("%d", &mas[i]);
    }

    printf("\n\n");

    return OK;

}

// --------------------------------------------------------
void change_arr(int* mas, int n) {

    int is_sorting = 1, i = 0;
    int tmp;
    while ( is_sorting ) {

        is_sorting = i = 0;

        for (; i < n; i++) {

            if ( i < n-1 ) {

                if ( mas[i] > mas[i+1] ) {
                    tmp = mas[ i ];
                    mas[ i ] = mas[i+1];
                    mas[i+1] = tmp;
                    is_sorting = 1;

                }
            }
        }
    }

    printf(" sorting array: \n" );

    for (i=0; i < n; i++) {
        printf(" mas[%d] == %d\n", i, mas[i] );
    }

}

// --------------------------------------------------------
int main() {

    int n = 0;

    printf("\n Input n = ");
    scanf("%d", &n);

    int mas[ n ];


    switch (read_arr(mas, n)) {
        case EMPTY_MASS:
            printf("\n This array empty! \n");
            break;
        case ERROR:
            printf("\n n can't < 0! \n");
            break;
        case OK:
            printf("\n Changed array: \n");
            change_arr(mas, n);
    }

    return OK;
}

// --------------------------------------------------------
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 10.11.2016 в 10:37.
pompiduskus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Найти одномерный массив элементы которого равны минимальным значениям в строках исходной матрицы и одномерный массив элементы... Richik123 Microsoft Office Excel 1 16.10.2013 15:45
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54