Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » frage zu funktion in meinem programm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.10.2014, 22:09 Uhr
Manuel79



ich schreibe gerade ein englisch lernprogramm, hierbei habe ich eine main-quelldatei erstellt in welcher ich die 3 options menüs habe und die einzelnen formel blöcke schreibe ich in extra quell dateien und binde diese einfach als funktion in die main mit ein.
nun habe ich unter den ersten vokabelblock bsp:


Code:
string vokabel [600];

vokabel [0]  = " I am";

vokabel [1] = " ich bin ";

vokabel [2] = " du bist ";



int zähler;

int long punkte = 0;

int lösung = 1;

int zählwerk [100] = {0};


anfang1:



zählwerk[1] ++ ;

system ("cls");

cout << endl << endl << endl;

cout << " ""was bedeutet"" : " << vokabel [0] << " ? " << endl << endl;

Sleep(1000);

cout << " <1> f" << ue << "r : " << vokabel [1] << endl;

cout << " <2> f" << ue << "r : " << vokabel [2] << endl << endl;

cout << " L" << oe << "sung : ";

cin >> zähler;



if (zähler == lösung)
{
    cout << endl << " Richtig !!! " << endl;
    
    
    Sleep (1000);
}

else
{
    cout << endl << " Falsch versuch es erneut." << endl;
    Sleep(1000);
    goto anfang1;
}

if (zählwerk[1] == 1)
{
punkte ++;
}



davon habe ich pro block quell datei ca. 67 untereinander. (wie gesagt bin halt noch blutiger anfänger), jetzt wollte ich unter den 67 if/else funktionen eine notenbewertung abgeben, dieses habe ich mit if funktion versucht:

bsp:

Code:

if (punkte = 1,2,3,4,5,6,7,8,9,10,11)
{
...
}



klappte nicht, habe noch sooo viel versucht, nichts klappte, ich habe bücher gewelst, im internet gesucht, nun habe ich daraus einfach eine switch funktion gemacht
(mit 67 cases)

nun möchte ich mir diesen mörder block nicht unter jede block quelldatei setzen.
wäre es nicht möglich dieses als funktion an zu legen und dan über den funktionsnamen auf jeder quelldatei auf zu rufen ???
oder als headerdatei ?
also wie gesagt ich lerne noch, nehmt mir meine unkenntniss bitte nicht übel, hehe

lg. manuel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.10.2014, 23:26 Uhr
Hans
Library Walker
(Operator)


Hi,

also erst mal zu Deiner if-Konstruktion:
Die funktioniert so auch nicht, sondern Du musst jede Bedingung einzeln überprüfen. Dann noch ein C/C++ Spezifikum, dass immer wieder gern falsch gemacht wird (auch von Profis):

C++:
if (a=1) ...


ist kein Vergleich sondern eine Zuweisung! - Da wird der Variablen a der Wert 1 zugewiesen. Da diese Zuweisung in den Klammern einer if-Abfrage steht, wird jetzt überprüft, ob die Zuweisung wahr ist. Das ist in C/C++ aber immer der Fall. Korrekt muss es so aussehen:

C++:
if (a==1) ...


Also zwei Gleichheitszeichen hintereinander!

Zu Deiner Programmstruktur:
Das ist in der Tat noch etwas umständlich. Ich würde Dir deshalb empfehlen, das Lehrbuch, mit dem Du am besten klar kommst, noch etwas weiter durchzuarbeiten. Anschliessend kannst Du die einzelnen Vokabelpaare jeweils in Dateien packen, die das Programm nach dem Start von der Festplatte in den Speicher holt. Das hat dann auch den Vorteil, dass Du nicht für jede Lektion ein eigenes Programm brauchst, sondern den Anwender entscheiden lassen kannst, welche Lektion er oder sie bearbeiten will. Du musst nur die entsprechenden Dateien zur Verfügung stellen. Aber die lassen sich in der einfachen Version, wie ich sie mir gerade vorstelle, mit einem Texteditor erstellen und könnten etwa so aussehen:

Code:
" I am"; " ich bin "; " du bist "


Das wäre jetzt eine Datenstruktur aus 3 Spalten, wobei der Inhalt jeder Spalte in Anführungszeichen steht und die Spalten durch Semikola getrennt sind. Wenn Du nun definierst, das in der ersten Spalte der englische Begriff steht und in der zweiten die korrekte Übersetzung, hast Du das wesentliche Gerüst schon fertig. Die Anzahl der Zeilen wird nicht vorgegeben, sondern ergibt sich aus den Vokabellisten. Später kannst Du dann in weiteren Spalten entweder falsche Übersetzungen ablegen oder auch weitere Bedeutungen. Aber das führt im Augenblick zu weit. Wichtiger ist erst mal, wie man die Daten aus einer Datei in den Speicher bekommt, so dass das Programm damit arbeiten kann.

Und zum Schluss noch:
Da es hier jetzt nicht mehr um Dinge geht, die vom Betriebssystem oder Compiler abhängigen, sondern um Probleme mit der Programmiersprache, hab ich den Beitrag entsprechend verschoben.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 24.10.2014 um 00:22 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.10.2014, 09:59 Uhr
~Manuel79
Gast


bitte wie würde der code aussehen wenn man die einzelnen spalten definiert, das würde mich sehr interressieren.
ausserdem würde es mir unglaublich viel arbeit ersparen und es würde mir noch eine möglichkeit einräumen an die ich so noch garnicht gedacht habe.
danke für die hilfe !!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.10.2014, 23:16 Uhr
Hans
Library Walker
(Operator)


