Kolejność wyświetlania danych

0

Cześć, mam prawie gotowy program. Na ten moment wygląda to tak, że po wprowadzeniu wartości -5 i 5 program wyświetla wartości 0 2 4 a po wprowadzeniu 5 i -5 nadal 0 2 4. Chcę aby przy wprowadzeniu -5 i 5 wyświetlał 0 2 4 natomiast jak wprowadzę 5 i -5 to wyświetlał 4 2 0. Proszę o pomoc i z góry dziękuje.

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    int i = 1;
    int liczba;
    int min = INT_MAX;
    int max = INT_MIN;
    char wybor;

    while(i < 3){
        printf("Wprowadz liczbe nr %d\n",i++);
        scanf("%d",&liczba);
        getchar();

        if(liczba < min){
            min = liczba;
        }
        if(liczba > max){
            max = liczba;
        }
    }

    for(i = min; i < max; i++){

        if(i >= 0 && i % 2 == 0){
        printf(" %d",i);
        }
    }

    do{
        printf("\nCzy chcesz zakonczyc program czy wykonac go ponownie?\n");
        printf("\nWprowadz wartosc:");
        printf("\nT - jesli chcesz wykonac ponownie");
        printf("\nN - jesli chcesz zakonczyc program\n");
        scanf("%c",&wybor);
        getchar();
    }
    while(wybor != 'T' && wybor != 'N' && wybor != 't' && wybor != 'n');

    if(wybor == 'T' || wybor == 't'){
        printf("\nProgram uruchomiony ponownie\n\n");
        main();
    }
    else{
        printf("\nProgram zakonczony\n");
    }

    return 0;
}
0

Różnie można to rozwiązać. Jeden z najprostszych sposobów, to zamiast od razu wypisywać, zapisuj do tablicy. Sprawdź czy pierwsza wartość była mniejsza od zera i jeśli nie, to odwróć tablice i wypisz.

1

Da się to zrobić nie korzystając z tablic?

Tak. Musisz zapamiętać wprowadzone liczby i potem je porównać. Także zamiast jednej int liczba; musisz mieć dwie, jedną użyjesz przy pierwszym wprowadzeniu, drugą przy drugim. Potem porównujesz te dwie liczby żeby wybrać w jaki sposób chcesz wyświetlać swoje wartości.

(edit)
Mała podpowiedź, nie potrzebujesz tego pierwszego while(i < 3) żeby wykonać zadanie.

0
several napisał(a):

Da się to zrobić nie korzystając z tablic?

Tak. Musisz zapamiętać wprowadzone liczby i potem je porównać. Także zamiast jednej int liczba; musisz mieć dwie, jedną użyjesz przy pierwszym wprowadzeniu, drugą przy drugim. Potem porównujesz te dwie liczby żeby wybrać w jaki sposób chcesz wyświetlać swoje wartości.

(edit)
Mała podpowiedź, nie potrzebujesz tego pierwszego while(i < 3) żeby wykonać zadanie.

Możliwe, że czegoś tu brakuje w porównaniu do tego co miałem przed chwilą ale było mniej więcej tak:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    int i = 1;
    int liczba1;
    int liczba2;
    int min = INT_MAX;
    int max = INT_MIN;
    char wybor;

    /*while(i < 3){
        printf("Wprowadz liczbe nr %d\n",i++);
        scanf("%d",&liczba);
        getchar();

        if(liczba < min){
            min = liczba;
        }
        if(liczba > max){
            max = liczba;
        }
    }*/

    printf("Wprowadz liczbe nr 1\n");
    scanf("%d",&liczba1);
    printf("Wprowadz liczbe nr 2\n");
    scanf("%d",&liczba2);

    if(liczba1 < min && liczba2 < min){
        min = liczba1;
        min = liczba2;
    }
    if(liczba1 > max && liczba2 > max){
        max = liczba1;
        max = liczba2;
    }

    for(i = min; i < max; i++){

        if(i >= 0 && i % 2 == 0){
        printf(" %d",i);
        }
    }

    do{
        printf("\nCzy chcesz zakonczyc program czy wykonac go ponownie?\n");
        printf("\nWprowadz wartosc:");
        printf("\nT - jesli chcesz wykonac ponownie");
        printf("\nN - jesli chcesz zakonczyc program\n");
        scanf("%c",&wybor);
        getchar();
    }
    while(wybor != 'T' && wybor != 'N' && wybor != 't' && wybor != 'n');

    if(wybor == 'T' || wybor == 't'){
        printf("\nProgram uruchomiony ponownie\n\n");
        main();
    }
    else{
        printf("\nProgram zakonczony\n");
    }

    return 0;
}
1

