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

Zadanie z programowania w C

42 Warsaw Coding Academy
0 głosów
657 wizyt
pytanie zadane 12 stycznia 2021 w C i C++ przez grzecho123 Początkujący (450 p.)

Próbowałem zrobic zadanie: 

Utwórz strukturę, która będzie odpowiadać zapisowi punktu w przestrzeni 3D, czyli będzie posiadać trzy składowe np. X,Y,Z. Napisz dwie funkcje - pierwsza typu void przyjmująca wskaźnik do struktury, która wypełni składowe losowymi liczbami z przedziału od -3 do 3. Druga typu bool, przyjmująca dwa wskaźniki na struktury, która porówna oba punkty pod kątem identyczności i zwróci odpowiednią wartość logiczną. Do odwoływania się do składowych wskaźnika struktury wykorzystaj operator wyłuskania składowej, czyli strzałkę ->.

Mój kod wygląda tak:

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

struct trzyd
{
    int x,y,z;
};

void losowe(struct trzyd *a)
{

    a->x=(rand()%7)-4;
    a->y=(rand()%7)-4;
    a->z=(rand()%7)-4;
}

bool porownanie
{
    ;
}

int main()
{
    srand(time(NULL));
    struct trzyd *s;
    losowe(&s);
    return 0;
}

Po pierwsze wiem, że zrobiłem jakiś błąd w generowaniu tych liczb losowych ale nie wiem jaki. Moje pytanie jest odnośnie funkcji bool, gdyż w treści zadania jest napisane by porównać oba punkty pod względem identyczności, ale skąd ja wezmę oba punkty? Muszę zrobić tablicę wskaźników czy na jakiej zasadzie ma to polegać?

1 odpowiedź

0 głosów
odpowiedź 12 stycznia 2021 przez SzkolnyAdmin Szeryf (89,610 p.)
Co do porównania, to wygeneruj dwa punkty w przestrzeni 3D i podeślij wskaźniki do nich po funkcji porównującej.
1
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)

Co do losowania.

const int new_number = (rand() % (maximum_number + 1 - minimum_number)) + minimum_number;

 

komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)

@SzkolnyAdmin, Czyli mam zrobic takie coś?

struct trzyd *s[2];

i tam później w funkcji w pętli sobie wypełnię te zmienne o to chodzi?

komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)

@tkz, czyli zamiast -4 tam ma być -3?

1
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)
((rand() % (3 + 1 - (- 3))) - 3)
((rand() % 7) - 3)

Tak.

1
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)

@grzecho123, Jeszcze co do funkcji.

bool porownanie(struct trzyd *a, struct trzyd *b)

Powinna wyglądać tak. Przyjmujesz dwie struktury, porównujesz i zwracasz true lub false, zależnie od przypadku. 

komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)

Tylko nie wiem czy mam te struktury robić tak?

struct trzyd *s;
struct trzyd *t;

czy tak

struct trzyd *s[2];

czy to obojętne?

1
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)
Bez znaczenia. Tylko nie wiem dlaczego tworzysz wskaźniki na struktury.
komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)

tworzę wskaźniki na struktury żeby je przesłać do funkcji 

void losowe(struct trzyd *a)

wychodzi na to że nie muszę tworzyć wskaźnika na strukturę? tylko wystarczy 

struct trzyd s;

a później

losowe(&s);

i to będzie ok?

1
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)
Zdecydowanie lepiej niż pierwotny pomysł.
komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)
Ok dziękuję teraz jest wszystko ok. Chciałbym dać Ci najlepszą odpowiedź za pomoc ale chyba się nie da. Jeszcze raz dziękuję.
komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)

@tkz,

stworzyłem kod

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

struct trzyd
{
    int x,y,z;
};

void losowe(struct trzyd *a)
{
    int i=0;
    for(i;i<2;i++){

        a[i].x=((rand()%7)-3);
        a[i].y=((rand()%7)-3);
        a[i].z=((rand()%7)-3);
    }
}

bool porownanie(struct trzyd *a, struct trzyd *b)
{
    if ((a[0].x==b[1].x)&&(a[0].y==b[1].y)&&(a[0].z==b[1].z))
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    srand(time(NULL));
    struct trzyd s[2];
    losowe(&s);
    bool a=porownanie(&s,&s[1]);
    printf("%d",a);
    return 0;

Musiałem zmienić z "->" na "." bo mi błędy pokazywało.

1
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)

@grzecho123, ,

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
 
struct trzyd
{
    int x;
    int y;
    int z;
};
 
void losowe(struct trzyd *a)
{
    a->x=((rand()%7)-3);
    a->y=((rand()%7)-3);
    a->z=((rand()%7)-3);
}
 
bool porownanie(const struct trzyd *a,const struct trzyd *b)
{
    return ((a->x==b->x)&&(a->y==b->y)&&(a->z==b->z));
}
 
int main(void)
{
    srand(time(NULL));
    struct trzyd s1;
    struct trzyd s2;
    losowe(&s1);
    losowe(&s2);
    bool a=porownanie(&s1,&s2);
    printf("%d",a);
    return 0;
}

 

komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)
a dlaczego dałeś to jako const? I oczywiście dziękuję za poprawki
1
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)
A chcesz to zmieniać? Moim zdaniem(podobnie jak w innych językach na przykład Rust) zmienne domyślnie powinny być const(częściej spotykane - immutable). const w parametrze daje pewność, że struktura nie ulegnie zmianie, bo tego nie chcemy.
komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)
Nie chce zmieniać po prostu chcę wiedzieć po co jest cos użyte, gdyż dopiero uczę się programować, a jak nie zapytam to później gdzieś wyjdzie w kodzie moja niewiedza.
komentarz 12 stycznia 2021 przez tkz Nałogowiec (42,020 p.)
Błędnie zinterpretowałeś pierwsze pytanie. A chcesz zmieniać strukturę wewnątrz funkcji? No nie chcesz, to dla pewności, że tego nie zrobisz dodajesz const. Przy próbie modyfikacji czegoś z const, kompilator rzuci błąd.
komentarz 12 stycznia 2021 przez grzecho123 Początkujący (450 p.)
Aaa ok źle zrozumiałem

Podobne pytania

0 głosów
1 odpowiedź 1,097 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Mithriandil Początkujący (250 p.)
0 głosów
1 odpowiedź 222 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 708 wizyt
pytanie zadane 4 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

93,385 zapytań

142,384 odpowiedzi

322,540 komentarzy

62,745 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...