czara Opublikowano 12 Lutego 2004 Zgłoś Opublikowano 12 Lutego 2004 Dzis mialem egzam poprawkowy z programowania :) A ze wykladowca bardzo lubi wszelki sztuczki i kruczki nie obylo sie bez nich i tym razem :/ Jedno z zadan wygladalo tak: #include <stdio.h>int main(void){ int y,i=2; int a[5]={0,20,30,40,50}; y=a[i]; printf("n%d",y); y=i[a]; // skad to sie wzielo ?? printf("n%d",y); return(0);}Trzeba bylo napisac dlaczego ten program jest dobry choc wyglada na zly. I co nam wydrukuje na ekranie . Wie ktos moze skad sie wzielo y=i[a];Bo ja mysle ze z ksiazki po tytulem "Sztuczki i kruczki w C - czyli jak zagmatwac kod programu i uczynic go nieczytelnym" :D Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Domik Opublikowano 12 Lutego 2004 Zgłoś Opublikowano 12 Lutego 2004 poprostu wyświetla jeszcze raz tę samą wartość bo nie wie co wyświetlić Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
p3dzi0r Opublikowano 12 Lutego 2004 Zgłoś Opublikowano 12 Lutego 2004 z tego co wiem to zapis np y=tablica[5] to to samo co y=5[tablica] i pewnie stad sie wzielo. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Domik Opublikowano 13 Lutego 2004 Zgłoś Opublikowano 13 Lutego 2004 p3dzi0r :) masz racje :) heh że na to wcześniej nie wpadłem :) pozdr Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
czara Opublikowano 13 Lutego 2004 Zgłoś Opublikowano 13 Lutego 2004 Zaraz ide na wymiki egzamu wiec sie dowiem dlaczego tak jest :) No i zapyta po co mi wiedziec takie cos?? Jedynie zeby bardziej skompikowac kod programu. Zeby to chocby byl krotszy zapis niz normalnie ... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Wojt Opublikowano 13 Lutego 2004 Zgłoś Opublikowano 13 Lutego 2004 Zaraz ide na wymiki egzamu wiec sie dowiem dlaczego tak jest :) No i zapyta po co mi wiedziec takie cos?? Jedynie zeby bardziej skompikowac kod programu. Zeby to chocby byl krotszy zapis niz normalnie ... To wygląda na błąd w specyfikacji ansi c. W pracy próbowałem skompilować ten przykład pod borland builder (poszło) i hitech c (od razu wywalił błąd że "a" jest nieprawidłowym indeksem tablicy w drugim przypisaniu). Dziwne że ktoś próbuje uczyć programowania na niejasnych sztuczkach wynikających z zagmatwanej i koślawej gramatyki C :/ Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ajgon Opublikowano 13 Lutego 2004 Zgłoś Opublikowano 13 Lutego 2004 Moze kolega studiuje zaocznie? Wtedy wchodzi podstawowe prawo wykladowcy: po pierwsze, up*.*lic - zaplaci za nastepny egzamin ;D Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Megabyte Opublikowano 13 Lutego 2004 Zgłoś Opublikowano 13 Lutego 2004 Mam nadzieje że ja nie będe miał takiego wykładowcy. Ja nierozumiem po co uczyc sie cos takiego. Jestem ciekawy czy specyfikacja C zawiera coś takiego. Albo przykładowo gość zadaje wam zadanie: Co wypisze ten program? #include <iostream.h>void main(){ for (int i=0; i<10; i++); cout<<i; }Co mu odpowiecie? A tak wogóle to jaki kompilator jest najblizszy najnowszej specyfikacji c++? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
czara Opublikowano 13 Lutego 2004 Zgłoś Opublikowano 13 Lutego 2004 poprawke zdalem :) ajgon : studiuje dziennie :) megabyte : ja to rozumiem tak ze gosc se gdzies to znalazl uznal za ciekawe i teraz meczy tym studentow ;) A ze takie rzeczy ci sie calkiem nie przydadza to go malo obchodza ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 14 Lutego 2004 Zgłoś Opublikowano 14 Lutego 2004 Megabyte: 10 ? :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ajgon Opublikowano 14 Lutego 2004 Zgłoś Opublikowano 14 Lutego 2004 Co wypisze ten program? #include <iostream.h>void main(){ for (int i=0; i<10; i++); cout<<i; }Co mu odpowiecie? Ale fajna podpucha ;] Na 105% odpowiedzialbym: 0123456789 :D Jeden maly srednik, a tyle roboty robi ;) Nie zmienia to faktu, ze uwalanie za cos takiego studentow jest totalnym sk*.* :evil: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Megabyte Opublikowano 14 Lutego 2004 Zgłoś Opublikowano 14 Lutego 2004 FiDO i ajgon spróbujcie skompilować to np C++ Builderem a zobaczycie że nie do końca macie racje. Dla odmiany w starych kompilatorach borlanda ten program wyswietli rzeczywiscie 10. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 14 Lutego 2004 Zgłoś Opublikowano 14 Lutego 2004 To ze sie nie kompiluje pod gcc to wiem... bo pozniej sprawdzilem, ale uznalem to za pomijalny blad, bo tu chodzilo o ten srednik a nie blad kompilacji ;) (chyba, ze faktycznie chodzilo o to, zeby odpowiedziec, ze program sie nie skompiluje... to znaczie utrudnia zadanie, bo pewnie nikt nie szukal takiego bledu w kodzie) Ciekawiej by to zadanie wygladalo, jakby cout byl dodatkowo "wciety": for (i=0; i < 10;i++); cout << i;Zmylka jeszcze wieksza, bo ja nie widzac wciecia wyczulem odrazu podstep, z nim moze dalbym sie nabrac. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Megabyte Opublikowano 14 Lutego 2004 Zgłoś Opublikowano 14 Lutego 2004 To ze sie nie kompiluje pod gcc to wiem... bo pozniej sprawdzilem, ale uznalem to za pomijalny blad, bo tu chodzilo o ten srednik a nie blad kompilacji ;) (chyba, ze faktycznie chodzilo o to, zeby odpowiedziec, ze program sie nie skompiluje... to znaczie utrudnia zadanie, bo pewnie nikt nie szukal takiego bledu w kodzie) Ciekawiej by to zadanie wygladalo, jakby cout byl dodatkowo "wciety": for (i=0; i < 10;i++); cout << i;Zmylka jeszcze wieksza, bo ja nie widzac wciecia wyczulem odrazu podstep, z nim moze dalbym sie nabrac.Mi właśnie chodziło o to że się nie skompiluje. Podobny przykład jak z tymi tablicami. Na jednych kompilatorach przejdzie a na drugich nie. Kolega Gie-eN-Zet z tego forum miał właśnie takie zadanie na egzaminie. Napisał że program nie będzie działał i gość mu tego nie uznał. A z tym wcięciem do faktycznie dałem ciała. :) Mogłem zrobić to wcięcie albo nie zrobić żadnych wcięć. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
pshem Opublikowano 15 Lutego 2004 Zgłoś Opublikowano 15 Lutego 2004 To wygląda na błąd w specyfikacji ansi c. to nie jest blad. ten cudak wynika z przemiennosci dodawania. chodzi o to ze tablica jest kawalkiem pamieci ktory gdzies sie zaczyna. a potem od tego miejsca przesuwasz sie o indeks * rozmiar typu danych. a wiec masz zapis: pointer do poczatku tablicy + indeks * rozmiar typu danych (a) z drugiej strony masz: indeks * rozmiar typu danych + adres poczatku tablicy.(i[a]) pic polega na tym ze oba te zapisy sa identyczne w kodzie maszynowym. o ile sam kompilator nie sprawdza takich burakow, to po kompilacji wychodzi to samo w obu przypadkach. bezuzyteczny bajer. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
czara Opublikowano 19 Lutego 2004 Zgłoś Opublikowano 19 Lutego 2004 To wygląda na błąd w specyfikacji ansi c. to nie jest blad. ten cudak wynika z przemiennosci dodawania. chodzi o to ze tablica jest kawalkiem pamieci ktory gdzies sie zaczyna. a potem od tego miejsca przesuwasz sie o indeks * rozmiar typu danych. a wiec masz zapis: pointer do poczatku tablicy + indeks * rozmiar typu danych (a) z drugiej strony masz: indeks * rozmiar typu danych + adres poczatku tablicy.(i[a]) pic polega na tym ze oba te zapisy sa identyczne w kodzie maszynowym. o ile sam kompilator nie sprawdza takich burakow, to po kompilacji wychodzi to samo w obu przypadkach. bezuzyteczny bajer. dokladnie to z ta przemienniscia dodawania powwiedzial mi ten wykladowca kiedy go ostatnio o to zapytalem ;) ale nie chcial powiedziec dlaczego musze to umiec :P Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
saygon Opublikowano 30 Marca 2004 Zgłoś Opublikowano 30 Marca 2004 mi sie ten drugi programik spokojie kompiluje pod net studio. a takie <span style="color:red;">[ciach!]</span>ly to racjecz zlosliwosc a nie wiedza, bo bardzi jchodzi o spostrzegawczośc a nie o znajomosc programu. syntaxy robi prawie kazdy. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mathias79 Opublikowano 7 Kwietnia 2004 Zgłoś Opublikowano 7 Kwietnia 2004 mi także ten drugi się kompiluje na BC 3.11 i dev-c++ 4. a co do sensowności takich zadań to fakt... niestety smutną prawdą jest żę studentów uczy się głupot a nie myślenia ... składnia to jedno a jakieś sztuczki to drugie. Potem siada taki beidny człowiek i co prawda zna doskonala składnie ale jak ma problem to nie wie od której strony zacząć. Często nie potrafi sobie nawet wyobrazić jak ten program ma działać. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dzi Opublikowano 7 Kwietnia 2004 Zgłoś Opublikowano 7 Kwietnia 2004 Albo co gorsze stosuje podobne "sztuczki" dla szpanu czy tez pokazania ze "sie zna" i robi sie niemajteinowalny syf. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
saygon Opublikowano 7 Kwietnia 2004 Zgłoś Opublikowano 7 Kwietnia 2004 nie tu sie nizgodze . studiuje informatyke na plibudzie warszawskiej wydzial mini kierunek informatyka i msuze powiedziec ze co jak co ale <span style="color:red;">[ciach!]</span>l i takich debilizmow to nas nie ucza. tu poziom jest na serio wysoki i nacisk jest kladziony na rzeczy przydatne. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dzi Opublikowano 7 Kwietnia 2004 Zgłoś Opublikowano 7 Kwietnia 2004 No i fajnie :) Nikt zreszta nie powiedzial, ze wszendzie jest zle, mowimy jedynie, ze nie powinno byc tak jak w przykladzie na poczatku. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bartolomeo_1 Opublikowano 13 Maja 2004 Zgłoś Opublikowano 13 Maja 2004 #include <iostream.h>void main() { for (int i=0; i<10; i++); cout<<i; }To sie nie powinno skompilowac z powodu zakresu ważności zmiennej i, która jest deklarowana w for i obowiązuje tylko do końca pętli. Jednakże wiele kompilatorów (w tym C++Builder) toleruje taki zapis i nie zgłaszając błędu udostępnia tę zmienną poza pętlą. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
saygon Opublikowano 17 Maja 2004 Zgłoś Opublikowano 17 Maja 2004 ale NET juz wywali bad o niezdeklarowanej zmiennej. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
snaj* Opublikowano 18 Maja 2004 Zgłoś Opublikowano 18 Maja 2004 Rozwiazanie powyzszej zagadki to kod assmowy generowany przez rozne kompilatory. Np VC++ zapis for(int i....) przerabia tak ze i jest deklarowane przed forem stad jej zakres waznosci to od fora w dol bloku z forem. Niestety z powodu obrzydzenia do wszelkich borlandow (poza niesmiertelnym 3.11 ;] ) nie moge podejrzec tam tworzonego kodu. Ale to zalezy od interpretacji kompilatora ktore lekko traktuja se specyfikacje jezyka ;) - czyli ze i ma miec zakres waznosci tylko fora. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
czara Opublikowano 1 Czerwca 2004 Zgłoś Opublikowano 1 Czerwca 2004 Kolejna sesja i znow kolejne sztuczki i kruczki w c :) Zadanie z wczorajszego kola : Dokoncz kod tak aby nastapila zamiana wartosci zmiennych x i y bez uzywania dodatkowych zmiennych :x=1234;y=2345;i w sumie nizele mnie to zaskoczylo :/ w sumie too nikt nie napisal tego dobrze wie ktos moze jak to napisac ?? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kenji Opublikowano 1 Czerwca 2004 Zgłoś Opublikowano 1 Czerwca 2004 jezeli sie nie myle to y = x + y; x = y - x; y = y - x; <- zmienilem, juz jest poprawnie. to jest proste ale jak sie to gdzies zobaczy, sam tego nie wymyslilem :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
czara Opublikowano 1 Czerwca 2004 Zgłoś Opublikowano 1 Czerwca 2004 kurde jakie to latwe :] ale w trzeciej linii powinno byc y=y-x; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kenji Opublikowano 1 Czerwca 2004 Zgłoś Opublikowano 1 Czerwca 2004 to jest ciekawy topic, jak bedziesz mial jakies inne kruczki sztuczki to wal, wiem ze nie na tym powinna polegac nauka c/cpp ale tak "dla sportu" mozna sie poglowic. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 1 Czerwca 2004 Zgłoś Opublikowano 1 Czerwca 2004 Kiedys widzialem program, ktory wyswietla swoje zrodla bez korzystania z operacji plikowych oczywiscie. Wtedy moja wiedza byla nikla, jesli nie zerowa, a teraz chetnie jeszcze raz bym przestudiowal sobie ten kod, wie ktos z Was moze gdzie to lezy? Pisze w tym topicu, bo tam tez bylo troche ciekawych kruczkow :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Megabyte Opublikowano 1 Czerwca 2004 Zgłoś Opublikowano 1 Czerwca 2004 To może ja zadam takie pytanko i=0;tab[i++]=++i; //co według standartu cpp powinna spowodować ta instrukcja?Oczywiście tablica tab i zmienna i zostały zadeklarowane wcześniej w programie. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...