Nie musisz liczyć min i max, masz tam błąd i dwa razy przypisujesz do min ale wywal ten kod.
Po prostu masz przejść od liczba1 do liczba2. Musisz tylko zmienić warunek końca pętli na i != liczba2 i wiedzieć w którą stronę liczyć czyli zamiast i++ dać na przykład i += liczba2 > liczba1 ? 1 : -1 lub czytelniej liczba2 > liczba1 ? i++ : i--

0
obscurity napisał(a):

Nie musisz liczyć min i max, masz tam błąd i dwa razy przypisujesz do min ale wywal ten kod.
Po prostu masz przejść od liczba1 do liczba2. Musisz tylko zmienić warunek końca pętli na min != max i wiedzieć w którą stronę liczyć czyli zamiast i++ dać na przykład i += liczba2 > liczba1 ? 1 : -1 lub czytelniej liczba2 > liczba1 ? i++ : i--

Coś takiego wyczarowałem, działa wyświetlanie jeśli liczba1 < liczba2 a odwrotnie już nie. Wydaje mi się, że źle rozpisałem odwrotną pętle for. Sprawdzi ktoś?

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    int i = 1;
    int liczba1;
    int liczba2;
    int min = INT_MAX;
    int max = INT_MIN;
    char wybor;

    /*while(i < 3){
        printf("Wprowadz liczbe nr %d\n",i++);
        scanf("%d",&liczba);
        getchar();

        if(liczba < min){
            min = liczba;
        }
        if(liczba > max){
            max = liczba;
        }
    }*/

    printf("Wprowadz liczbe nr 1\n");
    scanf("%d",&liczba1);
    getchar();
    printf("Wprowadz liczbe nr 2\n");
    scanf("%d",&liczba2);
    getchar();

    if(liczba1 < liczba2){
        min = liczba1;
    }
    else{
        min = liczba2;
    }
    if(liczba1 > liczba2){
        max = liczba1;
    }
    else{
        max = liczba2;
    }

    if(liczba1 < liczba2){
    for(i = min; i < max; i++){

        if(i >= 0 && i % 2 == 0){
        printf(" %d",i);
            }
        }
    }
    else{
    for(i = max; i > min; i--){

        if(i <= 0 && i % 2 == 0){
            }
        }
    }

    do{
        printf("\nCzy chcesz zakonczyc program czy wykonac go ponownie?\n");
        printf("\nWprowadz wartosc:");
        printf("\nT - jesli chcesz wykonac ponownie");
        printf("\nN - jesli chcesz zakonczyc program\n");
        scanf("%c",&wybor);
        getchar();
    }
    while(wybor != 'T' && wybor != 'N' && wybor != 't' && wybor != 'n');

    if(wybor == 'T' || wybor == 't'){
        printf("\nProgram uruchomiony ponownie\n\n");
        main();
    }
    else{
        printf("\nProgram zakonczony\n");
    }

    return 0;
}
0

wywal te min i max i zastąp je liczba1 i liczba2

0
obscurity napisał(a):

wywal te min i max i zastąp je liczba1 i liczba2

