1

Тема: Одномірні масиви на мові С(поміняти місцями два числа)

Доброго дня, вчу С недавно, не знаю в чому помилка, буду дуже вдячний якщо хтось допоможе з розв'язком(лабораторка на рівні універу, чим простіше тим краще).

Заданий масив із n чисел. Визначити мінімальний додатний та останній нульовий
елементи масиву і поміняти їх місцями. Якщо мінімальних додатних елементів декілька
– дію провести над першим із них. При відсутності в масиві додатних або нульових
елементів вивести повідомлення про невизначеність умов завдання



#include <stdio.h>
int n;
int i,min,zeronum, n_zeronum,n_min,tmp;
int main()
{
    double a[n];
    printf("Vvedit' rozmir masyvy");
    scanf("%d",&n);
    printf("Vvedit' masyv");

    for(i=0; i<n; i++)
        scanf("%lf",&a[i]);

    for(i=n-1; i>=0; i--){

        if(a[i]==0)
            n_zeronum=i;
            else if( a[i]!=0)
                printf("No zero number");
    }
    int n_min= -1;
    for(i=0; i<n; i++){
        if (n_min<0  && a[i]>0)
            n_min = i;
    }

    tmp = a[zeronum];
    a[zeronum]= a[min];
    a[min] = tmp;


    for(i=0; i<n; i++)
        printf("%lf",a[i]);
    return 0;
}

2

Re: Одномірні масиви на мові С(поміняти місцями два числа)

Є умова, є код. Запитання яке?
Код не компілюється?

3

Re: Одномірні масиви на мові С(поміняти місцями два числа)

Раджу для початку ось це:

printf("Vvedit' rozmir masyvy");

до ладу привести...

4

Re: Одномірні масиви на мові С(поміняти місцями два числа)

Код компілюється, але нічого не виводить, запитання в тому, що потрібно доробити, щоб виконувалася програма згідно умови задачі (можливо я щось не дописав)

Droid 77 написав:

Є умова, є код. Запитання яке?
Код не компілюється?

5

Re: Одномірні масиви на мові С(поміняти місцями два числа)

Savage написав:

Код компілюється, але нічого не виводить, запитання в тому, що потрібно доробити, щоб виконувалася програма згідно умови задачі (можливо я щось не дописав)

Droid 77 написав:

Є умова, є код. Запитання яке?
Код не компілюється?

Уважніше дивіться, які змінні ви використовуєте. Нащо вам min і zeronum, якщо ви всюди використовуєте n_zeronum і n_min?

6

Re: Одномірні масиви на мові С(поміняти місцями два числа)

Упс, це затишилося від попередньої спроби, я ніяк не можу зрозуміти чому нічого не виводиться на екран

wander написав:
Savage написав:

Код компілюється, але нічого не виводить, запитання в тому, що потрібно доробити, щоб виконувалася програма згідно умови задачі (можливо я щось не дописав)

Droid 77 написав:

Є умова, є код. Запитання яке?
Код не компілюється?

Уважніше дивіться, які змінні ви використовуєте. Нащо вам min і zeronum, якщо ви всюди використовуєте n_zeronum і n_min?

7

Re: Одномірні масиви на мові С(поміняти місцями два числа)

Слава Україні!

UPD: В цій задачі ще потрібна перевірка на присутність в масиві нульових та додатних елементів, ніби її зробив, але чомусь не міняє елементи масива, а саме коли декілька нульових елементів(потрібно міняти з останнім), можливо хтось побачить помилку, буду дуже вдячний.

#include <stdio.h>
#include <stdlib.h>
int i,min,tmp;
int main()
{
    int n;
    scanf("%d", &n);
    double a[n];

    for(i=0; i<n; i++)
    {
        scanf("%lf",&a[i]);
    }

    int min;
    for(min=1; min<n; min++)
    {
        if(a[min]>0)break;
    }
    if(min>=n)           //Перевірка на додатні елементи
    {
        printf("no positive number!");
        return -1;
    }

    int zeronum;


    for(zeronum = 0; zeronum < n; zeronum++)
    {
        if(a[zeronum]==0)
            break;
    }
    if(zeronum>=n)        //Перевірка на нульові елементи
    {
        printf("no zero number!");
        return -2;
    }


    for(min=1; min<n; i++)
    {
        if(a[i]>0 && min>a[i])
            min= i;
        break;
    }

    for(i=n-1; i>=0; i--)
    {
        if(a[i]==0)
            zeronum =i;
        break;
    }

    double tmp = a[zeronum];
    a[zeronum] = a[min];
    a[min] = tmp;

    for(i=0; i<n; i++)
        printf("%1.lf ",a[i]);

    return 0;
}

8

Re: Одномірні масиви на мові С(поміняти місцями два числа)

 int min;
    for(min=1; min<n; min++)
    {
        if(a[min]>0)break;
    }

а чого тут min = 1 ?
Якщо я ввожу два елементи, перший = 1, а другий = 0, то воно каже - no positive number!, хоча одиничка є позитивною.

Подякували: Savage1

9

Re: Одномірні масиви на мові С(поміняти місцями два числа)

FakiNyan написав:
 int min;
    for(min=1; min<n; min++)
    {
        if(a[min]>0)break;
    }

а чого тут min = 1 ?
Якщо я ввожу два елементи, перший = 1, а другий = 0, то воно каже - no positive number!, хоча одиничка є позитивною.

Дякую, не помітив, але при введенні min=0 змінюється постійно перше число в масиві (не важливо чи це від'ємне чи додатнє), перевірка працює, але так само не міняє останній нульовий елемент з мінімальними додатним числом