Hi,

ich hab hier mal ein kleines Programm gebastelt, dass eine Textdatei zeilenweise liesst und ausgibt.

C++:
/* Datei:  getline.cpp

   Programmkopf, der Auskunft über den Sinn und Zweck dieser Datei gibt.
*/


#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
  ifstream in; // Input
  string DateiName;  
  
  cout << "Dateiname: ";
  cin  >> DateiName;
  
  // Datei öffnen
  in.open(DateiName.c_str(), ios::in);
  if (!in)
     { cerr << "Datei kann nicht geöffnet werden." << endl;
       return 1;
     }
  char str[255];

  while (in)
      { in.getline(str, 255);  
        if (in) cout << str << endl;
      }
  in.close();
  
  return 0;
} // main




Dazu eine Datei mit Vokabeln, entsprechend obiger Überlegung:

Code:
I am; ich bin
you are;  du bist
he is; er ist
she is; sie ist
it is; es ist
we are; wie sind
you are; ihr seid
they are; sie sind



Anstelle der Ausgabe müsste man in der while-Schleife die gelesene Zeile in ihre Bestandteile zerlegen und diese in einer entsprechenden Datenstruktur ablegen, die etwa so aussehen könnte:

C++:
struct VOKABELN
{ string englisch,
         deutsch;
} Vokabel;



welche dann z.B. in einem Vector verwaltet wird, also:

C++:
#include <vector>
...
vector <Vokabel>;



Wie man das genau macht, darfst Du aber selbst heraus finden.
Aufgrund Deines Codes oben (und dem Beitrag im anderen Thread) nehme ich an, dass Du noch ziemlich am Anfang stehst und von dem, was ich hier geschrieben habe nur einen Bruchteil verstehst. Das sollte Dich aber nicht stören! - Das Beispielprogramm funktioniert so wie es da steht. Für den Rest, d.h. wie man es entsprechend der Vorschläge erweitert, wirst Du noch das eine oder andere dazu lernen müssen. Vielleicht fällt Dir dabei auch noch eine bessere Lösung ein als mir.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 24.10.2014 um 23:17 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.10.2014, 10:47 Uhr
Manuel79



hey das ist hervorragend, wenn ich das richtig verstanden habe, öfnest du einen ifstream um txt dateien ein zu lesen, du fragst nach dem dateinamen und liesst diese in das char arry ein.

mit cerr machst du eine fehlerausgabe und gibst mit return -1 an windows als fehlermeldung zurück in der if funktion.

die whileschleife liest so lange ein wie sie vokabeln findet und macht dabei ein cout,

das ist ganz große klasse, dankeschöhn.

ich habe mich schon damit beschäftigt txt datein schreiben und lesen zu lassen.

ich werde an deinem quelltext arbeiten, ich weiß das es die möglichkeit gibt zeilenweise zu lesen, demnach könnte ich zwei char arrys anlegen um mit der deutschen und der englischen vokabel zu arbeiten und könnte so wieder in die fragestellung gehen und das zweite char arry wäre in dem moment die lösung.

danke schön !!!

wenn ich es bearbeitet habe werde ich es posten
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.10.2014, 11:24 Uhr
Manuel79



nein den dateinamen liest du in das string ein sry
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.10.2014, 11:29 Uhr
Manuel79




C++:
struct VOKABELN
{ string englisch,
         deutsch;
} Vokabel;



hier würdest du demnach die vokabeln den einzelnen stings zuweisen.


C++:
#include <vector>
...
vector <Vokabel>;



nur könntest du bitte hier nochmal etwas genauer drauf eingehen, also ich glaube wenn man dieses hier macht eine #include verweist man auf eine datei.h, demnach tut vector etwas, und du bindest in extra ein, was genau macht vector
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.10.2014, 15:45 Uhr
Hans
Library Walker
(Operator)


Hi,

ganz kurz nur: vector ist eine STL-Klasse, die es einem ermöglicht, mit dynamischen Arrays zu arbeiten, also solchen, bei denen erst zur Laufzeit des Programms klar wird, wieviel Speicher sie benötigen. Sie kümmert sich selbst um die Speicherverwaltung, d.h. als Anwender der Klasse braucht es einem nicht zu interessieren, wieviel Speicher ein Array belegt. Mein Vorschlag ist nun, ein Array der Datenstruktur, also aus der struct-Konstruktion zu erstellen.

Ich hab bisher hauptsächlich mit C gearbeitet, das diese Möglichkeit nicht kennt. Aber nur wenig mit C++ und der STL, so dass ich mir die Details selber erst noch genauer erarbeiten muss. Wenn Du da also nicht durchblickst, ist das kein Drama, denn die STL ist sehr umfangreich. Um sie wirklich voll und ganz praktisch nutzen zu können, ist es nötig, das Objektorientierte Paradigma und auch die Template-Metaprogrammierung zumindest im Prinzip verstanden zu haben. Aber das sind fortgeschrittene Themen, um die man sich als Anfänger lieber noch nicht kümmern sollte, weil man sonst möglicherweise nicht mehr durchblickt.

Evtl. findest Du hier im Forum noch ein paar Hinweise und Tipps, wie man mit vector arbeitet, ansonsten guck in Dein Buch. Wenn Du bei den gegebenen Erklärungen aber (noch?) nicht durchblickst, heb es Dir für später auf.

Soweit mal dazu, jetzt bin ich erst mal weg.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.10.2014, 21:28 Uhr
~Manuel79
Gast


Danke für die Erklärung !!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: