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

[ANSI C] Szukanie błędu w rozumowaniu w zadaniu (zasięg zmiennej) i zadanie zadanie z szachownicą.

Ostatnio zmodyfikowano 2016-03-09 21:51
Autor Wiadomość
probs
Temat założony przez niniejszego użytkownika
[ANSI C] Szukanie błędu w rozumowaniu w zadaniu (zasięg zmiennej) i zadanie zadanie z szachownicą.
» 2016-03-07 11:19:08
Witam serdecznie, mój pierwszy post tutaj, ale biorąc pod uwagę ogrom podjętych tematów zapewne nie ostantnia moja wizyta tutaj. :)

Chciałem się zapytać użytkowników o dwa zadania.

Zad. 1. Dlaczego mi wyświetla 1 5 8? A nie 3, 5, 8? Gdzie popełniłem błąd w rozczytywaniu tego kodu?
C/C++
int c = 6;
void main()
{
    int a, b, c;
    a = 1;
    b = 4;
    c = 7;
    {
        int a;
        {
            a = 2;
        }
        a = 3;
        b = 5;
        c = 8;
    }
    printf( "%d %d %d\n", a, b, c );
}

Zad. 2. Napisać program rysujący szachownicę o podanej przez użytkownika wielkości, np.:
5 4

   #   #   #   #
   #   #   #   #
###################
   #   #   #   #
   #   #   #   #
###################
   #   #   #   #
   #   #   #   #
###################
   #   #   #   #
   #   #   #   #
Jak to ugryźć?

Będę wdzięczny za wskazówki. W obecnej chwili przerabiam podręcznik autorów języka C i mam status początkującego, albo ściślej rzecz ujmując amatora w programowaniu. :)
P-145658
carlosmay
» 2016-03-07 11:25:15
C/C++
{
    int a, b, c;
    a = 1;
    b = 4;
    c = 7;
    {
        int a; // nastepilo zakrycie zmiennej a
        {
            a = 2;
        }
        a = 3; // modyfikacja zmiennej zakrywajacej, zakryta nie jest modyfikowana (= 1)
        b = 5;
        c = 8;
    }
    printf( "%d %d %d\n", a, b, c ); // wypisanie wart zewnętrznej a = 1
}

Jak to ugryźć?
Zagnieżdżone pętle.
P-145659
probs
Temat założony przez niniejszego użytkownika
» 2016-03-09 21:27:25
Dzięki za pomoc z pierwszym. Dopytałbym o dodatkowy wniosek płynący z tego pytania: nie można dwa razy zdeklarować zmiennej w jednym bloku w języku C?

Po kompilacji tego kodu i jego różnych wariacji (próba zmiany inkrementacji), spacji \nów dostaję różne regularne struktury, ale wciąż nie to co jest w treści punktu 2. Czy mógłbym prosić o dodatkowe wskazówki do kodu?

C/C++
int x, y;
int main()
{
    for( x = 0; x < 8; x++ )
    {
        for( y = 0; y < 8; y++ )
        {
            printf( "   #" );
        }
        printf( "\n\n\n#" );
    }
    return 0;
}
P-145810
carlosmay
» 2016-03-09 21:51:24
nie można dwa razy zdeklarować zmiennej w jednym bloku w języku C?
W jednym bloku nie.
Natomiast w jednym pliku, różnych blokach tak (pamiętając, że zmienna zewnętrzna będzie zakryta przez definicję zmiennej wewnętrznej).
Należałoby poczytać o stosie.
C/C++
#include <cstdio>
int zmienna; // zmienna globalna ( = 0)
namespace my_space
{
    int zmienna = 1; // zmienna we wlasnej przestrzeni nazw
}

int main()
{
    int zmienna = 2; // zmienna lokalna zakrywa pozostale zmienne
    // ale mozna sie do nich odwolac operatorem zasiegu
    printf( "%i \n",::zmienna ); // :: - operator zasiegu do zmiennej globalnej
    printf( "%i \n", my_space::zmienna ); // my_space:: - operator zasiegu do zmiennej w przestrzeni nazw
    printf( "%i \n", zmienna ); // odczyt zmiennej lokalnej
}

Zad. 2. Napisać program rysujący szachownicę o podanej przez użytkownika wielkości, np.:
Łatwiej napisać kod:
C/C++
#include <cstdio>
int main()
{
    int szer_pola = 4;
    int wys_pola = 3;
    int szer;
    int wys;
    scanf( "%i %i", & szer, & wys );
   
    int i = 1;
    int j = 1;
   
    while( i <( wys * wys_pola ) ) {
        j = 1;
        if( i % wys_pola )
        while( j <( szer * szer_pola ) ) {
            if( j % szer_pola )
                 printf( "%c", ' ' );
            else
                 printf( "%c", '#' );
           
            j += 1;
        }
        else
        while( j <( szer * szer_pola ) ) {
            printf( "%c", '#' );
            j += 1;
        }
        ++i;
        printf( "\n" );
    }
}
P-145812
« 1 »
  Strona 1 z 1