Zastąpione, nadal wygląda to tak samo, liczba1 < liczba2 działa, odwrotnie już nie

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    int i = 1;
    int liczba1;
    int liczba2;
    int min = INT_MAX;
    int max = INT_MIN;
    char wybor;

    /*while(i < 3){
        printf("Wprowadz liczbe nr %d\n",i++);
        scanf("%d",&liczba);
        getchar();

        if(liczba < min){
            min = liczba;
        }
        if(liczba > max){
            max = liczba;
        }
    }*/

    printf("Wprowadz liczbe nr 1\n");
    scanf("%d",&liczba1);
    getchar();
    printf("Wprowadz liczbe nr 2\n");
    scanf("%d",&liczba2);
    getchar();

    /*if(liczba1 < liczba2){
        min = liczba1;
    }
    else{
        min = liczba2;
    }
    if(liczba1 > liczba2){
        max = liczba1;
    }
    else{
        max = liczba2;
    }*/

    //if(liczba1 < liczba2){
    for(i = liczba1; i < liczba2; i++){

        if(i >= 0 && i % 2 == 0){
        printf(" %d",i);
            }
        }
//    }
//    else{
    for(i = liczba2; i > liczba1; i--){

        if(i <= 0 && i % 2 == 0){
            }
        }
   // }

    do{
        printf("\nCzy chcesz zakonczyc program czy wykonac go ponownie?\n");
        printf("\nWprowadz wartosc:");
        printf("\nT - jesli chcesz wykonac ponownie");
        printf("\nN - jesli chcesz zakonczyc program\n");
        scanf("%c",&wybor);
        getchar();
    }
    while(wybor != 'T' && wybor != 'N' && wybor != 't' && wybor != 'n');

    if(wybor == 'T' || wybor == 't'){
        printf("\nProgram uruchomiony ponownie\n\n");
        main();
    }
    else{
        printf("\nProgram zakonczony\n");
    }

    return 0;
}
0

a czemu zakomentowałeś to //if(liczba1 < liczba2){? Zastanów się nad tym co piszesz, spróbuj w głowie "wykonać" kod który piszesz i sprawdź czy ma sens.
Wprowadzając losowe zmiany być może uda się w końcu osiągnąć cel wzorem ewolucji ale może to zająć miliony lat.

0
obscurity napisał(a):

a czemu zakomentowałeś to //if(liczba1 < liczba2){? Zastanów się nad tym co piszesz, spróbuj w głowie "wykonać" kod który piszesz i sprawdź czy ma sens.
Wprowadzając losowe zmiany być może uda się w końcu osiągnąć cel wzorem ewolucji ale może to zająć miliony lat.

Odkomentowałem i nic się nie zmieniło, po prostu już miesza mi się wszystko bo od kilku godzin siedze nad kodami i innymi zadaniami. Teraz wygląda to tak i nadal jeśli liczba1 < liczba2 to działa a inaczej nie

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    int i = 1;
    int liczba1;
    int liczba2;
    int min = INT_MAX;
    int max = INT_MIN;
    char wybor;

    /*while(i < 3){
        printf("Wprowadz liczbe nr %d\n",i++);
        scanf("%d",&liczba);
        getchar();

        if(liczba < min){
            min = liczba;
        }
        if(liczba > max){
            max = liczba;
        }
    }*/

    printf("Wprowadz liczbe nr 1\n");
    scanf("%d",&liczba1);
    getchar();
    printf("Wprowadz liczbe nr 2\n");
    scanf("%d",&liczba2);
    getchar();

    /*if(liczba1 < liczba2){
        min = liczba1;
    }
    else{
        min = liczba2;
    }
    if(liczba1 > liczba2){
        max = liczba1;
    }
    else{
        max = liczba2;
    }*/

    if(liczba1 < liczba2){
    for(i = liczba1; i < liczba2; i++){

        if(i >= 0 && i % 2 == 0){
        printf(" %d",i);
            }
        }
        }
        else{
    for(i = liczba2; i > liczba1; i--){

        if(i <= 0 && i % 2 == 0){
            }
        }
    }

    do{
        printf("\nCzy chcesz zakonczyc program czy wykonac go ponownie?\n");
        printf("\nWprowadz wartosc:");
        printf("\nT - jesli chcesz wykonac ponownie");
        printf("\nN - jesli chcesz zakonczyc program\n");
        scanf("%c",&wybor);
        getchar();
    }
    while(wybor != 'T' && wybor != 'N' && wybor != 't' && wybor != 'n');

    if(wybor == 'T' || wybor == 't'){
        printf("\nProgram uruchomiony ponownie\n\n");
        main();
    }
    else{
        printf("\nProgram zakonczony\n");
    }

    return 0;
}

