Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C++ rozkmina


Rekomendowane odpowiedzi

Opublikowano

Cześć. Właśnie rozpocząłem naukę programowania i ogólnie korzystam z kursu chyba najbardziej mi znanego

http://cpp0x.pl

 

Mam rozkminę nad tym tematem ,a właściwie z zadaniem na samym dole:

 

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Pojecie-zmiennej-i-podstawowe-typy-danych/11

 

W zadaniu chłopak napisał coś takiego:

 

Mamy następujący kod:

#include <iostream>
int main()
{
   std::cout << "Liczba = " << nieznana << std::endl;
   return 0;
}

 

Dalej napisał ,że program wyświetli nam błąd kompilacji ,a jeszcze dalej

 

Popraw program tak, aby się skompilował i wypisał na ekranie liczbę [b]123[/b]. W programie nie wolno usuwać ani zmienić żadnej istniejącej linijki.

 

Trochę łamię prawa autorskie ,no ale nic. Niech to umknie.

 

Rozkminiam ogólnie nad tym czy robie to dobrze i czy w ogóle zrozumiałem o co chodzi w tych jak on to nazwał "Podstawowych typach danych".

Rozkmina polega na tym ,że wg autora tekstu na konsoli ma się wyświetlić liczba 123

 

Mi po edytowaniu kodu wyświetla się Liczba = 123

 

O to dokładnie chodzi ?

Mój kod po edycji wygląda w następujący sposób:

 

#include <iostream>
#include <conio.h>
int main()
{

   int nieznana = 123;


std::cout << "Liczba = " << nieznana << std::endl;
   getch();
   return 0;
}

 

Czekam na odpowiedź. Pozdrawiam

hersygna.png
Opublikowano

Tak, o to dokładnie chodzi.

 

Rozważmy następujące twierdzenie:

 

Zdanie Z1 zawiera liczbę 123.

 

Zauważmy, iż twierdzenie to będzie prawdziwe dla zdań Z1 równych:

"123"

"liczbę 123"

"asdfsdfsda 123 fdsafdsfds"

 

Twoje rozwiązanie zdania domowego wypisało na ekran liczbę 123. Nie ma co do tego najmniejszych wątpliwości.

Ponadto wypisało również trochę innych rzeczy.

 

Co ciekawe, jedno z wielu innych rozwiązań tego zadania wyglądałoby:

 


#include <iostream>
#include <conio.h>
int main()
{

   char nieznana[] = "123";


std::cout << "Liczba = " << nieznana << std::endl;
   getch();
   return 0;
}

 

Albo:

 

#include <iostream>
#include <conio.h>
int main()
{

   const char *nieznana = "123";


std::cout << "Liczba = " << nieznana << std::endl;
   getch();
   return 0;
}

 

Jak i również:

 

#include <iostream>
#include <conio.h>
#define nieznana 123 
int main()
{

std::cout << "Liczba = " << nieznana << std::endl;
   getch();
   return 0;

Ta sygnatura jest pusta.

Opublikowano

A więc udało się :)

Nie chcę od początku robić błędów i się zastanawiałem nad tym wyrazem w konsoli "Liczba".

Jedyne co pozostało to podziękować no i oczywiście like zostawiam ;)

 

Pozdrawiam

hersygna.png
Opublikowano

Ja jeszcze chciałem dodać że nie ma co się męczyć z std:: , napisz sobie pod "includami" :

using namespace std;

I zamiast np. std::cout, std::cin, std::endl , będziesz pisał samo cout, cin,endl ułatwi Ci to pisanie. Np. :

