Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 12:30

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Projekt für C++

Discussion on Projekt für C++ within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2015
Posts: 615
Received Thanks: 161
Projekt für C++

Hallo,
da ich dabei bin mir C++ beizubringen und auch ein Buch besitze, wollte ich fragen was ich programmieren könnte ohne einen GUI zu programmieren, da dies erst weiter hinten im Buch behnandelt wird.

Buch: Der C++ Programmierer von Prof. Dr. Ulrich Breymann

Ich hoffe ihr habt da paar Ideen, und könnt mir helfen da ich kein schimmer hab was ich nebenbei programmieren könnte, denn einfach das Buch lesen bis das Thema GUI behandelt wird habe ich auch keine Lust - Da ich gern auch praktische Erfahrung sammeln möchte
Pylaes is offline  
Old 02/21/2015, 19:43   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Um mich mal selber zu zitieren:

Quote:
Originally Posted by snow View Post
Solltest du einfach ein paar Ideen für kleinere Übungen suchen: Schreib ein Telefonbuch. Der übliche Taschenrechner ist ausgelutscht und man lernt nicht viel dabei.

Besagtes Telefonbuch sollte aus Datensätzen bestehen, in denen z.B. Name, Telefonnummer und Stadt vermerkt sind.
Datensätze sollte der User hinzufügen und löschen können.
Datensätze sollten auch aufgelistet und ausgegeben werden können.
Eine Suchfunktion sollte ebenfalls vorhanden sein, sodass suchen("snow") z.B. 0180 666 666 returnt.

Dinge, die du hierbei benötigst:

- Kontrollstrukturen wie if / else
- Schleifen
- Variablen
- Methoden
- Klassen
- evtl. Exception-Handling

Zusätzlich kannst du dir Gedanken über die zu verwendenden Datenstrukturen machen. Klar kannst du ein einfaches Array verwenden, aber was ist, wenn du einen neuen Eintrag hinzufügst? Wie lange dauert dann die Suche? Lohnt es sich, die Datensätze sortiert zu speichern?
snow is offline  
Thanks
3 Users
Old 02/21/2015, 22:36   #3
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 572
Was auch lustig ist und immer mal wieder Spaß macht sind Interpreter für simple Scriptsprachen zu schreiben.
warfley is offline  
Thanks
2 Users
Old 02/21/2015, 23:05   #4
 
KingwondA's Avatar
 
elite*gold: 312
Join Date: May 2013
Posts: 449
Received Thanks: 45
Ich hab das selbe Buch (Auflage 3) und dort sind doch mehr als genug Aufgaben o.O
KingwondA is offline  
Old 02/22/2015, 06:24   #5
 
elite*gold: 0
Join Date: Feb 2015
Posts: 615
Received Thanks: 161
Quote:
Originally Posted by KingwondA View Post
Ich hab das selbe Buch (Auflage 3) und dort sind doch mehr als genug Aufgaben o.O
Ich hab ebenfalls die 3. Auflage und bin bis jetzt auf keine Aufgabe gestoßen. Bin auf Seite 51 wenn ich mich recht erinnere, vielleicht nehmme ich die Beispiel Aufgaben auch gar nicht wahr und stempel die nur als "Erklärung" ab

@ Snow mir kommt jetzt folgende Frage auf, soll das 'Telefonbuch' so aufgebaut sein, dass man am Anfang der Konsole den Namen eingibt, und dann die Telefonnummer bekommt?

An deinem Beispiel:

Ich gebe 'snow' ein

Console gibt mir dies aus:

Quote:
Name: Snow
Telefonnummer: 0180 666 666
Handynummer: 0180 777 777
Sonstiges: /
Hab ich es richtig verstanden?
Pylaes is offline  
Old 02/22/2015, 14:45   #6

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Wie du es aufbaust, bleibt die überlassen. Sieh es als Übung fürs System Design an.
Überleg dir einfach, wie du eine Telefonbuch-Anwendung aufbauen würdest (Menü mit Suche, Auflistung, Einfügen und Löschen? Welche Daten brauche ich für einen Eintrag?). Dafür brauchst du übrigens keine GUI, die Logik funktioniert auch so und den Rest kann man über die Konsole machen.