0
Kefor napisał(a):
obscurity napisał(a):

a czemu zakomentowałeś to //if(liczba1 < liczba2){? Zastanów się nad tym co piszesz, spróbuj w głowie "wykonać" kod który piszesz i sprawdź czy ma sens.
Wprowadzając losowe zmiany być może uda się w końcu osiągnąć cel wzorem ewolucji ale może to zająć miliony lat.

Odkomentowałem i nic się nie zmieniło, po prostu już miesza mi się wszystko bo od kilku godzin siedze nad kodami i innymi zadaniami. Teraz wygląda to tak i nadal jeśli liczba1 < liczba2 to działa a inaczej nie

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
    int i = 1;
    int liczba1;
    int liczba2;
    int min = INT_MAX;
    int max = INT_MIN;
    char wybor;

    /*while(i < 3){
        printf("Wprowadz liczbe nr %d\n",i++);
        scanf("%d",&liczba);
        getchar();

        if(liczba < min){
            min = liczba;
        }
        if(liczba > max){
            max = liczba;
        }
    }*/

    printf("Wprowadz liczbe nr 1\n");
    scanf("%d",&liczba1);
    getchar();
    printf("Wprowadz liczbe nr 2\n");
    scanf("%d",&liczba2);
    getchar();

    /*if(liczba1 < liczba2){
        min = liczba1;
    }
    else{
        min = liczba2;
    }
    if(liczba1 > liczba2){
        max = liczba1;
    }
    else{
        max = liczba2;
    }*/

    if(liczba1 < liczba2){
    for(i = liczba1; i < liczba2; i++){

        if(i >= 0 && i % 2 == 0){
        printf(" %d",i);
            }
        }
        }
        else{
    for(i = liczba2; i > liczba1; i--){

        if(i <= 0 && i % 2 == 0){
            }
        }
    }

    do{
        printf("\nCzy chcesz zakonczyc program czy wykonac go ponownie?\n");
        printf("\nWprowadz wartosc:");
        printf("\nT - jesli chcesz wykonac ponownie");
        printf("\nN - jesli chcesz zakonczyc program\n");
        scanf("%c",&wybor);
        getchar();
    }
    while(wybor != 'T' && wybor != 'N' && wybor != 't' && wybor != 'n');

    if(wybor == 'T' || wybor == 't'){
        printf("\nProgram uruchomiony ponownie\n\n");
        main();
    }
    else{
        printf("\nProgram zakonczony\n");
    }

    return 0;
}

Już dodałem printf(" %d",i); w funkcji if(), o którym zapomniałem i nadal nie chce działać :/

