Struktury C++, poprawność działania

0

Witam, napisałem program wraz z kolegą i nie wiemy w jakim momencie zrobiliśmy błąd. Mógłby ktoś zerknąć na poprawność zapisu kodu? byłbym bardzo wdzięczny. Oto treść:

Zdefiniować dwie zmienne strukturalne A i B typu struct Twsp { int x, y; }. Opracować funkcje: a) inicjującą zmienną typu Twsp losowymi danymi w taki sposób, że x należy do przedziału [1,80], natomiast y należy do przedziału [1,25]; b) wyprowadzającą na ekran znak ’X’ w punkcie o współrzędnych określonych przez parametr typu Twsp; c) zwracającą 1, jeśli zmienne A i B typu Twsp są identyczne, oraz 0, jeśli są różne.

kod programu:

#include<stdlib.h>
#include<iostream>
#include<ctime>
using namespace std;
struct twsp 
{
        int x;
        int y;
};
twsp twsp_czytaj(){
    twsp a;
    a.x =rand() % 80 + 1;
    a.y =rand() % 25 + 1;
    return a;
}
void twsp_print(twsp a){
    char tab[80][25];
    for (int i = 0; i < 80; i++){
        for ( int j = 0; j < 25; j++){
            tab[i][j] = '0';
        }
    }
    tab[a.x][a.y] = '1';
    printf("\n");
    for (int i = 0; i < 80; i++){
        for ( int j = 0; j < 25; j++){
            printf("%c",tab[i][j]);
        }
        printf("\n");
    }
}
int cmp_wsp(twsp a, twsp b)
{
    if ((a.x == b.x) && (b.y == a.y)){
        return 1;
    } else {
        return 0;
    }
}
void losuj_wsp(twsp wsp_tab[],int N, int n, int m){
    for (int i = 0; i < N; i++){
        wsp_tab[i].x = rand() % n + 1;
        wsp_tab[i].y = rand() % m + 1;
    }
}
int main()
{
    const int N = 2;
    srand(time(NULL));
    twsp wsp1;
    wsp1 = twsp_czytaj();
    printf("X: %d Y: %d", wsp1.x, wsp1.y);
    twsp_print(wsp1);
    return 0;
}
1

A w czym jest problem? Po dodaniu #include <stdio.h> program poprawnie się skompilował i wydrukował:

X: 55 Y: 9
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000001000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000
0000000000000000000000000

Po przeliczeniu linijek i kolumn wygląda na to, że wszystko jest ok.

1

drukujesz na odwrót x i y.
80 to standardowa szerokość konsoli na PC (x), a 25 standardowa ilość wierszy (y).
Zadanie nic nie mówi o drukowaniu zer i jedynek, a jedynie o drukowaniu X we wskazanym miejscu ekranu (macierz jest ci niepotrzebna).

0

Zwracać ma 1 jeśli A i B typu Twsp są takie same lub 0 jeżeli są różne. Jest tak że zwraca całą tabelę, a powinno tylko 1 lub 0. Tak przecież wynika z treści

0

Popatrz na treść zadania, gdzie dodałem tylko formatowanie tekstu:

mic5loo napisał(a):
  1. Zdefiniować dwie zmienne strukturalne A i B typu struct Twsp { int x, y; }.
  2. Opracować funkcje:
  3. inicjującą zmienną typu Twsp losowymi danymi w taki sposób, że x należy do przedziału [1,80], natomiast y należy do przedziału [1,25];
  4. wyprowadzającą na ekran znak ’X’ w punkcie o współrzędnych określonych przez parametr typu Twsp;
  5. zwracającą 1, jeśli zmienne A i B typu Twsp są identyczne, oraz 0, jeśli są różne.

Teraz widać, że punkty 2.2 i 2.3są niezależne.
2.1 zrobiłeś prawie dobrze (tworzysz nową zmienną a nie modyfikujesz istniejąca)
2.2 pokręciłeś i przekombinowałeś tak jak już opisałem wcześniej
2.3 zrobiłeś ok (powinny być wskaźniki, ale ogólnie może być).

0

Taki mały dopisek - kompilujesz to jako C++, więc po co Ci #include <stdlib.h>? Jeśli dla funkcji printf to powinno być <cstdio>.

Poza tym, nie używasz swojej stałej N, o czym wspomina kompilator:

$ g++ -Wall -Wextra -std=c++14 forprog.cpp
forprog.cpp: In function 'int main()':
forprog.cpp:48:15: warning: unused variable 'N' [-Wunused-variable]
     const int N = 2;
               ^ 

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