Wenn man das alles ohne Hilfsbibliotheken macht, lernt man dabei einiges über Datenstrukturen etc. std::vector, std::array, std::list, std::map etc. kann jeder Idiot benutzen, aber selber rausfinden, wie sie konzipiert sind und was die Vor- und Nachteile sind, ist einiges wert. Das ändert sich nämlich nicht, egal welche Sprache man nutzt.
snow is offline  
Thanks
2 Users
Old 02/22/2015, 16:37   #7
 
elite*gold: 0
Join Date: Feb 2015
Posts: 615
Received Thanks: 161
Also erstmal vielen Dank für deine Hilfe!

Okay, ich hab schon paar Ideen wie ich es aufbauen werde. Ich bin grad im Buch bei den Kontrollstrukturen, soll ich jetzt schon Anfangen oder eher wenn ich alle Sachen die ich brauche im Buch durchgearbeitet habe? Da bin ich mir unsicher, nicht das ich am Ende total verwirrt bin wenn ich schon vorzeitig anfange

Habe noch paar Fragen, und zwar wie ich gelesen hab sollte man nicht using namespace std verwenden, ich hab mir den Thread durchgelesen ich weiß ehrlich gesagt immer noch nicht den Grund da ich mit manches was da geschrieben wird nicht durchblicke, soll ich es trotzdem weglassen (= mit ::std arbeiten) bis ich Erfahrung gesammelt habe um dies zu verstehen?

Bezüglich der Hilfsbibliotheken, ich hab eine Beispiel Aufgabe aus dem Buch gemacht, danach die Lösung angesehen.

Aufgabe:

Quote:
Schreiben Sie ein Programm, das die größtmögliche unsigned int-Zahl (int, long, unsigned long) ausgibt, ohne dass die Kenntnis der systemintern verwendeten Bitanzahl für jeden Datentyp benutzt wird.
Wie ich die Aufgabe gelöst habe:

Code:
#include <iostream>
#include <climits>

int main() {

  cout << "INT_MAX =       " << INT_MAX << '\n';
  cout << "LONG_MAX =      " << LONG_MAX << '\n';
  cout << "UINT_MAX =      " << UINT_MAX << '\n';
  cout << "ULONG_MAX =     " << ULONG_MAX << '\n';
}
Die Lösung:

Code:
#include <iostream>
using namespace std;

int main() {
  unsigned int ui{};
  unsigned long int uli{};
  cout << "max. unsigned int     = " << ~ui << endl;
  cout << "max. unsigned long int= " << ~uli << endl;
  cout << "max. int              = " << (~ui >> 1) << endl;
  cout << "max. long int         = " << (~uli >> 1) << endl;
}
Erst war ich der Auffassung die Aufgabe richtig gelöst zu haben, aber beim lesen deines Post und der Aufgabe aus dem Buch glaube ich komplett die Aufgabe verfehlt zu haben, es wird verlangt ohne die Hilfsbibliothek die Aufgabe zu lösen stimmts?

Aber beim Code der Lösung stelle ich mir folgende Fragen:

Was bedeutet ~ui und ~uli genau? Also das mit unsigned integer und unsigned long integer ist mir klar nur nicht das "~" , ich weiß das es eine Negation ist aber den Begriff selbst und was es bringt bzw. tut verstehe ich nicht so ganz, und wozu bei den zwei Zeilen am Ende die 1 und das in Klammer setzen, stehe grad total auf dem Schlauch
Pylaes is offline  
Old 02/22/2015, 23:13   #8

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Quote:
Erst war ich der Auffassung die Aufgabe richtig gelöst zu haben, aber beim lesen deines Post und der Aufgabe aus dem Buch glaube ich komplett die Aufgabe verfehlt zu haben, es wird verlangt ohne die Hilfsbibliothek die Aufgabe zu lösen stimmts?
Und solche Lösungen werden auf der 50. Seite erwartet? Sinnvoll würde ich das nicht gerade nennen.

Statt unsigned int ui{}; kann man auch unsigned int ui = 0; schreiben.
Kurz gesagt: Das ~ negiert alle Bits.