#include <iostream>
#include <conio.h>
#define nieznana 123
using namespace std;
int main()
{
cout << "Liczba = " << nieznana << endl;
getch();
return 0;

 

A i wiem, że w tym kursie jest pisane std, ale naprawdę nie widzę potrzeby uczenia się złych nawyków, wystarczy, że będziesz miał zawsze w głowię powyższą linijkę.

Opublikowano
nie widzę potrzeby uczenia się złych nawyków

a ja widzę potrzebę wiedzy, co należy do zbioru nazw std::

przynajmniej podczas nauki

 

@top.

Powinieneś być w stanie wydedukować, że ten dopisek "Liczba: " na początku linii nie spowoduje drastycznego spadku poprawności wykonania zadania.

Powinieneś wiedzieć jakie cele ma zadanie i samemu myśleć, czy się je już spełniło.

Opublikowano

@UP

Nie do końca chodzi o potrzebę wiedzy.

- - - -

Oj zdziwiłbyś się jakie drobne rzeczy na standardowym wyjściu potrafią ci zawalić maturę z informatyki xD

 

 

 

Ja jeszcze chciałem dodać że nie ma co się męczyć z std:: , napisz sobie pod "includami" :

using namespace std;

I zamiast np. std::cout, std::cin, std::endl , będziesz pisał samo cout, cin,endl ułatwi Ci to pisanie. Np. :

#include <iostream>
#include <conio.h>
#define nieznana 123
using namespace std;
int main()
{
cout << "Liczba = " << nieznana << endl;
getch();
return 0;

 

A i wiem, że w tym kursie jest pisane std, ale naprawdę nie widzę potrzeby uczenia się złych nawyków, wystarczy, że będziesz miał zawsze w głowię powyższą linijkę.

 

Ja chciałbym dodać, że jedynym złym nawykiem jaki można sobie wyrobić w tym wątku, to czytanie takich postów.

 

Namespace'y mają jedną jedynną powinność: ukrycie nazw z globalnej przestrzeni. Nie robią *nic* poza tym i dokładnie do tego służą.

 

Gdybyś programował odrobinę dłużej zorientowałbyś się, iż istnieją mistyczne sposoby na korzystanie z większej ilości bibliotek, niż tylko standardowa ( std ).

 

Aby zapobiec kolizji nazw z różnych zewnętrznych, niezwiązanych ze sobą, bibliotek, w C++ zostały wprowadzone przestrzenie nazw.

 

Wyrażenie " using " zostało wprowadzone właściwie jako lukier programistyczny. I tak naprawdę, "using namespace std;" przeczy pierwszej przyczynie dla których idea przestrzeni nazw została powołana.

 

W istocie, złym nawykiem jest z niego korzystać, gdyż znacznie zmniejsza przejrzystość kodu ( z przez to zwiększa kosz "maintance"u kodu ).

 

Zaleca się raczej - dla wygody programisty - wykorzystywanie sprecyzowanych fragmentów namespace'u ( jak "using std::cout" czy "using std::vector" ), a i tak wyłącznie w obrębie funkcji czy klasy, by niepożądanie nie upubliczniać w żadnym innym miejscu.

Ta sygnatura jest pusta.

  • 3 tygodnie później...
Opublikowano

Tak, o to dokładnie chodzi.

 

Rozważmy następujące twierdzenie:

 

Zdanie Z1 zawiera liczbę 123.

 

Zauważmy, iż twierdzenie to będzie prawdziwe dla zdań Z1 równych:

"123"

"liczbę 123"

"asdfsdfsda 123 fdsafdsfds"

 

Twoje rozwiązanie zdania domowego wypisało na ekran liczbę 123. Nie ma co do tego najmniejszych wątpliwości.

Ponadto wypisało również trochę innych rzeczy.

 

Co ciekawe, jedno z wielu innych rozwiązań tego zadania wyglądałoby:

 


#include <iostream>
#include <conio.h>
int main()
{

char nieznana[] = "123";


std::cout << "Liczba = " << nieznana << std::endl;
getch();
return 0;
}

 

Albo:

 

#include <iostream>
#include <conio.h>
int main()
{

const char *nieznana = "123";


std::cout << "Liczba = " << nieznana << std::endl;
getch();
return 0;
}

 

Jak i również:

 

#include <iostream>
#include <conio.h>
#define nieznana 123
int main()
{

std::cout << "Liczba = " << nieznana << std::endl;
getch();
return 0;

 

Mam pytanie do szanownej użytkowniczki, mianowicie dlaczego używasz :

- return 0

- getch()

razem, w powyższych rozwiązaniach? Z moich skromnych wiadomości jedno i drugie czeka na naciśnięcie znaku aby zamknąć konsole.

Opublikowano

@Scalac

 

Jak wyżej.

 

Ponieważ Code::Blocks ( lub inne twoje IDE ) robi to za ciebie, odpalając twoją aplikację przez console_runner'a.

 

Odpalaj aplikację "na surowo" ( nie z poziomu Build & Run w IDE ); zobaczysz jak to wygląda bez czekania na input użytkownika.

Ta sygnatura jest pusta.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...