matematykaszkolna.pl
Dziadek mróz Lukas: Programowanie c++ Jak zdeklarować liczbę całkowitą podzielną przez n gdzie n zadane jest z klawiatury ? int n
19 gru 21:42
Dziadek mróz: Nie wiem czy o to chodzi int m = m % n == 0 ? m : 0; Obecnie jestem na telefonie, więc jak na razie zadawaj pytania na krótkie odpowiedzi.
19 gru 21:59
Lukas: Ok. To może jak będziesz to napisz bo mam kilka pytań
19 gru 22:20
Lukas: Tak o to mi chodziło, program działa emotka
19 gru 22:30
jakubs: Jakieś dziwne zadanie, przecież takich liczb jest nieskończenie wiele.
19 gru 22:32
Lukas: program ma wyświetlać liczny całkowite podzielne przez n gdzie n jest zadane z kaliwatury.. co dziwnego w tym ?
19 gru 22:35
jakubs: Albo ja głupi jestem, albo to jest całkiem inne zadanie. Wyświetlać liczby, a zdeklarować jedną liczbę to chyba jest różnica
19 gru 22:50
Lukas: Właśnie z tym wyśiwetlaniem i pętlami sobie nie radzę.
20 gru 00:16
Lukas: Dziadek jesteś ?
20 gru 00:34
jakubs: Jaki masz problem z wyświetlaniem liczb, albo z pętlami ? Może uda mi się pomóc.
20 gru 01:00
Lukas: nie wiem kiedy for a kiedy do while ?
20 gru 01:08
Dziadek Mróz: for używa się przy iteratorach, w napisie, tablicy itp. string Imie = "Lukas"; for(int i = 0; i < Imie.length(); i++) { cout << Imie[i] << endl; } $ L u k a s $ _ while/do while używa się np. przy wczytywaniu z pliku lub sprawdzaniu czy nastąpiło jakieś zdarzenie ifstream IN("Lukas.txt", ios::in); string Imie; string Nazwisko; while(IN >> Imie >> Nazwisko) { cout << Imie << ' ' << Nazwisko << endl; } $ Lukas Podolski Adam Małysz Janne Ahonen $ _ char opcja; do { cout << "Wybierz opcje: " << endl; cout << \tC − kontynuuj << endl; cout << \tK − koniec << endl; cout << ": "; cin >> opcja; }while((opcja != 'K' or opcja != 'k') or (opcja == 'C' or opcja == 'c')); $ Wybierz opcje: C − kontynuuj K − koniec : c Wybierz opcje: C − kontynuuj K − koniec : k $ _
20 gru 09:49
Dziadek Mróz: while operuje na danych przed jego wystąpieniem oraz po wykonaniu jednej pętli. do ... while operuje na danych przed jego wystąpieniem oraz podczas wykonania jednej pętli
20 gru 09:52
Lukas: Dzięki Dziadek emotka
20 gru 12:12
Dziadek Mróz: Dawaj kolejne, póki siedzę.
20 gru 12:38
Lukas: Podaj możliwie najprostszy sposób spowodowania, że program zawierający pętlę while( ) zacznie się zachowywać jak program zawierający pętlę do while( ) . Tzn. pętla zawsze się wykona przynajmniej jeden raz. ?
20 gru 14:05
Dziadek Mróz: char opcja; goto wykonaj; while((opcja != 'K' or opcja != 'k') or (opcja == 'C' or opcja == 'c')) { wykonaj: cout << "Wybierz opcje: " << endl; cout << "\tC − kontynuuj" << endl; cout << "\tK − koniec" << endl; cout << ": "; cin >> opcja; }
20 gru 14:15
Lukas: Masz jeszcze czas po 16 bo teraz muszę wyjść i nie będzi mnie
20 gru 14:16
Dziadek Mróz: Możliwe że będę
20 gru 14:20
Lukas: czemu korzysta się z prinft a nie cout ? Po co to prinft ?
20 gru 16:21
Lukas: Dziadek możesz mi dać jakiś schemat blokowy do narysowanie z pętli i potem żebyś rzucił okiem na to ? emotka
20 gru 17:01
Dziadek Mróz: cout to obiekt (strumień) klasy ostream, wypluwa wszystko co do niego wrzucisz, co za tym idzie nie można formatować danych, co najwyżej rzutować. printf to funkcja podstawowa formatująca wyjście, tyle. Używając printf można mieć kontrolę nad tym co chcemy wyświetlić, inaczej jest z cout, które jest znacznie prostsze i wyświetla "z automatu" dane.
20 gru 17:29
Dziadek Mróz: No to machnij schemat z opcjami: 1 − odwraca napis 2 − zamienia małe na duże a duże na małe litery 3 − wyświetla w kodach ASCII HEX oddzielonych spacją 4 − wyjście
20 gru 17:30
52: Ogólnie to sory że się wcinam... Ale ... Dziadek Mróz będziesz miał trochę czasu w przerwie świątecznej ? Tzn. 28.12−30.12 Albo 2.01−4.01 i trochę ochoty, aby pomóc z pewnymi pytaniami/zadaniami z C ... Tak pytam, bo bardzo słabo ogarniam programowanie a ty może to umiesz i byś choć trochę rozjaśnił mi to emotka
20 gru 17:35
Lukas: Dziadek mi chodzi raczej o schemat blokowy pętli emotka Formatowanie tekstu to już trudniejsza opcjaemotka
20 gru 17:42
asdf: w programach pod zadnym pozorem nie uzywa sie goto!emotka int counter = 0; while((opcja != 'K' or opcja != 'k') or (opcja == 'C' or opcja == 'c') or(counter == 0)) { cout << "Wybierz opcje: " << endl; cout << "\tC − kontynuuj" << endl; cout << "\tK − koniec" << endl; cout << ": "; cin >> opcja; counter++; }
20 gru 17:56
52: nas też uczyli aby nie używać goto ...
20 gru 17:59
Dziadek Mróz: Ale chodziło o zapis pętli do ... while za pomocą while. Jednokrotne goto jest wystarczające. To zwykły skok do adresu.
20 gru 18:08
jakubs: Ja jak muszę to korzystam z goto
20 gru 18:11
Lukas: Dziadek ponawiam pytanie o zadanie na schemat blokowy emotka
20 gru 18:21
Dziadek Mróz: Lukas od czegoś trzeba zacząć. Korzystaj z tabeli ASCII i znajdź jakiś sposób. Odwracanie listy to jedno z pierwszych zadań z pętli. #include <iostream> using namespace std; int main() { char napis[] = "Hello world"; // {H, e, l, l, o, , w, o, r, l, d, \0} char rev [sizeof(napis)]; int napis_len = sizeof(napis)/sizeof(napis[0]) − 1; // − 1 bo ostatni znak to znak końca linii \0 for(int i = 0; i < napis_len; i++) { rev[i] = napis[napis_len − i − 1]; } cout << rev << endl; } $ dlrow olleH
20 gru 18:28
Lukas: Ja myślałem, że do formatowania tekstu trzeba string używać .
20 gru 18:30
Dziadek Mróz: A gdzieżby tam. Napis to tablica char'ów. String to obiekt klasy string z biblioteki <string>
20 gru 18:32
Dziadek Mróz: Klasy sobie na koniec zostaw, póki zaczynasz zabawę z programowaniem to rób proste rzeczy.
20 gru 18:32
Lukas: nie wiem co to [rev] i czemu jest warunek i<napislen ?
20 gru 18:39
Dziadek Mróz: rev to tablica dla odwrotnego napisu jak reverse.
20 gru 18:45
Dziadek Mróz: Pisz czego z tego programu nie rozumiesz?
20 gru 18:45
Lukas: najpierw jest i++ a potem i−1 ? Tego nie kumam
20 gru 18:57
Dziadek Mróz: tablice indeksuje się od 0 to rozmiaru−1 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} → sizeof = 12 {H, e, l, l, o, , w, o, r, l, d, \0} → napis_len = 11 bo bez ostatniego elementu bez usuwania ostatniego: rev[0] = napis[napis_len − 0] → napis[11] = '\0' cout → rev[1] = napis[napis_len − 1] → napis[10] = 'd' cout → d rev[2] = napis[napis_len − 2] → napis[9] = 'l' cout → l z usunięciem ostatniego: rev[0] = napis[napis_len − 0 − 1] → napis[10] = 'd' cout → d rev[1] = napis[napis_len − 1 − 1] → napis[9] = 'l' cout → l rev[2] = napis[napis_len − 2 − 1] → napis[8] = 'r' cout → r
20 gru 19:07
Lukas: ok próbuje zrozumieć
20 gru 19:11
Dziadek Mróz: i++ to inkrementacja prawostronna, oznacza to, że najpierw korzystamy z i a później dopiero inkrementujemy. x = 0 i = 1 x += ++i → najpierw inkrementujemy i, a później dodajemy do x x → 2 i → 2 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ++i to inkrementacja lewostronna, najpierw inkrementujemy a później korzystamy z i x = 0 i = 1 x += i++ → najpierw dodajemy i do x, a później inkrementujemy i x → 1 i → 2
20 gru 19:13
Lukas: czemu w code bloks nie działają wszystkie biblioteki wiecie może ?
20 gru 19:41
Dziadek Mróz: Nie wiem, nie korzystam, poszukaj w necie może ktoś ma na to odpowiedź. Co do schematu blokowego. Zrób prosty schemat mycia naczyń. Masz zlew pełen talerzy i musisz każdy umyć. Nieograniczona ilość wody i czasu, ograniczona ilość talerzy
20 gru 20:14
Lukas: ok
20 gru 20:16
asdf: głupi program: int i=0; while(i++==0) { if(−−i==1) { break; } }
20 gru 20:27
Dziadek Mróz: pętla nieskończona
20 gru 20:28
Dziadek Mróz: for( ; ; ) {}
20 gru 20:30
Lukas: Dziadek to zadanie z pętli trudne jak na pierwszy raz. Daj coś prostszego
20 gru 21:37
razor: Trzymaj moją pracę domową z początku semetru 1)Wczytać ciąg liczb dodatnich zakończony liczbą niedodatnią. Wydrukować największą liczbę tego ciągu. 2)Wczytywać ciąg liczb aż do napotkania zera. Wydrukować ilość liczb ujemnych i ilość liczb dodatnich w tym ciągu. 3)Wczytać ciąg liczb niezerowych zakończony zerem. Wydrukować: − średnią arytmetyczną pierwszej i ostatniej liczby tego ciągu; − średnią arytmetyczną dodatnich liczb tego ciągu; albo odpowiedni komentarz, gdy którejś ze średnich nie da się policzyć. 4)Wczytywać podawane przez użytkownika liczby, dopóki tworzą one ciąg rosnący (czyli każda następna liczba jest większa od poprzedniej). Wyświetlić średnią arytmetyczną liczb tego rosnącego ciągu. 5)Wczytywać liczby aż do powtórzenia się pierwszej z nich. Wyświetlić na ekranie informację, ile razy wystąpiła sytuacja, że wpisana liczba była większa od swojego poprzednika.
20 gru 21:44
Lukas: Dzięki to już przyjemniejsze emotka
20 gru 21:45
Dziadek mróz: To już powinno być narysowane emotka
21 gru 11:37
Lukas: Ale nie jestemotka
21 gru 12:59
Dziadek Mróz: Program do rysowania schematów blokowych: Umbrello https://umbrello.kde.org/installation.php
21 gru 13:34
Dziadek Mróz: JavaBlock jeszcze lepsze: http://javablock.sourceforge.net/
21 gru 13:41
Lukas: Dzięki, ograniam pętle teraz emotka
21 gru 13:59
Lukas: Napisz program wyświetlający na ekranie kolejne 100 liczb parzystych for( int i=0 i>=100 i=i+1) Taka pętla ?
21 gru 14:12
jakubs: Źle, bo w przedziale 0−100, nie będzie 100 liczb parzystych.
21 gru 14:16
Lukas: for (int i=0 i>=200 i=i+2)
21 gru 14:18
Dziadek Mróz: Można inaczej: int ile = 0; int i = 1; while(ile < 100) { if (i % 2 == 0) { cout << i << " "; ile++; i++; } }
21 gru 14:19
21 gru 14:20
Dziadek Mróz: Lukas, problem w tym, że nie wiesz czy w przedziale 0−200 będzie 100 liczb parzystych, lepiej tak jak ja zrobić na akumulatorze (ile) zliczającym ilość napotkanych parzystych liczb (i). % to operator binarny zwracający resztę z dzielenia dwóch liczb całkowitych
21 gru 14:22
Dziadek Mróz: Oj błąd mam i++ powinno być za warunkiem if if (...) { ... } i++;
21 gru 14:23
jakubs: Czyli mam dobrze
21 gru 14:25
Dziadek Mróz: Tak
21 gru 14:25
Dziadek Mróz: @jakubs tylko rób mniejsze wcięcia, najlepiej na 2, 4 spacje, wtedy kod się tak nie rozjeżdża.
21 gru 14:27
jakubs: pastebin tak dziwnie pokazuje, u mnie w notepadzie jest to bardzo ładnie zrobione. Używam tabulacji, czyli 4 spacje.
21 gru 14:28
Lukas: Dziadek ale dla mnie bardziej zrozumiały jest mój zapis emotka Wiem, że masz rację na 100%
21 gru 16:17
Dziadek Mróz: Lukas, owszem, ale zanim napiszesz taką pętlę musisz się zastanawiać jaki dać zakres aby było 100 parzystych zaczynając od iluś tam. Gorzej jak musiałbyś szukać 100 kolejnych podzielnych przez 31, to jaki zakres w tym wypadku? Prościej jest dać programowi zadanie do zliczania znalezionych danych. Twój przypadek jest dobry dla np. stałej liczby/wartości danych. Później jak wejdzie obsługa plików to trzeba będzie znaleźć parzyste liczby z pliku wejściowego, przy czym w tym pliku raz będzie 100 liczb a raz 120.
21 gru 17:09
Lukas: ale czmu dwa razy jest int ile i int i ?
21 gru 17:12
Dziadek Mróz: Nauczony jestem po kolei definiować zmienne, można to zrobić w jednej linii: int ile = 0, i = 1; Mój sposób bierze się stąd, np: int fd1 = open(nazwa−pliku1, O_RDONLY); int fd2 = open(nazwa−pliku2, O_RDONLY); int wiek = Osoba1.Wiek; Sposób jednoliniowy: int fd1 = open(nazwa−pliku1, O_RDONLY), fd2 = open(nazwa−pliku2, O_RDONLY), wiek = Osoba1.Wiek; Jak piszesz tak program to łatwiej znaleźć jego typ w kodzie. W pewnym momencie będzie taki program, że trzeba będzie na początku zadeklarować kilkadziesiąt zmiennych int i pisanie ich w jednej linii nie ma wyglądu.
21 gru 17:25
Lukas: Ale ten sposób dla mnie to czarna magia. Ty jesteś doświadczonym programistą jak ja tutajnnie wiem skąd się co wzięło. Na ćw robimy tak jak ja zrobiłememotka
21 gru 17:27
Dziadek Mróz: No to rób jak a razie tak, później znajdziesz tricki i wtyki do efektywnego pisania programów.
21 gru 17:36
Lukas: No to teraz czy mój program ten wyżej zadziała poprawnie ? 14:18 ?
21 gru 17:39
razor: ten program nic nie robi
21 gru 17:45
Lukas: Jak to nic nie robi ? wyświetla liczny od zera do 200 parzyste czyli co 2
21 gru 17:49
razor: for (int i=0 i>=200 i=i+2) to nic nie wyświetla
21 gru 17:51
Dziadek Mróz: Jedyne co robi to skacze co 2 ale nic więcej
21 gru 17:51
Lukas: to jak zadeklarować tą pętle ?
21 gru 17:52
Dziadek Mróz: brakuje #include <stdio.h> ... printf("%d ", i); lub #include <iostream> using namespace std; ... cout << i << " ";
21 gru 17:54
Lukas: Te oczywistości pomijałem chodziło mi tylko jak pętle zadeklarować emotka
21 gru 17:55
razor: twoim sposobem for (int i=2; i<=200; i=i+2) cout << i << " ";
21 gru 17:55
Lukas: dzięki ale to za trudne chyba żeby ogarnąć dam sobie spokój
21 gru 18:31
Dziadek Mróz: Takim podejściem się nie nauczysz programowania. To są najprostsze rzeczy. Wystarczy zacząć myśleć jak programista, krokowo. Każdy kolejny krok jest zależny od poprzedniego. Jak nie wiesz jak napisać program weź kartkę i narysuj jego schemat blokowy i na jego podstawie pisz program. Tamte zadania zrobiłeś w schematach blokowych [20 gru 2014 21:44]?
21 gru 18:42
Dziadek Mróz: Zrobię na początek pierwsze. 1) Wczytać ciąg liczb dodatnich zakończony liczbą niedodatnią. Wydrukować największą liczbę tego ciągu.
21 gru 18:44
Foxal: a tak w ogole to po inzynierce da sie znalesc prace na stanowisku programisty c++?
21 gru 18:46
Lukas: Dziadek teraz wracam do domu z Poznania będę po 23
21 gru 18:46
Dziadek Mróz: Zrobione w JavaBlock: https://dl.dropboxusercontent.com/u/96736379/zad1.jbf Do góry masz strzałkę Play [>] i strzałkę Next [|>] to sobie odpalisz i będziesz mógł prześledzic działanie schematu
21 gru 19:04
Dziadek Mróz: Foxal, C++ częściej brany jest do programowania wszystkiego, szczególnie gier, więc musiałbyś w tym kierunku iść.
21 gru 19:10
asdf: Foxal, po wszystkim mozna, w c++ pisze sie glownie gry i rzeczy, ktore maja dzialac szybko, (np. facebook). Sam jezyk nie wystarcza, musisz tez ogarniac dziedzine, w ktorej chcesz cos robic, jesli gry, przetwarzanie obrazów, to bez matematyki (a zwlaszcza geometrii analitycznej) sie nie obejdzie.
21 gru 21:39
Lukas: )Wczytać ciąg liczb dodatnich zakończony liczbą niedodatnią. Wydrukować największą liczbę tego ciągu. Nie mam pomysłu
21 gru 22:50
asdf: masz liczby: tab[n] = [t0,t1,t2,t3,...,tn−1] Twoje max przyjmij, ze jest w t0 na samym początku, wiadome, że ostatnia (n−1) na bank nie będzie największa, bo niedodatnia ( <−;0> ) na bank nie jest większa od dodatniej ( (0;) ), więc wystarczy iterować od t0 do tn−2, czyli: max = t0; for(i=0;i<n−1;i++) { if(max < ti) { max = ti; } }
21 gru 23:02
Lukas: ale to tablicę. Dajcie coś od początku a nie rzucacie na głęboką wodę.
21 gru 23:05
Dziadek Mróz: Może prościej aby Lukas sam to napisał. Masz pomieszany ciąg odwróconych numerem do dołu klocków drewnianych z cyframi od 1 do 9, masz znaleźć największą wartość na klocku. Jakbyś szukał tej największej wartości wykorzystując pętlę?
21 gru 23:07
asdf: jaka głęboka woda człowieku!...pokazałbym Ci jaką ja miałem głęboką wode 3 tygodnie temu to byś chyba w portki narobił...
21 gru 23:07
Dziadek Mróz: Myśl jak dziecko, nie znasz programowania, ale umiesz liczyć do 9
21 gru 23:07
Lukas: Najpierw bym odwrócił klocki w jedną stronę i już bym znalazł
21 gru 23:12
Dziadek Mróz: Nie możesz odwrócić wszystkich na raz, nie da się, musisz jednego wziąć lub dwa na raz. Moja propozycja: Bierzesz pierwszego oraz drugiego i odwracasz i porównujesz który większy, tego bierzesz do ręki. Bierzesz trzeci i odwracasz i porównujesz z tym w ręku który większy, tego bierzesz do ręki. ... Tak samo się szuka największej papryki, bierzesz pierwszą z brzegu i porównujesz wielkość z innymi.
21 gru 23:16
Lukas: hmm czyli for( int i=1 i<=9 i++) cout << i <<
21 gru 23:19
asdf: to samo (z pominięciem ostatniego, bo wiadome, że jest niedodatnie): max = t0; for(i=0;i<n−1;i++) { if(max < ti) { max = ti; } }
21 gru 23:19
Dziadek Mróz: Co do zadania 1: http://pastebin.com/jAPsXgxM
21 gru 23:29
Lukas: ok
21 gru 23:42
Dziadek Mróz: Równie dobrze można dać inicjalizator max w postaci: int i; cin >> i; if (i > 0) { int max = i; } else { cout << "Błędna wartość!" << endl; return 0; } for( ; ; ) { to samo co poprzednio }
22 gru 10:39
Lukas: zobacz jakie ładne zadania http://www.cs.put.poznan.pl/arybarczyk/7.pdf emotka ?
22 gru 23:29
jakubs: Chciałbym takie na laborkach z programowania
22 gru 23:40
Dziadek Mróz: Zmiana planów do Święta Trzech Króli robicie te zadanka i tu wrzucacie link do paczki (zip) z kodami. Popatrzymy co wypociliście
23 gru 12:59
Lukas: Do 3 króli to ja się mam zamiar tego naumieć, koło mam 14 stycznia
23 gru 13:00
Dziadek Mróz: Jak zrobisz te zadanka sam to będziesz umiał.
23 gru 15:50