• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Język C - zadanie z tablicami

Object Storage Arubacloud
0 głosów
429 wizyt
pytanie zadane 31 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

Witam, czemu w poniższym zadaniu program wypisuje kolejno liczby: 0,2,1,1,2,2? Niestety w którymś miejscu popełniam błąd i z moich obliczeń wychodzi, że program wypisze tylko 9, a następnie wyjdzie z pętli, gdyż J nie będzie mniejsze od 4, co jest warunkiem pętli for.

Prosiłbym o opisanie krok po kroku, co dzieje się w programie (jeżeli to możliwe) tak abym mógł porównać to ze swoim tokiem obliczeń. Z góry bardzo dziękuję :)

int main ( void ){
int tab [3][4]= {{3 , 8 , 9 , 0} ,{3 , 7 , 9 , 1} ,{0 , 1 , 6 , 2}};
int i = 0 , j ;
while ( i < 3) {
  for ( j = i ; j < 4; j += 2)
    if ( tab [ i ][ j ] > 4)
      printf ( " % d % d \ n " , i , j ); ++ i ;
}
return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 31 sierpnia 2022 przez Whiskey_Taster Pasjonat (15,610 p.)

że program wypisze tylko 9

W jaki sposób? Jasno jest instrukcja  

printf ( " % d % d \ n " , i , j ); ++ i ;

czyli wypisz pary indeksów, a nie wartość tablicy pod daną parą. 

Dla i = 0, j przyjmie wartości ze zbioru {0, 2}, stąd mamy pary [0][0], [0, 2] i tylko tab[0, 2] spełni warunek zadany w instrukcji warunkowej. Analogicznie z całą resztą. 

komentarz 31 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Tutaj przez pomyłkę wpisałem to 9, natomiast mam pytanko - czy wyrażenie ++i po if'ie zachodzi tylko wtedy gdy spełniony jest if? Nie ma klamr i nie wiem, czy if'a tyczy się tylko pierwsza instrukcja pod nim. Następne pytanie - dobrze myślę, że po każdym obiegu pętli for do j dodajemy 2?
1
komentarz 31 sierpnia 2022 przez Whiskey_Taster Pasjonat (15,610 p.)

Dlatego formatowanie to ważna sprawa. Ogółem reguła jest taka, że jeśli po pętli lub instrukcji warunkowej nie ma klamr, to znaczy, że pierwsza napotkana instrukcja wędruje "pod pętlę lub warunek". Czyli tutaj, jeśli mielibyśmy wstawić klamry, to otrzymamy
 

#include <stdio.h>
int main(void) {
    int tab[3][4] = { {3 , 8 , 9 , 0} ,{3 , 7 , 9 , 1} ,{0 , 1 , 6 , 2} };
    int i = 0, j;
    while (i < 3) {
        for (j = i; j < 4; j += 2) {
            if (tab[i][j] > 4) {
                printf(" % d % d\ n ", i, j);
            }
        }
        ++i;
    }
    return 0;
}

Następne pytanie - dobrze myślę, że po każdym obiegu pętli for do j dodajemy 2?

No tak, generalnie to nie jest wymóg, by zawsze zwiększać wartość zmiennej o 1. Można zarówno dodawać ile się chce, jak i odejmować. W drodze rozsądku, oczywiście.  

komentarz 31 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Dziekuję :)

Podobne pytania

0 głosów
1 odpowiedź 405 wizyt
pytanie zadane 15 października 2018 w C i C++ przez Mr.Kebab Użytkownik (700 p.)
0 głosów
1 odpowiedź 211 wizyt
pytanie zadane 13 czerwca 2018 w C i C++ przez Jajestem Użytkownik (670 p.)
0 głosów
1 odpowiedź 519 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...