Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Problem z else w pętli for

Ostatnio zmodyfikowano 2015-03-24 15:44
Autor Wiadomość
Pietia
Temat założony przez niniejszego użytkownika
[C] Problem z else w pętli for
» 2015-03-23 23:10:22
Funkcja "pokaz" ma wypisac wszystkie sumy dwoch liczb podniesionych do danej potegi dajace liczbe n. Dziala, ale jesli takich liczb nie ma, to nie wyswietla sie nic, a chcialbym, by pokazal sie komunikat "nie ma takich liczb". Jesli daje to w else (patrz - kod i komentarze), nie daje to zamierzonego efektu, nie rozumiem dlaczego.

C/C++
# include <stdio.h>
# include <math.h>

void pokaz( int n, int m );

int main()
{
    int n, m;
    printf( "Podaj dwie liczby calkowite. Liczba n to liczba do rozkladu na sume dodatnich liczb calkowitych podniesionych do potegi m. Podaj n:\n" );
    scanf( "%d", & n );
    printf( "Podaj m (potega):\n" );
    scanf( "%d", & m );
    pokaz( n, m );
    return 0;
}

void pokaz( int n, int m ) /*Funkcja ma wypisac wszystkie sumy dwoch liczb podniesionych do danej potegi dajace liczbe n*/
{
    int x, y;
   
    for( x = 1; x <= n; x++ ) /*tutaj badamy wszystkie mozliwe xy po kolei*/
    for( y = 1; y <= n; y++ ) /*tu yki*/
    {
        if((( pow( x, m ) ) +( pow( y, m ) ) ) == n ) /*jesli spelniaja nasz warunek wypisujemy na ekran*/
             printf( "Oto liczby x: %d oraz y %d\n", x, y );
        /*tu chcialem dac else printf ("Nie ma takich liczb\n"); ale wtedy robi sie petla nieskonczona i wypisuje w kosmos ten komunikat, nawet jesli takie liczby istnieja*/
    }
}

Probowalem tez zrobic
else if((( pow( x, m ) ) +( pow( y, m ) ) ) != n )
 ale efekt jest taki sam. Swoja droga chyba za duzo nawiasow w tym warunku jest, tak mi sie wydaje:-)
P-129015
Glazus
» 2015-03-24 13:31:58
Dzieje się tak, bo
else
 wykonuje się za każdym razem kiedy sprawdzany warunek nie jest prawdziwy.

Musisz to wykombinować jakoś inaczej (np. dodać zmienną
bool exist = false;
, której wartość zmienisz na
true
 po wykryciu pierwszej pary spełniającej warunek).
P-129030
Pietia
Temat założony przez niniejszego użytkownika
» 2015-03-24 15:44:58
Teraz działa, dziękuje bardzo za pomoc!:-)

C/C++
# include <stdio.h>
# include <math.h>

void pokaz( int n, int m );

int main()
{
    int n, m;
    printf( "Podaj dwie liczby calkowite. Liczba n to liczba do rozkladu na sume dodatnich liczb calkowitych podniesionych do potegi m. Podaj n:\n" );
    scanf( "%d", & n );
    printf( "Podaj m (potega):\n" );
    scanf( "%d", & m );
    pokaz( n, m );
    return 0;
}

void pokaz( int n, int m ) /*Funkcja ma wypisac wszystkie sumy dwoch liczb podniesionych do danej potegi dajace liczbe n*/
{
    int x, y;
    bool exist = false;
   
    for( x = 1; x <= n; x++ ) /*tutaj badamy wszystkie mozliwe xy po kolei*/
    for( y = 1; y <= n; y++ ) /*tu yki*/
    {
        if((( pow( x, m ) ) +( pow( y, m ) ) ) == n )
        /*jesli spelniaja nasz warunek wypisujemy na ekran*/
        {
            printf( "Oto liczby x: %d oraz y %d\n", x, y );
            exist = true;
        }
    }
    if( exist == false )
         printf( "Nie ma takich liczb\n" );
   
}
P-129043
« 1 »
  Strona 1 z 1