PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Programm ("Figuren speichern")



baldi123
14.02.2005, 09:52
hallo,

bitte um Hilfe!!!!!!

die Aufgabenstellung liegt als Attachmet bei!!

danke

MfG
baldi123

FireBird2003
14.02.2005, 10:14
Was hat diese Aufgabe mit AVRs zu tun???

baldi123
14.02.2005, 10:28
darf man hier keine allgemeinen probleme zu C posten?????

MfG
baldi123

Kjion
14.02.2005, 12:12
Beschreib vielleicht einfach mal das Problem das du hast....

baldi123
14.02.2005, 20:43
ich weis einfach nicht was dieses programm machen sollte!!
bzw. wie man so etwas programmieren könnte??

MfG

NumberFive
15.02.2005, 09:32
das programm ist eine mini "DB" um 10 werte zu speicher zu ändern.



void Insert(void)
{
// Liest die Daten einer Figur in die Struktur f1 ein. Zum eigentlichen Einfügen der Daten in das
// Array wird die Funktion InsertRecord aufgerufen. Der Rückgabewert von InsertRecord wird
// In der Funktion Insert() nicht behandelt.
TFigur f;

werte per Tasttaur einlesen;
f.name = <wert>;
f.xpos = <wert>;
f.ypos= <wert>;
f.energie = <wert>;
f. typ= <wert>;

InsertRecord(f);

return;
}

int InsertRecord(struct TFigur f)
{
// Fügt einen neuen Datensatz am Ende des Arrays "figuren" ein
// Rückgabewert InsertOK: 1...Falls der Satz eingefügt werden kann
// 0...Wenn Puffer voll, nicht eingefügt
// -1...Wenn Figur schon vorkommt, nicht eingefügt
// Eingabeparameter f: Strukturvariable f, wird in Array "figuren" eingefügt
// Die Funktion InsertRecord() darf keinerlei Ausgaben machen, da sie auch bei der
// Importfunktion aufgerufen wird.

int InsertOK = 1;
if(ACTLEN<10)
{

for(int p=0;p<ACTLEN;p++)
{
if(strcmp(figuren[p].name,f.name)==0)
{
return -1;
}
}
figuren[ACTLEN] = f;
ACTLEN++;
}
else
{
InsertOK = 0;
}
return InsertOK;

}



ich hoffe es hilft die sieht mir nach einem spiel auf ein schachbrett aus

baldi123
27.02.2005, 16:37
kann mir hier jemand auch noch die restlichen funktionen zeigen!?!?!?
biiitttee

MfG
baldi123

NumberFive
27.02.2005, 17:01
was brauchst du den noch ?

was sagt dein lehrer dazu ?

baldi123
27.02.2005, 17:24
mein lehrer sagt gar nichst dazu!!

ich bräuchte das komplette programm!!!
bitte

habe e schon fast alles!!


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

struct TFigur
{
char name[30]; // Name der Figur
int xpos; // X-Position auf dem Feld (0...1000)
int ypos; // Y-Position auf dem Feld (0...1000)
int energie; // Lebensenergie 0...100
int typ; // A=Mensch Z=Zwerg E=Elb O=Ork M=Magier H=Hobbit
};

//Globale Variable und Konstante
const int ARRLEN = 10; // Länge des Figuren-Array
int ACTLEN = 0; // nächste freie Stelle im Array
int saveit = 0; // Merker: Wenn Änderugen, dann speichern vor Ende
struct TFigur figuren[ARRLEN]; // Figuren-Array
char datei[] = "figur1"; // Name der Datei in der die Datensätze gespeichert werden

// Funktionsprototypen
void Insert(void);
int InsertRecord(struct TFigur);
void Delete(void);
void Save(void);
void Import(void);
void Load(void);
void Display(void);

// Hauptprogramm
void main(void)
{

char iAuswahl;
Load(); // Beim Programmstart eventuell vorhandene Datensätze aus Datei laden

do
{
system("CLS"); // Bildschirm löschen
printf(" Funktion auswaehlen\n");
printf(" ===================\n\n");
printf(" 1...Figur anlegen\n");
printf(" 2...Figur loeschen\n");
printf(" 3...Figuren anzeigen\n");
printf(" 4...Speichern\n");
printf(" 5...Import\n\n");
printf(" 0...beenden\n\n");

printf("Auswahl -> ");
fflush(stdin); // Tastaturpuffer leeren
scanf("%i",&iAuswahl);

switch(iAuswahl)
{
case 1:
Insert();
break;
case 2:
Delete();
break;
case 3:
Display();
break;
case 4:
Save();
break;
case 5:
Import();
break;
case 0:
if (saveit)
{
iAuswahl = 99;
printf("\n\aBitte Daten zuerst speichern!\n");
system("pause");
}
break;
default:
printf("\n\aUngueltige Auswahl!\n");
system("pause");
}

} while (iAuswahl != 0);

printf("\n\nPROGRAMM-ENDE!\n\n");

return;
}

void Insert(void)
{
// Liest die Daten einer Figur in die Struktur f1 ein. Zum eigentlichen Einfügen der Daten in das
// Array wird die Funktion InsertRecord aufgerufen. Der Rückgabewert von InsertRecord wird
// In der Funktion Insert() nicht behandelt.

struct TFigur f1;
int y;

saveit = 1; // Datenbank wird verändert

printf(" Name: ");
scanf("%s",&f1.name);

printf(" Typ: ");
scanf("%s",&f1.typ);

printf(" X-Pos: ");
scanf("%i",&f1.xpos);

printf(" Y-Pos: ");
scanf("%i",&f1.ypos);

printf("Energie: ");
scanf("%i",&f1.energie);

y = InsertRecord(f1);

printf("\nDatensatz eingefuegt - %i Saetze sind vorhanden\n",ACTLEN);
system("pause");
return;
}

int InsertRecord(struct TFigur f)
{
// Fügt einen neuen Datensatz am Ende des Arrays "figuren" ein
// Rückgabewert InsertOK: 1...Falls der Satz eingefügt werden kann
// 0...Wenn Puffer voll, nicht eingefügt
// -1...Wenn Figur schon vorkommt, nicht eingefügt
// Eingabeparameter f: Strukturvariable f, wird in Array "figuren" eingefügt
// Die Funktion InsertRecord() darf keinerlei Ausgaben machen, da sie auch bei der
// Importfunktion aufgerufen wird.

int InsertOK = 1; // Standardvoraussetzung
int ctr; // Kontrollhilfszeichen

if(ACTLEN == 9)
{
InsertOK = 0;
}
else
{
for(int i = 0; i <= ACTLEN; i++)
{
ctr = strcmp(figuren[i].name,f.name);
if(ctr == 0) // Gleichheitsbedingung
{InsertOK = -1; break;}
}
}

// Einfügeprozess
if(InsertOK == 1)
{
ACTLEN++;
figuren[ACTLEN] = f;
}
return InsertOK;
}

void Save(void)
{
// Diese Funktion schreibt den Inhalt des Arrays "figuren" in die Datei
// Es wird angezeigt, wieviele Sätze in die Datei gespeichert wurden
// Der Merker "saveit" wird auf 0 gesetzt

FILE *out;
int i;

out = fopen(datei,"wb");
if (out == NULL)
{
printf("\nDie Datei kann nicht geoeffnet werden! - Keine Saetze geschrieben!");
}
else
{
for (i = 0; i < ACTLEN; i++)
{
fwrite(&figuren[i],sizeof(figuren[i]),1,out);
}
fclose(out);
printf("\nEs wurden %i Datensaetze eingeschrieben\n",i);
saveit = 0;
}

system("pause");
return;
}

void Load(void)
{
// Diese Funktion wird beim Programmstart aufgerufen und liest bereits vorhandene
// Datensätze in das Array "figuren" ein.
// Am Ende wird die Anzahl der gelesenen Sätze angezeigt

FILE *in;
struct TFigur f; // Variable auf TFigur zum Einlesen
int counter = 0;

in = fopen(datei,"rb");
if (in == NULL)
{
printf("\nDie Datei kann nicht geoeffnet werden! - Keine Saetze geladen!");
}
else
{
fread(&f,sizeof(f),1,in);
while(!feof(in))
{
counter++;
figuren[ACTLEN++] = f;
fread(&f,sizeof(f),1,in);
}
fclose(in);
printf("Es wurden %i Datensaetze eingelesen\n",counter);
}

system("pause");
return;
}

void Display(void)
{
// Diese Funktion zeigt die Datensätze im Array "figuren" an
// Am Ende wird die Anzahl der angezeigten Sätze angezeigt

int i;
printf("\nName der Figur Typ XPos YPos Energie\n");
for (i = 0; i < ACTLEN; i++)
{
printf("%-21s",figuren[i].name);
printf(" %c ",figuren[i].typ);
printf("%5i",figuren[i].xpos);
printf("%5i",figuren[i].ypos);
printf("%5i\n",figuren[i].energie);
}
printf("\nEs wurden %i Datensaetze angezeigt!\n",i);
system("pause");
return;
}

void Delete(void)
{
// Es wird der Name der Figur eingelesen. Diese wird dann im Array gesucht.
// Falls sie gefunden wird, wird sie aus dem Array entfernt. Alle Arrayelemente
// rechts des gelöschten Elements werden um eine Position nach links verschoben
// Im Falle des Löschens muss die Variable ACTLEN um eins vermindert werden und
// ebenso muss die Variable "saveit" gesetzt werden

return;
}

void Import(void)
{
// Liest den Namen einer Textdatei (CSV-Datei) ein, in der die einzelnen Werte durch ';' getrennt stehen
// Die Reihenfolge der Werte entspricht der Reihenfolge der Daten in der Struktur
// Die eingelesene Zeichenkette soll an die Funktion Analyse() übergeben werden. Analyse() liefert
// als Rückgabewert die einzelnen Werte in einer Variable vom Typ TFigur
// Zum Einfügen in das Array soll wiederum die Funktion InsertRecord() verwendet werden. Ist das Array
// "figuren" voll (wird durch den Rückgabewert von InsertRecord() angezeigt), dann muss der Importvorgang
// abgebrochen werden

return;
}

struct TFigur Analyze(char t[])
{
// Zerlegt den Eingabestring t in die Komponenten
// ->Name
// ->Typ
// ->XPosition
// ->YPosition
// ->Energie
// und gibt diese in der Strukturvariable RetVal zurück

struct TFigur RetVal;

return RetVal;
}

pebisoft
27.02.2005, 17:40
hallo, ich kann dir nicht weiterhelfen.
gratuliere dir aber zu deinem hervorragenden sauberen programmierstiel in "c". sowas erwarte ich von allen "c"-programmen. mit deiner arbeit könnte man winavr wieder auf die beine helfen. schade das du nicht mit dem avr arbeitest.
mfg pebisoft

baldi123
27.02.2005, 17:47
*freu*

habe es jetzt schon so zimlich fertig, bis auf die "import"-funktion, die wir aber noch nicht machen mussten!!!

danke NumberFive füe deine hilfe

MfG
baldi123

PS: der fertige Code:



// Programm...: figuren.c
// Ersteller...: Baldinger Patrick
// Datum...: 14.02.05
//
// Zweck...: Verwaltung der Figuren-DB
//
//

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

struct TFigur
{
char name[30]; // Name der Figur
int xpos; // X-Position auf dem Feld (0...1000)
int ypos; // Y-Position auf dem Feld (0...1000)
int energie; // Lebensenergie 0...100
int typ; // A=Mensch Z=Zwerg E=Elb O=Ork M=Magier H=Hobbit
};

//Globale Variable und Konstante
const int ARRLEN = 10; // Länge des Figuren-Array
int ACTLEN = 0; // nächste freie Stelle im Array
int saveit = 0; // Merker: Wenn Änderugen, dann speichern vor Ende
struct TFigur figuren[ARRLEN]; // Figuren-Array
char datei[] = "figur1"; // Name der Datei in der die Datensätze gespeichert werden

// Funktionsprototypen
void Insert(void);
int InsertRecord(struct TFigur);
void Delete(void);
void Save(void);
void Import(void);
void Load(void);
void Display(void);

// Hauptprogramm
void main(void)
{

char iAuswahl;
Load(); // Beim Programmstart eventuell vorhandene Datensätze aus Datei laden

do
{
system("CLS"); // Bildschirm löschen
printf(" Funktion auswaehlen\n");
printf(" ===================\n\n");
printf(" 1...Figur anlegen\n");
printf(" 2...Figur loeschen\n");
printf(" 3...Figuren anzeigen\n");
printf(" 4...Speichern\n");
printf(" 5...Import\n\n");
printf(" 0...beenden\n\n");

printf("Auswahl -> ");
fflush(stdin); // Tastaturpuffer leeren
scanf("%i",&iAuswahl);

switch(iAuswahl)
{
case 1:
Insert();
break;
case 2:
Delete();
break;
case 3:
Display();
break;
case 4:
Save();
break;
case 5:
Import();
break;
case 0:
if (saveit)
{
iAuswahl = 99;
printf("\n\aBitte Daten zuerst speichern!\n");
system("pause");
}
break;
default:
printf("\n\aUngueltige Auswahl!\n");
system("pause");
}

} while (iAuswahl != 0);

printf("\n\nPROGRAMM-ENDE!\n\n");

return;
}

void Insert(void)
{
// Liest die Daten einer Figur in die Struktur f1 ein. Zum eigentlichen Einfügen der Daten in das
// Array wird die Funktion InsertRecord aufgerufen. Der Rückgabewert von InsertRecord wird
// In der Funktion Insert() nicht behandelt.

struct TFigur f1;
int y;

saveit = 1; // Datenbank wird verändert

printf(" Name: ");
scanf("%s",&f1.name);

printf(" Typ: ");
scanf("%s",&f1.typ);

printf(" X-Pos: ");
scanf("%i",&f1.xpos);

printf(" Y-Pos: ");
scanf("%i",&f1.ypos);

printf("Energie: ");
scanf("%i",&f1.energie);

y = InsertRecord(f1);

printf("\nDatensatz eingefuegt - %i Saetze sind vorhanden\n",ACTLEN);
system("pause");
return;
}