1
 if(i <= 0 && i % 2 == 0){

a czemu zmieniłeś warunek tutaj. Wiesz co ta linijka kodu robi? Ogólnie jakbyś wcielał w życie tylko wskazówki które dostajesz i nie dodawał nic od siebie to by to już działało

0
obscurity napisał(a):
 if(i <= 0 && i % 2 == 0){

a czemu zmieniłeś warunek tutaj. Wiesz co ta linijka kodu robi?

Tak wiem, zmęczenie zmieniło. Poprawiłem to już przed chwilą i nadal nic

0
Kefor napisał(a):
obscurity napisał(a):
 if(i <= 0 && i % 2 == 0){

a czemu zmieniłeś warunek tutaj. Wiesz co ta linijka kodu robi?

Tak wiem, zmęczenie zmieniło. Poprawiłem to już przed chwilą i nadal nic

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main()
{
int i;
int liczba1;
int liczba2;
int min = INT_MAX;
int max = INT_MIN;
char wybor;

/*while(i < 3){
    printf("Wprowadz liczbe nr %d\n",i++);
    scanf("%d",&liczba);
    getchar();

    if(liczba < min){
        min = liczba;
    }
    if(liczba > max){
        max = liczba;
    }
}*/

printf("Wprowadz liczbe nr 1\n");
scanf("%d",&liczba1);
getchar();
printf("Wprowadz liczbe nr 2\n");
scanf("%d",&liczba2);
getchar();

/*if(liczba1 < liczba2){
    min = liczba1;
}
else{
    min = liczba2;
}
if(liczba1 > liczba2){
    max = liczba1;
}
else{
    max = liczba2;
}*/

if(liczba1 < liczba2){
for(i = liczba1; i < liczba2; i++){

    if(i >= 0 && i % 2 == 0){
    printf(" %d",i);
        }
    }
}
    if(liczba2 < liczba1){
for(i = liczba2; i > liczba1; i++){

    if(i >= 0 && i % 2 == 0){
    printf(" %d",i);
        }
    }
}

do{
    printf("\nCzy chcesz zakonczyc program czy wykonac go ponownie?\n");
    printf("\nWprowadz wartosc:");
    printf("\nT - jesli chcesz wykonac ponownie");
    printf("\nN - jesli chcesz zakonczyc program\n");
    scanf("%c",&wybor);
    getchar();
}
while(wybor != 'T' && wybor != 'N' && wybor != 't' && wybor != 'n');

if(wybor == 'T' || wybor == 't'){
    printf("\nProgram uruchomiony ponownie\n\n");
    main();
}
else{
    printf("\nProgram zakonczony\n");
}

return 0;

}

0
for(i = liczba2; i > liczba1; i++){

tej linijki nie musiałeś zmieniać

0
obscurity napisał(a):
for(i = liczba2; i > liczba1; i++){

tej linijki nie musiałeś zmieniać

Tak jak się zastanowie to powinna być zmieniona ale nawet powrót do tej poprzedniej daje ten sam rezultat - nie działa :/

0
obscurity napisał(a):
for(i = liczba2; i > liczba1; i++){

tej linijki nie musiałeś zmieniać

Masz racje jednak co do tej linijki, jednak nadal coś nie chce działać

1

W takim razie naucz się debugować kod i analizować go linijka po linijce podczas działania. Może najpierw się prześpij

0

Wypadałoby podać zadanie.

0
Kefor napisał(a):

Cześć, mam prawie gotowy program.

Mam do ciebie gram szacunku. Nie kłamiesz, że go napisałeś.

Kefor napisał(a):

Chcę aby przy wprowadzeniu -5 i 5 wyświetlał 0 2 4 natomiast jak wprowadzę 5 i -5 to wyświetlał 4 2 0. Proszę o pomoc i z góry dziękuje.

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>


int main()
{
    int liczba1, liczba2 ;
    printf("Wprowadz liczbe nr 1\n");
    scanf("%d",&liczba1);
    getchar();
    printf("Wprowadz liczbe nr 2\n");
    scanf("%d",&liczba2);
    getchar();

   if(liczba1==5 && liczba2== -5)
     printf(" 4 2 0");
   else if(liczba1== -5 && liczba2== 5)   
      printf(" 0 2 4");
    return 0;
}

Niezamaco

ksh napisał(a):

Wypadałoby podać zadanie.

Zadania to dla mięczaków

Napisać rozwiązanie bez zadania, ot, sztuka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1