Ehrlich gesagt würde ich für die Richtigkeit der folgenden Erklärung meine Hand nicht ins Feuer legen. Im Binärsystem gibt es nur die Zustände 0 und 1. Die Zahl 12 z.B. wird zu 1100 im Binärsystem. Diese Zahl würde 4 Bits Speicherplatz benötigen. Da aber nur ganze Bytes (normalerweise 1 Byte = 8 Bit) adressiert werden können, speichert man sie z.B. in einen unsigned char, der i.d.R. 1 Byte groß ist, weshalb UCHAR_MAX auch 2^8 - 1 (wegen der 0) ist. Unser Variable würde man dann nun mit 00001100 darstellen. In diesem Fall haben wir aber eine Variable vom Typ unsigned int, welche auf 32-Bit Systemen in der Regel 4-Byte groß ist. Die Zahl 12 in einer unsigned int Variable wäre dann in etwa 00000000 00000000 00000000 00001100. Wenn wir darauf nun den ~ Operator anwenden, wird der Inhalt der Variable zu 11111111 11111111 11111111 11110011.

Um die Theorie auf dein Beispiel zu beziehen, wenn die Variable 00000000 00000000 00000000 00000000 (= 0 im Dezimalsystem) enthält, was wird die Variable enthalten, nachdem der ~ Operator angewandt wurde? 11111111 11111111 11111111 11111111 - der maximale Wert, den die Variable enthalten kann.

Bei den Variablen mit einem signed Typ erfordert das zusätzliches Shiften mit dem >> Operator. Mit dem >> bzw. dem << Operator kann man Bits verschieben, am Besten kann man sich das mit einem Beispiel veranschaulichen: 00001100 >> 2 = 00000011 und 00001100 << 3 = 01100000. Die Bitshifting-Operatoren haben nichts mit den iostream-Operatoren zu tun! (12 << 2 ist was anderes als std::cout << 2)

Wieso wird das getan? Bei signed Typen steht das erste Bit für das Vorzeichen. Bei einem char zum Beispiel: ~00000000 = 11111111 | die letzten 7 Bits stellen die Zahl dar, 2^7=128, das erste Bit das Vorzeichen also -128.

Praktisch gesehen:
11111111 11111111 11111111 11111111 = signed int min
01111111 11111111 11111111 11111111 = signed int max

Dieses ganze Thema mit Bitoperationen würde ich aber anfangs eher überspringen, da es zwar später durchaus interessant sein kann, aber es dennoch unnötig den Einstieg erschweren kann.
Delinquenz is offline  
Thanks
1 User
Old 02/22/2015, 23:25   #9
 
elite*gold: 0
Join Date: Jun 2009
Posts: 132
Received Thanks: 37
Abgesehen davon, solltest du unsigned int/long und wie sie alle heißen gar nicht verwenden. Benutze (c)stdint.h dort sind Datentypen drin wie uintX_t und intX_t, wobei X für die Anzahl der Bits steht.

int32_t entspräche int.

Alles andere wird dir ab einem gewissen Punkt nur Fehler bereiten.
dasschild is offline  
Thanks
1 User
Old 02/23/2015, 06:31   #10
 
elite*gold: 0
Join Date: Feb 2015
Posts: 615
Received Thanks: 161
Okay ich danke euch, hab es jetzt mit der Negation besser verstanden
Pylaes is offline  
Old 02/23/2015, 08:48   #11
 
_Roman_'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,620
Received Thanks: 237
Quote:
Habe noch paar Fragen, und zwar wie ich gelesen hab sollte man nicht using namespace std verwenden, ich hab mir den Thread durchgelesen ich weiß ehrlich gesagt immer noch nicht den Grund da ich mit manches was da geschrieben wird nicht durchblicke, soll ich es trotzdem weglassen (= mit ::std arbeiten) bis ich Erfahrung gesammelt habe um dies zu verstehen?
So wie ich das bisher verstanden hab ist es ein schlechter Stil, "using namespace std" zu verwenden. Dadurch könnte es zu Konflikten mit anderen namespaces kommen. Außerdem ist es dadurch klarer, welcher Befehl zu welchem namespace gehört. Man kann natürlich auch einzelne Befehle vereinfachen wie "using std::cout" oder ähnliches
_Roman_ is offline  
Thanks
1 User
Reply




All times are GMT +2. The time now is 12:30.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.