int InsertRecord(struct TFigur f)
{
// Fügt einen neuen Datensatz am Ende des Arrays "figuren" ein
// Rückgabewert InsertOK: 1...Falls der Satz eingefügt werden kann
// 0...Wenn Puffer voll, nicht eingefügt
// -1...Wenn Figur schon vorkommt, nicht eingefügt
// Eingabeparameter f: Strukturvariable f, wird in Array "figuren" eingefügt
// Die Funktion InsertRecord() darf keinerlei Ausgaben machen, da sie auch bei der
// Importfunktion aufgerufen wird.

int InsertOK = 1; // Standardvoraussetzung
int ctr; // Kontrollhilfszeichen
int p;

if(ACTLEN<10)
{

for(p = 0; p < ACTLEN; p++)
{
if(strcmp(figuren[p].name,f.name) == 0)
{
return -1;
}
}

figuren[ACTLEN] = f;

ACTLEN++;
}
else
{
InsertOK = 0;
}

return InsertOK;

}

void Save(void)
{
// Diese Funktion schreibt den Inhalt des Arrays "figuren" in die Datei
// Es wird angezeigt, wieviele Sätze in die Datei gespeichert wurden
// Der Merker "saveit" wird auf 0 gesetzt

FILE *out;
int i;

out = fopen(datei,"wb");
if (out == NULL)
{
printf("\nDie Datei kann nicht geoeffnet werden! - Keine Saetze geschrieben!");
}
else
{
for (i = 0; i < ACTLEN; i++)
{
fwrite(&figuren[i],sizeof(figuren[i]),1,out);
}
fclose(out);
printf("\nEs wurden %i Datensaetze eingeschrieben\n",i);
saveit = 0;
}

system("pause");
return;
}

void Load(void)
{
// Diese Funktion wird beim Programmstart aufgerufen und liest bereits vorhandene
// Datensätze in das Array "figuren" ein.
// Am Ende wird die Anzahl der gelesenen Sätze angezeigt

FILE *in;
struct TFigur f; // Variable auf TFigur zum Einlesen
int counter = 0;

in = fopen(datei,"rb");
if (in == NULL)
{
printf("\nDie Datei kann nicht geoeffnet werden! - Keine Saetze geladen!");
}
else
{
fread(&f,sizeof(f),1,in);
while(!feof(in))
{
counter++;
figuren[ACTLEN++] = f;
fread(&f,sizeof(f),1,in);
}
fclose(in);
printf("Es wurden %i Datensaetze eingelesen\n",counter);
}

system("pause");
return;
}

void Display(void)
{
// Diese Funktion zeigt die Datensätze im Array "figuren" an
// Am Ende wird die Anzahl der angezeigten Sätze angezeigt

int i;
printf("\nName der Figur Typ XPos YPos Energie\n");
for (i = 0; i < ACTLEN; i++)
{
printf("%-21s",figuren[i].name);
printf(" %c ",figuren[i].typ);
printf("%5i",figuren[i].xpos);
printf("%5i",figuren[i].ypos);
printf("%5i\n",figuren[i].energie);
}
printf("\nEs wurden %i Datensaetze angezeigt!\n",i);
system("pause");
return;
}

void Delete(void)
{
// Es wird der Name der Figur eingelesen. Diese wird dann im Array gesucht.
// Falls sie gefunden wird, wird sie aus dem Array entfernt. Alle Arrayelemente
// rechts des gelöschten Elements werden um eine Position nach links verschoben
// Im Falle des Löschens muss die Variable ACTLEN um eins vermindert werden und
// ebenso muss die Variable "saveit" gesetzt werden

return;
}

void Import(void)
{
// Liest den Namen einer Textdatei (CSV-Datei) ein, in der die einzelnen Werte durch ';' getrennt stehen
// Die Reihenfolge der Werte entspricht der Reihenfolge der Daten in der Struktur
// Die eingelesene Zeichenkette soll an die Funktion Analyse() übergeben werden. Analyse() liefert
// als Rückgabewert die einzelnen Werte in einer Variable vom Typ TFigur
// Zum Einfügen in das Array soll wiederum die Funktion InsertRecord() verwendet werden. Ist das Array
// "figuren" voll (wird durch den Rückgabewert von InsertRecord() angezeigt), dann muss der Importvorgang
// abgebrochen werden

return;
}

struct TFigur Analyze(char t[])
{
// Zerlegt den Eingabestring t in die Komponenten
// ->Name
// ->Typ
// ->XPosition
// ->YPosition
// ->Energie
// und gibt diese in der Strukturvariable RetVal zurück

struct TFigur RetVal;

return RetVal;
}

NumberFive
27.02.2005, 18:47
brauchst du jetzt noch was oder nicht ?

baldi123
28.02.2005, 09:01
nein danke, brauche nichts mehr

MfG
baldi123