Szachownica w języku C

0

Mam za zadanie zrobić za pomocą pętli oraz instrukcji if "szachownicę" z dowolną ilością wierszy oraz kolumn. Napisałem taki program lecz działa on tylko dla parzystej liczby wierszy. W przypadku np 3 kolumn program i tak dopisuje 4 kolumnę. Rozumiem dlaczego tak się dzieje jednak nie mam pomysłu w jaki sposób ominąć ten problem.

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

int main()
{
    int a,b,i,x;
    printf("Podaj liczbe wierszy: ");
    scanf("%d",&a);
    printf("Podaj liczbe kolumn: ");
    scanf("%d",&b);

for(x=0;x<b;x++)
{
    if(x%2)
    {
        for(i=0;i<a;i++)
        {
            printf("#");
            printf(" ");
            i++;
        }
        printf("\n");
    }
    else{
        for(i=0;i<a;i++)
        {
            printf(" ");
            printf("#");
            i++;
        }
        printf("\n");
    }
}
    return 0;
}

Szachownica ma wyglądać w ten sposób:

# #

.# # #

# #

.# # #
itd.

kropka w 2 i 4 linii jest jako spacja

0

Działa dla parzystej liczby, tzn? Podane cztery wiersze i cztery kolumny:

> clang-7 -pthread -lm -o main main.c
> ./main
Podaj liczbe wierszy: 4
Podaj liczbe kolumn: 4
 # #
# # 
 # #
# # 
0

Masz pętlę for zwiększającą i o 1, a do tego robisz jeszcze i++ w tej pęli. Możesz usunąć i++ w pętli i dodać warunek, że dla parzystych i rysuje kratkę a dla nieparzystych spację, albo na odwrót - tym samym sposobem, którym rysujesz co drugi wiersz inaczej.

2

Nieco trickowe rozwiązanie:

#include <stdio.h>

int main()
{
    int a,b,x,y;
    printf("Podaj liczbe wierszy: ");
    scanf("%d",&a);
    printf("Podaj liczbe kolumn: ");
    scanf("%d",&b);
    for (x = 0; x < a; ++x) {
        for (y = 0; y < b; ++y) {
            putchar("# "[(x+y)%2]);
        }
        printf("\n");
    }
    return 0;
}
0
enedil napisał(a):

Nieco trickowe rozwiązanie:

#include <stdio.h>

int main()
{
    int a,b,x,y;
    printf("Podaj liczbe wierszy: ");
    scanf("%d",&a);
    printf("Podaj liczbe kolumn: ");
    scanf("%d",&b);
    for (x = 0; x < a; ++x) {
        for (y = 0; y < b; ++y) {
            putchar("# "[(x+y)%2]);
        }
        printf("\n");
    }
    return 0;
}

Właśnie chodzi o to żeby zrobić to w normalny sposób bez takich "tricków" ,ponieważ jest to na zaliczenie

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