matematykaszkolna.pl
C Godzio: Trivial do której dzisiaj siedzisz ?
30 paź 19:18
Trivial: nie wiem. emotka
30 paź 19:47
Godzio: A teraz miałbyś czas ?
30 paź 19:48
Eta: emotka
30 paź 19:48
Godzio: Eta, chcesz pomóc w programowaniu ?
30 paź 19:49
Trivial: A o co chodzi?
30 paź 19:49
Godzio: Bo jeśli jesteś w miarę cierpliwy to bym miał kilka pytań odnośnie programu, tego z minkami, właściwie to chodzi mi o małe wyjaśnienia Bo raczej za dużo nie rozumiem ... O ile masz czas i chęci oczywiście, sam wiem jak to może być z takimi jak ja − męczarnia emotka
30 paź 19:50
Eta: Omg ..... emotka
30 paź 19:52
Godzio: Czyli muszę liczyć na litość Triviala
30 paź 19:53
Trivial: A konkretnie co jest niejasne?
30 paź 19:54
Trivial: Można to zrobić zupełnie inaczej, to zadanie robiłem na końcu więc miałem zwiększony poziom abstrakcji w głowie i trochę chyba przesadziłem. emotka
30 paź 19:55
Godzio: Konkretnie to sporo, Weźmy początek typedef struct twarz twarz; − czy to definiuje nam coś ? struct twarz { char wlosy[6]; char czolo[6]; char oczy[6]; char usta[6]; char szyja[6]; }; − czy to rezerwuje ile miejsc będzie potrzebne? void initialize (twarz* face) { −− tutaj też nie wiem o co chodzi
30 paź 19:56
Godzio: Powiedzmy, że trochę zaszalałeś
30 paź 19:56
Godzio: Tylko się nie załamuj przypadkiem moimi pytaniami, bo mogą być typu "dlaczego 2 + 2 = 22 "
30 paź 19:57
Trivial: typedef definiuje nowy typ danych. Składnia jest taka: typdef ... nazwa__nowego__typu; ... − musimy napisać, co oznacza nasz nowy typ, w tym wypadku jest to struct twarz
30 paź 19:58
Trivial: Czyli możemy napisać: typdef int Godzio; Od tej chwili możesz tworzyć zmienne typu Godzio. Będą one w rzeczywistości typu int. emotka
30 paź 19:59
Trivial: typedef
30 paź 20:00
Trivial: No więc. Miałeś już struktury omówione?
30 paź 20:00
Godzio: Czyli struct jest czymś takim jak int, float itd ?
30 paź 20:01
Trivial: W uproszczeniu tak. Składnia jest taka: struct nazwa { ... };
30 paź 20:01
Godzio: Miałem to: Zmienne i wyrażenia arytmetyczne Konstrukcje warunkowe Parametry funkcji i wskaźniki Pętle Tablice i łańcuchy Biblioteki struktur chyba nie było,
30 paź 20:04
Trivial: Aha. Jak się pytałem co miałeś, to mi powiedziałeś, że mogę używać wszystkiego. emotka
30 paź 20:05
Godzio: No bo w sumie sam nie wiedziałem co mam , ale fajnie by było wiedzieć coś więcej, bo ja nie wiem co się dzieje na wykładach, on coś gada, a ja potrze i się pytam o co chodzi
30 paź 20:07
Trivial: Struktury są proste i intuicyjne, więc nie ma problemu. Ogarniesz. emotka Dam przykład: struct miasto { char nazwamiasta[21]; /* najwyżej 20 znaków + bajt '\0' */ int liczbamieszkancow; double procentbezrobocia; /* itd. ... */ }; Możesz upakować powiązane informacje w tej samej zmiennej, co jest często wygodne.
30 paź 20:10
Godzio: Strasznie żałuję, że w liceum się do tego nie przyłożyłem, mieliśmy zajęcia z programowania w C w osobnym miejscu (nie w szkole) a tam to w sumie robiliśmy co chcieliśmy, i nauczyciel, robił programy tylko jeśli chcieliśmy, a raczej nikomu się nie chciało, jedna osoba z całej klasy z nim pisała to tylko ... ehhh człowiek wtedy nie myślał
30 paź 20:11
Trivial: Spoko Godzio, dasz radę. emotka To nie jest fizyka kwantowa.
30 paź 20:12
Godzio: Mówisz przyłożę się na pewno, bo matmę w miarę ogarniam więc będę miał czas na programowanie, obiecuje że będą ze mnie ludzie
30 paź 20:13
Trivial: No więc, rozumiesz już struktury w zarysie?
30 paź 20:14
Godzio: To jeszcze jedno, co tutaj reprezentuje sobą char, int, double, bo normalnie wiem, że int − l. całkowite float − rzeczywiste double − jakieś rzeźnicze char − znaki
30 paź 20:15
Godzio: Tamto kumam emotka
30 paź 20:15
Trivial: double jest po prostu floatem, tylko dwa razy bardziej dokładnym. reszta OK.
30 paź 20:16
Godzio: i te struktury zawsze trzeba zdefiniować, tzn: typedef struct miasto nazwamiasta, liczbamieszkancow, procentbezrobocia; struct twarz { char nazamiasta[21]; int liczbamieszkancow; double procentbezrobocia; };
30 paź 20:18
Trivial: No to może ćwiczonko ci dam. Napisz strukturę, która będzie sobą reprezentowała liczbę zespoloną re + im*i, gdzie re,im są typu double.
30 paź 20:18
Trivial: Co do typedef to można zrobić tak: typedef struct { ... } nazwaTypu; ← tutaj definiujemy wszystko w jednej linicje − nieczytelne LUB typdef struct { ← tak już lepiej, ale preferuję następny sposób. ... } nazwaTypu; ALBO rozdzielamy na dwie części: typdef sturct nazwaStruktury nazwaTypu; struct nazwaStruktury { .... };
30 paź 20:23
Trivial: Nie wiem czemu zjadam e w typedef. emotka
30 paź 20:24
Godzio: Chyba nie rozumiem tego zadania ? typedef struct zespolone liczbazespolona; struct zespolone { double re,im; };
30 paź 20:26
Trivial: Rozumiesz i dobrze napisałeś. emotka
30 paź 20:27
Godzio: Wow No dobra czyli kumam, a ten typ "liczbazespolona" się później przyda ?
30 paź 20:28
Trivial: Pewnie się przyda, bo ćwiczenia wymyślam ad hoc. emotka Teraz, aby utworzyć zmienną nowego typu postępujemy analogicznie do tworzenia zmiennej typu wbudowanego (takiego jak np. int). Zatem: typedef struct complexTag complex; struct complexTag { double re, im; }; int main(void) { complex z; /* Utworzyliśmy zmienną z typu complex */ return 0; }
30 paź 20:31
Godzio: Ok, kminie, a tak w ogóle to wykładowca mówił że tego void nie trzeba pisać
30 paź 20:33
Godzio: To przechodząc dalej: void initialize (twarz* face) { − i co to nam daje ? int i; for (i=0; i<5; i++) { − pętla wiem co to oznacza face−>wlosy[i] = ' '; face−>czolo[i] = ' '; face−>oczy[i] = ' '; face−>usta[i] = ' '; face−>szyja[i] = ' '; } − tych "face−>wlosy[i] = ' ' ; " już średnio
30 paź 20:35
Trivial: W C trzeba, w C++ nie. To są pewne subtelności na które trzeba uważać, bo jeżeli nie napiszemy void w C, to oznacza to, że funkcja może przyjąć dowolną ilość argumentów przez co kompilator nie wychwyci błędów związanych z niewłaściwymi odwołaniami do funkcji. W C++ to zmieniono.
30 paź 20:35
Godzio: Aha, no dobra, będę wiedzieć
30 paź 20:36
Trivial: Nie tak prędko, jeszcze kilka rzeczy wcześniej. Jak odwołać się do pól struktury? Bardzo prosto, służy do tego operator kropki: ... complex z; /* tworzymy zmienną z typu complex */ z.re = 1; z.im = 2; ... Teraz, z = 1+2i. Rozumiemy? emotka
30 paź 20:37
Godzio: A ten complex, to taka nazwa liczb zespolonych (jestem raczej w niemieckim niż angielskim ) To rozumiem
30 paź 20:39
Trivial: complex to nazwa nowego typu, który stworzyłem. Zatem, skoro rozumiesz to: Napisz funkcję, która jako parametr przyjmuje liczbę zespoloną typu complex i wypisuje ją na ekran. Nie przejmuj się znakami liczb.
30 paź 20:41
Trivial: Aha, nie zrozumiałem pytania. Complex to liczba zespolona po angielsku.
30 paź 20:44
Godzio: O to mi chodziło
30 paź 20:48
Godzio: Cholerka, nie wychodzi mi nic
30 paź 21:00
Trivial: Pokaż, co tam masz.
30 paź 21:01
Godzio: Nie wiem czy dobrze zrozumiałem, mam zadań 2 parametry np. a i b takie że z.re = a z.im = b i mam wydrukować liczbę zespoloną postaci: z = a + bi ?
30 paź 21:02
Godzio: mam zadać*
30 paź 21:02
Trivial: Tak. W mainie tworzysz zmienną z, przypisujesz jej wartości, a potem zmienną z przekazujesz do funkcji − dajmy na to − pokaz. Funkcja ta ma wypisać na ekran: a + bi.
30 paź 21:04
Ed: Pomogłbym ale tyle napisaliście ze juz nie ogarniam o co wlasciwie chodzi i na jakim jestescie etapie.
30 paź 21:05
Godzio: #include <stdio.h> #include <stdlib.h> typedef struct complexTag complex; struct complexTag{ double re,im; }; int main () { complex z; int a,b; scanf("%d",&a); scanf("%d",&b); z.re = a; z.im = b; printf("z = %d + %di \n",a,b); system ("pause"); return (0); } Chyba nie o to chodziło, bo to że z.re = a, z.im = b to praktycznie nic nie daje ...
30 paź 21:08
Trivial: Chodziło mi o: int main (void) { complex z; z.re = 1; z.im = 2; pokaz(z); system("pause"); return 0 } I teraz masz napisać funkcję pokaz, która wypisze z=a+bi.
30 paź 21:12
Trivial: Aha, Ed, jeśli chcesz pomóc to proszę bardzo. emotka Przerobiłem krótko definiowanie nowego typu przy pomocy typedef, definicję struktury, tworzenie zmiennej nowego typu oraz odwoływanie się do pól struktury za pomocą kropki.
30 paź 21:14
Ed: Godzio masz coś konkretnego do zrobienia czy chcesz nauczyć się języka?
30 paź 21:17
Godzio: Chyba rozumiem, daj mi 2 min
30 paź 21:18
Godzio: I chce się nauczyć i mam coś konkretnego
30 paź 21:18
Godzio: Jednak nie mam pojęcia o co chodzi
30 paź 21:24
Trivial: pokaż jak robisz, a zobaczymy, co jest nie tak. emotka
30 paź 21:25
Godzio: Właściwie to ja nie wiem co robię bo myślałem że wiem o co chodzi, a jednak nie wiem
30 paź 21:26
Trivial: Chodziło mi o coś takiego: void pokaz (complex z) { printf ( .... ); }
30 paź 21:30
Godzio: No to miałem to samo prawie, że tyle że dałem "int pokaz"
30 paź 21:31
Trivial: Funkcja nic nie zwraca → void.
30 paź 21:34
Ed: Poczytaj o zwracaniu wartości przez funkcje i będziesz wiedział czy ma byc void czy int. Widze ze Trivial ogarniasz wiec sie wam tu nie bede wciskal myslalem ze jakis problem jest bo tyle napisaliscie emotka
30 paź 21:36
Godzio: A mógłbyś mi napisać ten program od początku do końca, żebym miał wzór na przyszłość ?
30 paź 21:36
Ed: aha i powodzenia Godzio emotka
30 paź 21:36
Godzio: Problem jest, tylko że ze mną emotka
30 paź 21:36
Godzio: Dzięki, na pewno się przyda
30 paź 21:37
Trivial: void pokaz (complex zesp) { printf ("z = %lf + %lf i", zesp.re, zesp.im); } dlaczego %lf? Mamy typ double pól re, im. %d jest dla typu int.
30 paź 21:43
Godzio: Tak to ma wyglądać ostatecznie: #include <stdio.h> #include <stdlib.h> typedef struct complexTag complex; struct complexTag{ double re,im; }; int main (){ complex z; z.re = 1; z.im = 2; void pokaz (complex zesp){ printf ("z = %lf + %lf i", z.re, z.im); } system ("pause"); return (0); }
30 paź 21:49
30 paź 21:50
Trivial: W języku C nie można definiować funkcji wewnątrz innych funkcji.
30 paź 21:51
Godzio: Dasz jakieś jeszcze zadanko ? Teraz powinienem zrobić bezbłędnie
30 paź 21:56
Trivial: Napisz funkcję add, która doda dwie liczby zespolone. complex add(complex z1, complex z2) { ... return ... }
30 paź 21:59
Godzio: http://pastebin.com/T7WKewtQ gdzie jest błąd ?
30 paź 22:09
Godzio: Patrz tu lepiej http://pastebin.com/yJr4G0Px
30 paź 22:11
Godzio: Mam nadzieję że się nie załamałeś
30 paź 22:19
Trivial: Mogłeś wykorzystać wcześniejszą funkcję pokaż do wyświetlania liczb. Nie możesz tak sobie zwrócić z1 + z2, bo kompilator nie wie o co chodzi. emotka Musisz napisać np. tak: complex add(complex z1, complex z2) { complex wynik; wynik.re = z1.re + z2.re; wynik.im = ...; return wynik; } A w mainie może być np. tak: ... complex u,v, wynikDodawania; u.re = ..; u.im = ...; v.re = ...; v.im = ...; printf("u: "); pokaz(u); printf("v: "); pokaz(v); wynikDodawania = add(u,v); printf("u+v: "); pokaz(wynikDodawania); ...
30 paź 22:21
Godzio: Jestem za tępy na to , wiesz co, może zrobimy tak, ja się wczytam trochę w lekturę na temat C, i spróbuję porobić te prostsze zadania, Ty je sprawdzisz, a później spróbuje z Twoją pomocą ruszyć te trudniejsze, nie wiem czy to jest możliwe, no ale zobaczymy ale jak masz chwilę to możesz od końca sobie powoli pisać, bo nie wiem jak to wyjdzie z moimi rozwiązaniami
30 paź 22:29
Trivial: Poćwicz funkcje, bo widzę, że masz z tym spory problem.
30 paź 22:30
Godzio: Ok, jutro się porządnie zabiorę jak wrócę z pracy
30 paź 22:32
Trivial: A te zadanka ruszę może w przyszły weekend, bo od jutra zaczynam realizować pewien bardzo nudny projekt z fizyki... A te zadanka od siódmego są jakieś dziwne, bo co tutaj jest do programowania?
30 paź 22:34
Godzio: wiesz co to 7 wiem jak zrobić, a reszta to właśnie ... zastosowania programowania w matematyce ...
30 paź 22:36
Trivial: Mimo wszystko, ćwiczenia 7−15 są dużo prostsze niż np. takie 6.
30 paź 22:41
Godzio: Domyślam się
30 paź 22:44
Trivial: Gdy już ogarniesz struktury, to możesz spróbować zrozumieć zasadę działania zadania numer 6. Nie powiedziałem jeszcze o wskaźnikach na struktury, które są tam wykorzystywane, ale wystarczy, że widząc operator −> będziesz wiedział, że oznacza on odwołanie się do pola struktury podobnie jak kropka, tylko z wykorzystaniem wskaźnika. (czyli tam gdzie widzisz −> myśl: kropka).
30 paź 22:48
Godzio: Ok, ale do tego zadania wrócimy jeszcze
30 paź 22:50
Trivial: Z ciekawości, te zadanka są obowiązkowe? "Zadania są zupełnie dobrowolne i nie ma za nie punktów. Niemniej sugeruję dobrze je przemyśleć przed kolokwium."
30 paź 23:03
Godzio: No właśnie ... też to sobie przeczytałem, niestety są obowiązkowe, trzeba je zaliczyć na ćwiczeniach, żeby w ogóle je zaliczyć i przystąpić do kolokwium które jest Uwaga ! koło 12 listopada ...
30 paź 23:09
Trivial: Widzę, że kolokwium jest dalej i dalej. emotka Ostatnio było chyba siódmego?
30 paź 23:12
Godzio: Zadania są do 7 , a kolokwium to już co innego
30 paź 23:16
Godzio: Właściwie nie wiem czy to kolokwium, ale taki sprawdzianik chyba
30 paź 23:20
Trivial: Jak posiedzisz to dasz radę. emotka Ja idę spać. Dobranoc. emotka
30 paź 23:31
Godzio: Dobranoc emotka
30 paź 23:38