Uczę się języka programowania C++ z kurs ze strony cpp0x . pl chciałbym się spytać czy dobrze zrobiłem zadanie (spoiler ): zdj (naprawa błędu)
spoiler start
Zadanie jest na samym dole
http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Pojecie-zmiennej-i-podstawowe-typy-danych/11
spoiler stop
Tak, wykonałeś to poprawnie.
Jaki środowisko jeśli można spytać? Specem nie jestem, ale jak dla mnie to to nie powinno się skompilować - nie deklarujesz typu zmiennej. Chyba, że ktoś mnie oświeci jakim cudem to zadziałało? Kompilator sam zdecydował w czasie kompilacji jakiego typu jest zmienna - automatyczne 'auto'?
Cholera, faktycznie nie ma typu. CodeBlocks jest dziwny, i nie znam go, ale każdy kompilator ma jakieś dziwaczne strony. Ale to jest przesada, skompilować to się nie mogło.
Ten sam kod, też CodeBlocks - nie kompiluje się z powodu braku inicjalizacji zmiennej, więc jednak nie jest do końca dobrze, bo typ musi być podany przy inicjalizacji.
Code::Blocks to środowisko programistyczne, a kompilator to MinGW (Windowsowy port Uniksowego GCC).
To nie jest żaden błąd tylko normalne działanie - w C++11 dodano możliwość nie podawania typu zmiennej jeśli zainicjuje się ją w momencie deklaracji. W takim przypadku kompilator zwyczajnie wydedukuje rzeczony typ z zawartości zmiennej (w tym przypadku int). MinGW będąc Windowsowym forkiem GCC jest w miarę zgodne z najnowszymi standardami.
EDIT: Mea culpa - to by zadziałało gdyby dopisać słowo kluczowe auto na początku :/ Teraz zauważyłem, że z lewej jest oznaczony błędny wiersz i domyśliłem się o co chodzi autorowi wątku. Ogólnie kod jest dobry, brakuje tylko nazwy typu.
Bo zmienna jest typu char czyli znak - jeden, dlatego jest tylko 'P'. Zmienna tekstowa to string.
PS jeżeli nie robisz tego dla hobby to bym sobie odpuścił bo taki progres to się robi w 15 minut a nie 5-6 miesięcy.
Bo "char" to zmienna jedno bajtowa służąca do przechowywania pojedynczych znaków. Musiałbyś zainicjować całą tablicę znaków żeby to zadziałało, w C++ wygodniej jest użyć po prostu zmiennej typu "std::string" (plik nagłówkowy "string").
No i wyrzuć to "#include <stdio.h>" - po co Ci pliki nagłówkowe dla dwóch różnych sposobów obsługi wejścia i wyjścia?
Dym14 - > szkoła , 5 miesięcy temu uczyłem się dla samego siebie
chwilka to "char" mam zmienić na "string" , jeżeli tak to do nic nie daje
To bardzo słabe wytłumaczenie, a jeśli wiążesz z programowaniem jakieś plany na przyszłość to sugerowałbym je szybko zweryfikować - programowanie to umiejętność rozwiązywania problemów, rozwiązywania ich samodzielnie. Pytania jakie aktualnie zadajesz dotyczą rzeczy elementarnych, wystarczyło chwilę ruszyć głową. A jeśli masz słabego nauczyciela to po prostu zakręć się wokół jakiś kursów w necie, darmowych podręczników (megatutorial Xiona) czy po prostu kup dobry podręcznik w księgarni (ostatnio wysypało po empikach książkami, nawet jest kilka pozycji poświęconych C++ 11).
EDIT: Zamienić na typ "string" i włączyć do kodu plik nagłówkowy <string> (little tip: dyrektywa #include ;P)
Chociażby tak:
#include <iostream>
using namespace std;
int main()
string imie;
cout << "Podaj imie: ";
cin >> imie;
cout <<"Twoje imie to : " << imie;
return 0;
Ja pierdziele robiłem tak samo ;/ #include <iostream>
using namespace std;
int main()
string imie;
string nazwisko;
cout << "Podaj imie: ";
cin >> imie;
cout<< "Podaj nazwisko ";
cin >> nazwisko;
cout <<"Twoje imie i nazwisko to : " << imie << nazwisko ;
return 0;
co mam zrobić aby imię i i nazwisko oddzielenie było ?
Czader-Master pokazał ci jak ma to wyglądać, tyle tylko że musisz dodać #include<string> na początku
co mam zrobić aby imię i i nazwisko oddzielenie było ?
Takie najbanalniejsze, co powinno ci to głowy przyjść to :
cout <<"Twoje imie i nazwisko to : " << imie <<" " << nazwisko ;
Czader-Master -> Jezu, rzeczywiście . W sumie to nauczyciel nawet nam nie wspomniał o takim czymś jak string ;d No ale co tam dzięki wielkie za pomoc :)
Tak z zwykłej ciekawości da to się to zrobić z wykorzystaniem tych słów kluczowych auto, break, case, char, continue, default, do, double, else, entry, enum, extern, float, for, goto, if, int, long, register, return, short, sizeof, static, struct, switch, typedef, union, unsigned, void, while ?
Da się tylko pytanie po co?
Kup Symfonię C++ i przeczytaj ją dokładnie, robiąc ćwiczenia, i nie przechodząc dalej dopóki nie skumasz tego co jest na stronie.
napisać program sprawdzający czy liczba jest parzysta, ale tylko z zakresu 1-10 , (programie umieścić wartości)
i wtedy w zależności którą liczbę się wpisze, to pokaże czy jest, czy nie
hmm. wykombinowałem coś takiego ale to źle chyba jest
#include <iostream>
#include <cstdio>
#include <conio.h>
using namespace std;
int main()
;;
int a;
int b;
a == 2,4,6,8,10;
b == 1,3,5,7,9;
cout << "wpisz liczbe ";
cin >> a||b ;
cout << "twoja liczba jest: " << a << cout "parzytsa " << b << cout "nieparzysta" ;
getch ();
return 0;
;;
Mam nadzieje , że rozumiecie o co mi chodzi
Wyrzuć
a == 2,4,6,8,10;
b == 1,3,5,7,9;
Ponieważ jest to błędna inicjalizacja zmiennych
Zadanie możesz rozwiązać na kilka sposobów. Np.
- Deklarujesz jedną zmienną
- prosisz o input od użytkownika
- sprawdzasz czy wprowadzona cyfra mieści się w przedziale
- jeśli powyższe tak to sprawdzasz czy podana cyfra modulo 2 daje 0, wtedy jest liczbą parzystą (matematyka się kłania)
- w zależności od powyższego wypluwasz na ekran czy cyfra jest parzysta czy też nie
Kolejny sposób to coś, co chyba Ty może miałeś na myśli
- deklarujesz i inicjalizujesz tablicę (jedna wystarczy) intów parzystych
- prosisz o input użytkownika
- sprawdzasz (w pętli) czy podana cyfra znajduje się w tablicy
- wypluwasz tak lub nie
a == 2,4,6,8,10;
b == 1,3,5,7,9;
Co według Ciebie robią te dwie linijki?
Gdzie wykonujesz faktyczne sprawdzanie parzystości?
cin >> a||b ;
Co to znaczy?
Spróbuj czegoś takiego:
int a;
cin >> a;
if(a == 2 || a == 4 || a == 6 || a == 8 || a == 10) cout << "parzysta";
else cout << "nieparzysta";
ot, takie skróty myślowe - input, czyli coś co poda użytkownik, czyli cin >> a
[24] toż to niesamowicie brzydki kod i "znacznie mniej" wydajny..
wygoogluj sobie hasło modulo - to są podstawy matematyczne. Bez nich niestety rozpocząć bycie programistą
Czy mając liczbę z przedziału 0-100 będziesz chciał też sprawdzać jej parzystość weryfikując kolejno a == 2 || a == 4 || a == 6 || a == 8 || a == 10 || a == 12 || a == 14 || a == 16 || a == 18 || a == 20....?
Chwyć za Symfonię C++, jak już kiedyś ktoś Ci polecał. Na prawdę.
https://translate.google.pl/#en/pl/input
czyli o wpisanie czegoś na klawiaturce w tym przypadku.
edit:
if co tak dokładnie robi ?
ponownie polecam Symfonię C++, a jeśli nie, to poszukaj kursów w internecie, 'if' to podstawa podstaw jest.
Najszybszy warunek to:
if (a % 2 == 0) cout << a << " jest liczba parzysta.";
else cout << a << " jest liczba nieparzysta.";
Nie rozumiem???
else cout << "To jest liczba nieparzysta albo złe dane";
?????
Ale daj spokój - w [30] masz już podane na tacy rozwiązanie..
Tera druga sprawa mam to zapętlić
I tu rodzi się moje pytanie co dokładnie mam zapętlić ?
Bo wyszedł mi taki potwór
#include <iostream>
#include <cstdio>
#include <conio.h>
using namespace std;
int main()
;
int a;
;do
cout << "Wpisz liczbe : " ;
cin >> a;
if(a == 2 || a == 4 || a == 6 || a == 8 || a == 10 || a>1 && a<=10 ) cout << "To jest liczba parzysta";
else cout << "To jest liczba nieparzysta";
;while
getch ();
return 0;
;
Dla -6 wyskoczy, że liczba jest nieparzysta, a to nieprawda.. :-)
Ponadto - wyrób sobie nawyk robienia nawiasów klamrowych po
if
...
else
...
Bo jeszcze kiedyś popełnisz taką gafę, że po if napiszesz więcej niż jedną linijkę..
Arxel porawiłem ten chytry błąd "To jest liczba nieparzysta albo podales liczbe z poza zakresu od 1 do 10" :D
ok ale jak zrobić to aby program nam kazał następną liczbę wprowadzić
Możesz w tym celu np. wstawić kod w pętlę nieskończoną:
while(true)
//kod, który ma być zapętlony
while(true)
;cout << "Wpisz liczbe : " ;
cin >> a;
if(a == 2 || a == 4 || a == 6 || a == 8 || a == 10 || a>1 && a<=10 ) cout << "To jest liczba parzysta";
else cout << "To jest liczba nieparzysta";
;
?
#include <iostream>
#include <conio.h>
using namespace std;
int main(void)
do
int a;
cout << "Wpisz liczbe : " << endl;
cin >> a;
if(a == 2 || a == 4 || a == 6 || a == 8 || a == 10 ) cout << "To jest liczba parzysta";
else cout << "To jest liczba nieparzysta ";
if ( a>=1 && a<=10 ) cout << " " ;
else cout << "lub zle dane " ;
while (getch() != 27);
return 1;
OK już zrobiłem
f ( imie == string || nazwisko = string || wiek == char ) jak zrobić tak żeby w imieniu i nazwisko można było tylko wpisywać tekst , a w wieku tylko liczby ?
Ja tam się nie znam na C++, ale tu sprawdzasz z warunkiem OR (LUB) - wystarczy, że jedno jest prawdziwe, i wyjdzie prawda w teście. Jeśli chcesz poinformować, że którykolwiek jest zły, zrób OR ale z warunkiem != - czyli jeśli którekolwiek NIE JEST takie jak ma być, wykonujesz kod z klamerek.
string imie, nazwisko;
int wiek;
cin >> imie;
cin >> nazwisko;
cin >> wiek;
Czemu nie?
To forum jest pomocne przy nauce programowania: http://forum.pclab.pl/forum/22-Programowanie/
@ [39] - WAAAAT 0_o
@ [42] - Oj, tak. Zdecydowanie tak. Pewnie zmyliło cię, że do stringa można wpisać liczbę? ;]
Nic nie oszukałeś, program działa prawidłowo.
string (ciąg znaków) może zawierać zarówno cyfry jak i litery i wiele innych znaków.
Na szybko do głowy przychodzi mi takie rozwiązanie:
-wszystkie wartości (wiek, imie, nazwisko) zapisujesz do zmiennych typu string
-dla kazdej ze zmiennych sprawdzasz, czy zawieraja odpowiednie znaki ascii (http://pl.wikipedia.org/wiki/ASCII)
-jesli nie zawieraja, informujesz uzytkownika o bledzie.
Ale niestety, widząc twoje posty, wiem, że nie ogarniesz. :(
Do czego Ci te zadanka? Do szkoły? Nauczyciel nie tłumaczy nic?
Może lepiej nie używać cin, tylko (bodajże) getchar() i sprawdzić po kodzie, czy to cyfra czy litera i w ogóle blokować możliwość dodawania jednych bądź drugich :)
Ale to stwarza wiele innych problemów, jak dodanie też obsługi backspace'u i tak dalej i tak dalej...
Z tym oszukaniem chodziło mi że wyświetla liczby a ma ich nie wyświetlać .
Ale niestety, widząc twoje posty, wiem, że nie ogarniesz. :( zapewne tak bo nauczyciel nawet nam nie mówi o niczym w sumie sam wszystko muszę szukać i kombinować o potem widzicie takie efekty .
-dla każdej ze zmiennych sprawdzasz, czy zawierają odpowiednie znaki ascii
czyli to będę musiał wykorzystać if ?
if( imie == ( odwołanie do acsii ) || nazwisko == ( odwołanie do ascii)) cout balbla bla....
Tak to może mniej więcej wyglądać ?
a druga rzecz zakupiłem sobie Symfonie C++ a więc nie długo was nie będę męczył
Do czego Ci te zadanka? Do szkoły? Tak Nauczyciel nie tłumaczy nic? Tak
#include <iostream>
#include <string>
using namespace std;
int main()
;
string name;
cout << "give me a name: ";
cin >> name;
for(int j = 0 ; j < name.length() ; j++)
;
if(int(name[j]) < 65 || int(name[j]) > 122)
;
cout << "wrong name format, number in a name.";
break;
;
;
system("pause");
;
tak by to wygladalo. jest tez for i break. wygooglach/wybinguj sobie o co chodzi.
W tym ifie chyba chodziło ci o rzutowanie name[ i ] na int, nie całego stringa ;)
'i' w nawiasach kwadratowych daje italic
edit: widzę też się na to złapałeś ;)
Łysy. muszę cię zmartwić ale to ma wyglądać jak ulepszenie tego programu co ja zarobiłem
piotr432, muszę Cię zmartwić, właśnie dałem Ci całkiem sprawne rozwiązanie problemu, jedyne co musisz zrobić, to ogarnąć, gdzie wkleić pętlę for w swój kod (trzykrotnie, dla każdej ze zmiennych), i dwie z tych wklejek odpowiednio zmodyfikować. Przy odrobinie chęci nie powinno to być w ogóle trudne. Wierzę, że dasz radę!
edit: a ja polecam Pythona!
Łysy.-> spoko coś sobie wymyślę z tym co mi napisałeś :) Dzięki wielkie :) A teraz na dobranoc fizyka i symfonia C++ :D
Jakich przerw pomiedzy?
I dlaczego w pierwszym komentarzu napisales ze pierwsze lecą spacje, skoro w petli nizej lecą gwiazdki.
Eee... Jaśniej? Program robi dokładnie to co wynika z kodu (nie z komentarzy), z czym niby jest problem?
nie czytaj komentarzy
chodzi o to żeby była choinka na czubku i zapewne o czymś głupim zapomniałem zmieniając kod
W takim razie faktycznie powinieneś najpierw wypisywać spacje a dopiero potem gwiazdki.
A dokładniej to i spacji a potem n-2i gwiazdek.
#include <iostream>
using namespace std;
int main()
;(klamra ot.)
int n;
cout << "Ile wierszy? ";
cin >> n;
for (int i = 0; i < n ; i++)
;(klamra ot )
for (int j = 1; j < 2 * i - j; j++)
cout << ' ';
for (int j = 0; j < n - i ; j++)
cout << '*';
cout << endl;
(klamra zam) ;
return 0;
; (klamra zam)
jest mały progres
OK zrobiłem :D
#include <iostream>
using namespace std;
int main()
int n;
cout << "Ile wierszy? ";
cin >> n;
for (int i = 0; i < n ; i++)
for (int j = 1; j < 2 * i - j; j++)
cout << ' ';
for (int j = 0; j < 2 * n - 2 * i - 1 ; j++)
cout << '*';
cout << endl;
return 0;
Tak na szybko wklepałem to sobie w C# (C++ nie tknąłbym kijem) - składnia podobna, więc raczej się połapiesz.
http://pastebin.com/DXF5B1dZ
Btw, do wklejania takiego kodu zalecam stosowanie tego i/lub podobnych serwisów. Jest to dużo wygodniejsze a kod przejrzystszy (z podświetlaniem składni).
[63]
Cholera, widzę że trzeba będzie sie przerzucić na Jave/C#.
Mam dość C++ i tej złożoności, a tutaj widzę na chłopski rozum od razu o co chodzi.
Tia, składnia Javy czy C# jest sporo bardziej przejrzysta. Do tego te języki są sporo bardziej "przyjazne" dla użytkownika, bo sporo jest w nich robione automatycznie. Na przykład pozbywanie się niepotrzebnych zasobów - w Javie/C# jest to robione przez automat w tle, w C++ musisz o tym pamiętać i "własnoręcznie" się tym zajmować bo inaczej możesz mieć wycieki pamięci.
C++ jest raczej dla ludzi, którzy wiedzą co robią ;D
A co do kodu - też jest ok, ale z jednym błędem: w pierwszej zagnieżdżonej pętli powinien być warunek j <= 2 * i - j, bo inaczej obcina jedną spację.
polaqu123 - to jeszcze bardziej poprawie Ci humor i powiem, że działa to również w drugą stronę. Pisząc kod w VS masz genialne intellisense, które nie raz potrafiło zafundować mi istny opad szczeny po tym jak wpisałem coś "po chłopsku", a to nie dośc, że się skompilowało to jeszcze działało dokładnie tak jak powinno.
Nie tylko w Visualu - IDE bardziej "javove" (Netbeans, Eclipse i masa innych) też mają całkiem niezłe "podpowiadacze" a do tego mnóstwo pluginów dodających JESZCZE więcej bajerów.
Wróć, nie w pierwszym ale w drugim wierszu -->
Nie dodało początkowej spacji, bo przy i = 1 wchodzisz w "spacjową" pętlę i przy j = 1 warunek j < 2*i - j nie zachodzi -> 1 nie jest mniejsze od 1 ;]
TAKI wydruk dostajesz przy ostrej nierówności? 0_o
EDIT: Aaa, widze że w obu pętlach zaczynasz od j = 0... Wcześniej pętlę ze spacjami zaczynałeś od j = 1, więc nierówność zwracała false.
Czepiam, czepiam, bo takie szczególiki często powodują całkiem spektakularne błędy w największych aplikacjach.
Wiem, bo już trochę ich wydebugowałem ;D
Tia, chociaż na razie bezrobotny... Aaale 3 listopada zaczynam w nowej firmie - ciekawe co z tego wyjdzie ;D
Mam głupie pytanie :D
Dało by radę abyś raz na jakiś czas zobaczył u mnie jakiś program czy coś w tym stylu i zobaczył czy dobrze :) ?
Jak z zarobkami dla początkujących, bo nie podają w ofertach.
Dają chociaż te 2-2,5 na rękę, czy jałmużnę co by nie zdechnąć z głodu w pracy?
To zależy od firmy, miasta/państwa, języka/technologii, zapotrzebowania na ludzi itd.
Ale zwykle ktoś świeżo po studiach, bez konkretniejszego doświadczenia ale orientujący się w jakimś języku może liczyć na 2k zł netto wzwyż. Widziałem też specyficzne oferty pracy jako "młodszy programista" z widełkami 4-6k zł, ale to było w jakimś egzotycznym języku (którego nawet nie pamiętam), więc pewnie ciężko było im znaleźć kogoś obeznanego.
Dlaczego warunki "if" piszesz wcześniej nim użytkownik poda wartość do zmiennej? Kod wykonuje się od góry do dołu, linijka po linijce więc powinieneś robić tak:
//pobranie liczby od użytkownika i przypisanie wartości do zmiennej
//instrukcja warunkowa IF np. if (A <= 0) to...
ale w takim przypadku lepiej byłoby ładować rzeczy do REPEAT UNTIL, czyli "powtarzaj kod póki..." i właśnie byłoby tak, że jeśli A będzie jakieś tam (warunek), to ci będzie powtarzało kod ze środka aż warunek się spełni, czy coś. Albo lepiej użyj DO WHILE, czyli
do
;;
//tu jakis kod
;; while(warunek jakis);
wtedy na luzie sobie zrobisz program, w którym użytkownik będzie zmuszony podać liczby większe niż 0 i będzie spoko.
Proponuję ci zobaczyć w google przykład użycia tego DO WHILE i REPEAT UNTIL i wtedy w nowym projekcie sobie przetestujesz działanie i zrozumiesz jak to działa. To prosta rzecz. A wtedy zmodyfikujesz se swój program rozumiejąc wszystko.
@polaqu123 widziałem oferty pracy dla gości znających PHP lub C++ za NAJNIŻSZĄ KRAJOWĄ! były to oferty na stronie urzędu pracy :D więc teraz już wiesz, że programiści mogą zarabiać od najniższej krajowej do wielotysięcznych pensji, przy czym początkującemu programiście większość osób zaoferuje raczej z 2 tysiaki brutto, może z 2500, 3000 jak poszczęści mu się.
na co ci inne sposoby? To sprawdź w google co to: c++ Goto
4programmers.net/C/Goto
Napiszę ci jak twój kod działa. Zaznaczam, że nie znam C++
Twój kod:
cout << "\n Podaj pierwszy bok: "; //wyswietlenie tekstu
cin >> a; //pobranie wartosci uzytkownika i przypisanie jej zmiennej "a"
if(a<0); //warunke "Jezeli (a jest mniejsza od 0) to... i NIC, koniec, sprawdziło warunek, jednak nic dalej nie robi
else
cout << "\n Wprowadz ponownie : ";
cin >> a;
A i naucz się używania klamr (forum to chyba cenzuruje klarmy więc zastąpię je nawiasami kwadratowymi)
if (warunek)
[
//kod
] else
[
//kod
]
tak chyba w c++ można? Czytelniej jest wtedy. Pamietaj, że jak dajesz instrukcję IF (czyli "jeżeli") to po niej masz napisać kod, który się wykona jeśli warunek zostanie spełniony. Jak nie napiszesz żadnego kodu po warunku IF, to nie wykona się nic (w sensie wykona NIC i przejdzie do dalszych linii kodu).
W twoim przypadku po instrukcji IF mógłbyś użyć funkcji GOTO by przeskoczyć do kodu wyżej, ale Goto chyba nie jest używaną funkcją, tzn. istnieje ona i sprawdza się, ale chyba nikt jej nie używa bo lepiej użyć do while, repeat until itd
Jakbyś pisał kiedyś programy normalne, okienkowe, to wtedy byś sobie w kodzie napisał np. 10 funkcji, które mogą coś zwracać lub nie zwracają niczego, ale wykonują daną rzecz i wtedy byś w instrukcjach warunkowych np. do while, używał funkcji danej.
nie miałem goto a to co podałeś nie działa
czytaj 'else' without a previous 'if'
pastebin.com/AqeuPDMJ
tu napisałem ci przykład jak działają instrukcje IF ELSE i funkcja GOTO. Aż specjalnie dev c++ pobrałem i nie znam c++, ale działać, działa wszystko. A ten przykład banalny jest, łatwo zrozumiesz co i jak działa. A na końcu po wszystkim dałem goto, który odpala kod od miejsca "startujemy:". Dzięki temu przykładowi będziesz mógł sobie zmodyfikować swój kod i wrzucić funkcję GOTO w instrukcji warunkowej.
Rozszerzenie pliku to .c, więc kompilator traktuje kod, jakby był napisany w C a nie C++. Zmień rozszerzenie na .cpp i przebuduj - powinno już ruszyć.
już się udało. Mam nowe zadanie zrobić z gwizdek prostokąt .
Mam coś takiego
http://pastebin.com/cPWaF4fD zastanawiam się jak napisać warunek z gwizdkami
Proste - robisz n pętli, każda zawiera znowu p pętli, przy czym:
- jeśli jest to pierwsza albo n-ta "zewnętrzna" pętla, to w każdej z p "małych" pętli wypisujesz gwiazdkę
- w pozostałych przypadkach gwiazdkę wypisujesz tylko w pierwszej i p-tej pętli, w pozostałych robisz spację
Pierwsza podpowiedź: a w jaki sposób wypisujesz cokolwiek? Popatrz na default.
Druga podpowiedź: switcha masz poprawnego, ale kompletnie nie rozumiem wyrażeń w case'ach. Co string "styczen" ; miało wg ciebie robić? :D
dlaczego podajesz wartość do 'a' a w switchu masz "numer"?
zmien numer na a oraz usuń stringi zamiast których zrób couty
http://pastebin.com/fvW6tw71 jak zrobić warunek aby ta środkowy rządek się przeplatał się sam a żeby to ręczenie nie pisać ?