Autor Thema: Ein kleines Rechen Programm in C geschrieben  (Gelesen 4599 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Hans

  • Sr. Member
  • ***
  • Beiträge: 462
  • Bewertung der Beiträge: 0
  • Geschlecht: Männlich
    • Profil anzeigen
Ein kleines Rechen Programm in C geschrieben
« am: Juni 09, 2005, 18:28:06 »
Hi ich arbeite mich der zeit unteranderen mal so richtig in C ein und dachte mir ich schreib mal ein kleines Programm in C ins Forum

1: /* hypothek.c – Berechnet Darlehens-/Hypothekenzahlungen. */
2:
3: #include <stdio.h>
4: #include <math.h>
5: #include <stdlib.h>
6:
7: int main(void)
8: {
9: float betrag, rate, zahlung;
10: int laufzeit;
11: char ch;
12:
13: while (1)
14: {
15: /* Darlehensdaten einlesen */
16: puts("\nGeben Sie die Höhe der Hypothek ein: ");
17: scanf("%f", &betrag);
18: puts("\nGeben Sie die jährliche Zinsrate ein: ");
19: scanf("%f", &rate);
20: /* Anpassung für Prozentangaben . */
21: rate /= 100;
22: /* Anpassung für die monatliche Zinsrate . */
23: rate /= 12;
24:
25: puts("\nGeben Sie die Darlehensdauer in Monaten an: ");
26: scanf("%d", &laufzeit);
27: zahlung = (betrag * rate) / (1 – pow((1 + rate), -laufzeit));
28: printf("Ihre monatliche Belastung beträgt %.2f DM.\n",zahlung);
29:
30: puts("Wünschen Sie eine weitere Berechnung (j oder n)?");
31: do
32: {
33: ch = getchar();
34: } while (ch != 'n' && ch != 'j');
35:
36: if (ch == 'n')
37: break;
38: }
39: return(0);
40: }


Es handelt sich hierbei um einen Hypotheken rechner
Viel spaß bei nach Progen

Gruß Hans
"Wir haben Computer Erfunden um Probleme zulösen die wir ohne Computer gar nicht hätten"
Hauptfehler Quelle Nummer 1 ist der USER

Offline dia5

  • Newbie
  • *
  • Beiträge: 50
  • Bewertung der Beiträge: 0
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #1 am: Juni 12, 2005, 09:36:15 »
Hi finde ich gut was du da machst aber braucht man da nich viel geduld um soetwas zuerstellen.Also ich glaube ich hätte das zeug nich dazu.

Offline Hans

  • Sr. Member
  • ***
  • Beiträge: 462
  • Bewertung der Beiträge: 0
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #2 am: Juni 12, 2005, 15:09:20 »
Hi

Vielen Dank

Muss gestehen das kostet schon manchmal richtig zeit aber macht Spaß

dieses Programm habe ich aber nur von einen Übungsbuch abgeschrieben und ein bisschen umgearbeitet

Gruß Hans
"Wir haben Computer Erfunden um Probleme zulösen die wir ohne Computer gar nicht hätten"
Hauptfehler Quelle Nummer 1 ist der USER

Offline Spirit

  • Newbie
  • *
  • Beiträge: 6
  • Bewertung der Beiträge: 0
  • Geschlecht: Männlich
    • Profil anzeigen
    • Meine Seite
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #3 am: Dezember 14, 2005, 00:45:36 »
Hi
und hier ein kleines Datenbankprogramm von mir :-P


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <dos.h>

#define A_STR_MAX 50  //
#define B_STR_MAX 50

struct person_ds {
   char name[A_STR_MAX];
   char vname[A_STR_MAX];
   char strasse[A_STR_MAX];
   int  plz;
   char stadt[A_STR_MAX];
   int  tel;
   int  fax;
   int  p_id;
};
int pers_count;            //Koëè÷åñòâî Àäðåñîø
struct person_ds *adrs;      //Óêàçàòåëü ía ïåðåìåííóþ Àäðåñîø


struct buch_ds {
   char name[B_STR_MAX];
   char autor[B_STR_MAX];
   char isbn[15];           //ïðèìåð: 3-8272-6812-5
   char info[200];
   int  vorrat;
   int  b_id;
};
int buch_count;            //Koëè÷åñòâî Kíèã
struct buch_ds *buchr;      //Óêàçàòåëü ía ïåðåìåííóþ Kíèã

//ñòðóêòóðà àíòðàãà
struct auftrag_ds {
   int  p_id;
   int  b_id;
   int  outzahl;
   char outdatum[11];
   char indatum[11];
   int  auftrag_id;
};

int aufraege_count;            //Koëè÷åñòâî àíòðàãîâ
struct auftrag_ds *aufraege;   //Óêàçàòåëü ía ïåðåìåííóþ àíòðàãîâ

    /*  Binäre Suche nach String s in adrs                    */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des nächstgrösseren Elements             */
int p_BinSuche( char s[50] )
{
   int unten=0, oben=pers_count, mitte;
   if ( strcmp(s, adrs[unten].name)<=0 )
      //Wenn s keiner oder gleich ...[0].name ist
      return 0;
   else
   {
      while( oben - unten > 1 )
      {
         mitte = (oben-unten)/2;
         if ( strcmp(s, adrs[unten+mitte].name) == 0 )
         {
            unten += mitte;
            oben = unten;
         }
         if ( strcmp(s, adrs[unten+mitte].name) > 0 )
            unten += mitte;
         else
            oben = unten + mitte;
      }
      if ( strcmp(s, adrs[oben-1].name) == 0 )
         oben--;
      return oben;
   }
}

    /*  Binäre Suche nach String s in buchr                    */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des nächstgrösseren Elements             */
int b_BinSuche( char s[50] )
{
   int unten=0, oben=buch_count, mitte;
   if ( strcmp(s, buchr[unten].name)<=0 )
      //Wenn s keiner oder gleich ...[0].name ist
      return 0;
   else
   {
      while( oben - unten > 1 )
      {
         mitte = (oben-unten)/2;
         if ( strcmp(s, buchr[unten+mitte].name) == 0 )
         {
            unten += mitte;
            oben = unten;
         }
         if ( strcmp(s, buchr[unten+mitte].name) > 0 )
            unten += mitte;
         else
            oben = unten + mitte;
      }
      if ( strcmp(s, buchr[oben-1].name) == 0 )
         oben--;
      return oben;
   }
}

    /*  Suche nach Zahl s in aufraege                   */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des letzten Elements             */
int a_Suche( int s )
{
   int unten=0, oben=aufraege_count, mitte;
   for ( mitte = unten; mitte < oben; mitte++ )
      if ( s == aufraege[mitte].auftrag_id )
         return mitte;
   return oben;
}

    /*  Suche nach Zahl s in adrs                   */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des letzten Elements             */
int p_IDSuche( int s )
{
   int unten=0, oben=pers_count, mitte;
   for ( mitte = unten; mitte < oben; mitte++ )
      if ( s == adrs[mitte].p_id )
         return mitte;
   return oben;
}

    /*  Suche nach Zahl s in buchr                   */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des letzten Elements             */
int b_IDSuche( int s )
{
   int unten=0, oben=buch_count, mitte;
   for ( mitte = unten; mitte < oben; mitte++ )
      if ( s == buchr[mitte].b_id )
         return mitte;
   return oben;
}

// Vergleich zweier Adressen nach dem Namen
// für qsort
int p_vgl( const void* p1,const void* p2 )
{
   struct person_ds* adr1,*adr2;
   adr1=( struct person_ds* )p1;
   adr2=( struct person_ds* )p2;
   return strcmp( adr1->name, adr2->name );
}

// Vergleich zweier Buecher nach dem Namen
// für qsort
int b_vgl( const void* b1,const void* b2 )
{
   struct buch_ds* buch1,*buch2;
   buch1=( struct buch_ds* )b1;
   buch2=( struct buch_ds* )b2;
   return strcmp( buch1->name, buch2->name );
}

// Vergleich zweier Aufträde nach dem Namen
// für qsort
int a_vgl( const void* a1,const void* a2 )
{
   struct auftrag_ds* auftrag1,*auftrag2;
   auftrag1=( struct auftrag_ds* )a1;
   auftrag2=( struct auftrag_ds* )a2;
   if ( auftrag1->auftrag_id < auftrag2->auftrag_id )
      return -1;
   if ( auftrag1->auftrag_id > auftrag2->auftrag_id )
      return 1;
   if ( auftrag1->auftrag_id == auftrag2->auftrag_id )
      return 0;
}

//########################################################################

void p_ausgabe();
void p_ausgeben(struct person_ds adr, int _select);
void b_ausgabe();
void b_ausgeben(struct buch_ds buch, int _select);

/*char* string_einlesen()
{
   char* str;


   return str;
}*/


// Einlesen einer Adresse ueber die Tastatur
struct person_ds p_einlesen()
{
   struct person_ds adr;
   char str[100];
   strcpy(str, " ");
   printf( "\n" );
   printf( "Name    : " );
      gets( str );
      strcpy(adr.name, str);
   printf( "Vorname : " );
      gets( str );
      strcpy(adr.vname, str);
   printf( "Strasse : " );
      gets( str );
      strcpy(adr.strasse, str);
   printf( "PLZ     : " );
      scanf("%d", &(adr.plz));
      fflush( stdin );
   printf( "Stadt   : " );
      gets( str );
      strcpy(adr.stadt, str);
   printf( "Telefon : " );
      scanf("%d", &(adr.tel));
      fflush( stdin );
   printf( "Telefax : " );
      scanf("%d", &(adr.fax));
      fflush( stdin );
   srand( (unsigned)time( NULL ) );
      adr.p_id = rand();

   return adr;
}

// Einlesen eines Buches ueber die Tastatur
struct buch_ds b_einlesen()
{
   struct buch_ds buch;
   char str[100];
   strcpy(str, " ");

   printf( "\n" );
   printf( "Buchname    : " );
      gets( str );
      strcpy(buch.name, str);
   printf( "ISBN        : " );
      gets( str );
      strcpy(buch.isbn, str);
   printf( "Autor       : " );
      gets( str );
      strcpy(buch.autor, str);
   printf( "Beschreibung: " );
      gets( str );
      strcpy(buch.info, str);
   printf( "Vorrat      : " );
      scanf( "%d", &(buch.vorrat) );
      fflush( stdin );
   srand( (unsigned)time( NULL ) );
      buch.b_id = rand();

   return buch;
}

// Einlesen eines Auftrags ueber die Tastatur
struct auftrag_ds a_einlesen()
{
   struct auftrag_ds auftrag;
   char s[50];
   char tmp[11];
   int k=0;
   char taste;
   /*/ fur TCP
   struct date d;
   getdate(&d);
   strcpy(tmp,(char*)&d.da_mon);strcat(tmp,"/");
   strcat(tmp,(char*)&d.da_day);strcat(tmp,"/");
   strcat(tmp,(char*)&d.da_year);
   // für VC++-----*/
   _strdate( tmp );
   //--------------
   strcpy(auftrag.outdatum, tmp);
   strcpy(auftrag.indatum, "__/__/__");
   while( taste != 'j' ) // P_ID für den auftrag vestlegen
   {   
      p_ausgabe();
      printf( "\nName eingeben: " );
         scanf( "%s", s );
         fflush( stdin );
      k = p_BinSuche(s);

      if ( strcmp(adrs[k].name, s) == 0 ){
         printf("\n");
            p_ausgeben( adrs[k], 2); taste = ' ';
         while((taste != 'j') && (taste != 'n'))
         {
            printf( "\nDie Person %s ins Auftrag aufnemmen? j/n:",s);
                taste = getch();
            if ( taste == 'j' )
               auftrag.p_id = adrs[k].p_id;
            printf("\n\n");
      }}
      else
         printf( "\nName %s nicht vorhanden\n\n", s );
   }
   taste = ' '; k=0;
   while( taste != 'j' ) // B_ID für den auftrag vestlegen
   {
      b_ausgabe();
      printf( "\nBuchnamen eingeben: " );
         scanf( "%s", s );
         fflush( stdin );
      k = b_BinSuche(s);

      if ( strcmp(buchr[k].name, s) == 0 )
      {
             printf("\n");
         b_ausgeben( buchr[k], 2);
         if (buchr[k].vorrat>0)
         {
            taste = ' ';
            while((taste != 'j') && (taste != 'n'))
            {
               printf( "\nDas Buch %s ins Auftrag aufnemmen? j/n:",s);
                  taste = getch(); //scanf( "%c", taste );
                  //fflush( stdin );
               if ( taste == 'j' )
                  auftrag.b_id = buchr[k].b_id; printf("\n");
            }
         }
         else
            printf( "\nBuch %s ist momentan nich nicht vorretig\n\n", s );
      }
      else
         printf( "\nBuchname %s nicht vorhanden\n\n", s );
   }
   int i;
   do
   {
      printf( "\nWieviele Buecher werden ausgegeben : " );
         scanf( "%d", &i );
      if ( i>buchr[k].vorrat )
         printf("\nEs koenen nur %d Buecher ausgegeben werden!\n", buchr[k].vorrat );
      else
         break;
   }while(1);
   auftrag.outzahl=i;
   buchr[k].vorrat = buchr[k].vorrat - auftrag.outzahl;

   srand( (unsigned)time( NULL ) );
   auftrag.auftrag_id = rand();

   //int  b_id
   return auftrag;
}

// Ausgeben einer Adresse auf den Bildschirm
void p_ausgeben(struct person_ds adr, int _select)
{
   // _select = 0, or _select = 1, or _select = 2
   int i;
   char tmp_name[50];
   if (strlen(adr.name)>13){
      for (i=0; i<13; i++ )
         tmp_name = adr.name;
      tmp_name = '\0';}
   else
      strcpy(tmp_name, adr.name);
   char tmp_vname[50];
   if (strlen(adr.vname)>12){
      for (i=0; i<12; i++ )
         tmp_vname = adr.vname;
      tmp_vname = '\0';}
   else
      strcpy(tmp_vname, adr.vname);
   char tmp_strasse[50];
   if (strlen(adr.strasse)>14){
      for (i=0; i<14; i++ )
         tmp_strasse = adr.strasse;
      tmp_strasse = '\0';}
   else
      strcpy(tmp_strasse, adr.strasse);
   
   char tmp_stadt[50];
   if (strlen(adr.stadt)>13){
      for ( i=0; i<13; i++ )
         tmp_stadt = adr.stadt;
      tmp_stadt = '\0';}
   else
      strcpy(tmp_stadt, adr.stadt);

   if (_select == 0)
      printf( "\1 %-5d", adr.p_id );
   if (_select == 1)
      printf( "\2 %-5d", adr.p_id );
   if (_select == 2)
      printf( "  %-5d", adr.p_id );
   printf( "| %-14s", tmp_name );
   printf( "| %-13s", tmp_vname );
   printf( "| %-15s", tmp_strasse );
   printf( "| %-6d", adr.plz );
   printf( "| %-14s\n", tmp_stadt );
}

// Ausgeben eines Buches auf den Bildschirm
void b_ausgeben(struct buch_ds buch, int _select)
{
     int i;
   // _select = 0, or _select = 1, or _select = 2
   char tmp_name[50];
   if (strlen(buch.name)>13){
      for ( i=0; i<13; i++ )
         tmp_name = buch.name;
      tmp_name = '\0';}
   else
      strcpy(tmp_name, buch.name);

   char tmp_isbn[50];
   if (strlen(buch.isbn)>13){
      for ( i=0; i<13; i++ )
         tmp_isbn = buch.isbn;
      tmp_isbn = '\0';}
   else
      strcpy(tmp_isbn, buch.isbn);

   char tmp_autor[50];
   if (strlen(buch.autor)>13){
      for ( i=0; i<13; i++ )
         tmp_autor = buch.autor;
      tmp_autor = '\0';}
   else
      strcpy(tmp_autor, buch.autor);
   
   if (_select == 0)
      printf( "\1 %-5d", buch.b_id );
   if (_select == 1)
      printf( "\2 %-5d", buch.b_id );
   if (_select == 2)
      printf( "  %-5d", buch.b_id );
   printf( "| %-14s", tmp_name );
   printf( "| %-14s", tmp_isbn );
   printf( "| %-14s", tmp_autor );
   printf( "| %-14d\n", buch.vorrat );
   //printf( "%-7d\n", buch );
}

// Ausgeben eines Aufrags auf den Bildschirm
void a_ausgeben(struct auftrag_ds auftrag, int _select)
{
     int i;
   // _select = 0, or _select = 1, or _select = 2
   int k = p_IDSuche(auftrag.p_id);
   char tmp_pname[50];
   if (strlen(adrs[k].name)>13){
      for ( i=0; i<13; i++ )
         tmp_pname = adrs[k].name;
      tmp_pname = '\0';}
   else
      strcpy(tmp_pname, adrs[k].name);
   
   char tmp_pvname[50];
   if (strlen(adrs[k].vname)>13){
      for ( i=0; i<13; i++ )
         tmp_pvname = adrs[k].vname;
      tmp_pvname = '\0';}
   else
      strcpy(tmp_pvname, adrs[k].vname);

   k = b_IDSuche(auftrag.b_id);
   char tmp_bname[50];
   if (strlen(buchr[k].name)>13){
      for ( i=0; i<13; i++ )
         tmp_bname = buchr[k].name;
      tmp_bname = '\0';}
   else
      strcpy(tmp_bname, buchr[k].name);

   if (_select == 0)
      printf( "\1 %-5d", auftrag.auftrag_id );
   if (_select == 1)
      printf( "\2 %-5d", auftrag.auftrag_id );
   if (_select == 2)
      printf( "  %-5d", auftrag.auftrag_id );
   printf( "| %-14s", tmp_pname );
   printf( "| %-14s", tmp_pvname );
   printf( "| %-14s", tmp_bname );
   printf( "| %-5d\n", auftrag.outzahl );
}

// Abspeichern einer eingelesenen Adresse
// in einer Datei
void p_eingabe()
{
   struct person_ds adr;

   adr = p_einlesen();

   // falls die Datei nicht leer war
   if ( pers_count > 0 )
   {
      adrs = (struct person_ds*)realloc(adrs, (pers_count+1)*sizeof(person_ds));
      adrs[pers_count] = adr;
   }
   // falls die Datei leer war
   else
      adrs[0] = adr;

   pers_count++;
   // Adressen neu sortieren
   qsort(adrs, pers_count, sizeof (struct person_ds), p_vgl);
}

// Abspeichern eines eingelesenen Buches
// in einer Datei
void b_eingabe()
{
   struct buch_ds buch;

   buch = b_einlesen();

   // falls die Datei nicht leer war
   if ( buch_count > 0 )
   {
      buchr = (struct buch_ds*)realloc(buchr, (buch_count+1)*sizeof(buch_ds));
      buchr[buch_count] = buch;
   }
   // falls die Datei leer war
   else
      buchr[0] = buch;
   
   buch_count++;
   
   // Buecher neu sortieren
   qsort(buchr, buch_count, sizeof (struct buch_ds), b_vgl);
}

// Abspeichern eines eingelesenen Auftrages
// in einer Datei
void a_eingabe()
{
   struct auftrag_ds auftrag;

   auftrag = a_einlesen();

   // falls die Datei nicht leer war
   if ( aufraege_count > 0 )
   {
      // in der variable 'auftraege' platz für einen neuen auftrag schafen
      aufraege = (struct auftrag_ds*)realloc(aufraege, (aufraege_count+1)*sizeof(auftrag_ds));
      // den neuen Aufrag an die hientere stelle in die variable 'auftraege' einfuegen
      aufraege[aufraege_count] = auftrag;
   }
   // falls die Datei leer war
   else
      // wird der Auftrag an erste stelle in der Variable 'auftraege' einfuegen
      aufraege[0] = auftrag;
   
   aufraege_count++;
   
   // Auftraege neu sortieren
   qsort(aufraege, aufraege_count, sizeof (struct auftrag_ds), a_vgl);
}

// Ausgabe der gesamten Adressdatei
void p_ausgabe()
{
   int k;
   //clrscr();
   printf("  %-5s  %-14s  %-13s  %-15s  %-6s  %-14s\n\n" ,"ID","Name",
      "Vorname","Strasse","PLZ","Stadt"); 
   //printf( "Name\tVorname\tStrasse\tPLZ\tStadt\tTelefon\tTelefax\n\n"); 
   if( pers_count <= 0 )
      printf( "Keine Adressen vorhanden\n" );
   else
      for ( k = 0; k < pers_count; k++ )
         p_ausgeben( adrs[k] , 1 );
}

// Ausgabe der gesamten Buchdatei
void b_ausgabe()
{
   int k;
   //clrscr();
   printf("  %-5s  %-14s  %-14s  %-14s  %-14s\n\n" ,"ID","Buchname","ISBN","Autor","Vorrat"); 
   if( buch_count <= 0 )
      printf( "Keine Buecher vorhanden\n" );
   else
      for ( k = 0; k < buch_count; k++ )
         b_ausgeben( buchr[k], 1 );
}

// Ausgabe der gesamten Auftraegedatei
void a_ausgabe()
{
   int k;
   //clrscr();
   printf("  %-5s  %-14s  %-14s  %-14s  %-5s\n\n" ,"A-ID","Name","Vorname","Buchname","Zahl"); 
   if( aufraege_count <= 0 )
      printf( "Keine Auftraege vorhanden\n" );
   else
      for ( k = 0; k < aufraege_count; k++ )
         a_ausgeben( aufraege[k], 1 );
}


// Suchen einer Adresse
void p_suchen()
{
   char s[50];
   int k=0;

   printf( "Name eingeben: " );
      scanf( "%s", s );
   fflush( stdin );

   k = p_BinSuche(s);

   if ( strcmp(adrs[k].name, s) == 0 )
   {
      printf("\n  %-5s  %-14s  %-13s  %-15s  %-6s  %-14s\n\n" ,"ID","Name",
                "Vorname","Strasse","PLZ","Stadt"); 
      p_ausgeben( adrs[k], 2);
    }
   else
      printf( "\nName %s nicht vorhanden!!!\n", s );
}

// Suchen ein Buch
void b_suchen()
{
   char s[50];
   int k=0;

   printf( "Buchname eingeben: " );
      scanf( "%s", s );
   fflush( stdin );

   k = b_BinSuche(s);

   if ( strcmp(buchr[k].name, s) == 0 )
   {
      printf("  %-5s  %-14s  %-14s  %-14s  %-5s\n\n" ,
                  "A-ID","Name","Vorname","Buchname","Zahl");
        b_ausgeben( buchr[k], 2);
    }
   else
      printf( "\nBuchname %s nicht vorhanden!!!\n", s );
}

// Suchen ein Auftrag
void a_suchen()
{
   int s=0;
   int k=0;

   printf( "Auftrag ID eingeben: " );
      scanf( "%d", s );
   fflush( stdin );

   k = a_Suche(s);

   if ( aufraege[k].auftrag_id == s )
      a_ausgeben( aufraege[k], 2);
   else
      printf( "\nAuftrag mit ID %d nicht vorhanden!!!\n", s );
}

//Eine Adresse Loeschen
void p_loeschen()
{
   int k = 0;
   char s[50];

   printf( "\nName eingeben: " );
      scanf("%s", &s);
   k = p_BinSuche(s);

   if ( strcmp(adrs[k].name, s) == 0 )
   {
      adrs[k] = adrs[pers_count - 1];
      pers_count--;
      // Adressen neu sortieren
      qsort(adrs, pers_count, sizeof (struct person_ds), p_vgl);
   }
   else
      printf( "Name %s nicht vorhanden\n", s );

   adrs = (struct person_ds*)realloc(adrs, pers_count*sizeof(struct person_ds));
}

//Eine Buch Loeschen
void b_loeschen()
{
   int k = 0;
   char s[50];

   printf( "\nBuchname eingeben: " );
      scanf("%s", &s);
   k = b_BinSuche(s);

   if ( strcmp(buchr[k].name, s) == 0 )
   {
      buchr[k] = buchr[buch_count - 1];
      buch_count--;
      // Buecher neu sortieren
      qsort(buchr, buch_count, sizeof (struct buch_ds), b_vgl);
   }
   else
      printf( "Buchname %s nicht vorhanden\n", s );

   buchr = (struct buch_ds*)realloc(buchr, buch_count*sizeof(struct buch_ds));
}

//Eine Auftrag Loeschen
void a_loeschen()
{
   int k = 0;
   int s;
   char taste;
   a_ausgabe();
   printf( "\nAuftrag ID eingeben: " );
      scanf("%d", &s);
   k = a_Suche(s);

   if ( aufraege[k].auftrag_id == s )
   {
      // Zahl der Buecher aus dem Auftrag in Vorrat ubertragen
      while( (taste != 'j') && (taste != 'n'))
      {
         printf("\nSollen die Buecher wieder zu Vorrat addiert werden? j/n:");
            taste = getch();
         if (taste == 'j')
            buchr[b_IDSuche(aufraege[k].b_id)].vorrat =
            buchr[b_IDSuche(aufraege[k].b_id)].vorrat + aufraege[k].outzahl;
      }
      // der zu loeschender Auftrag mit dem Index 'k' wird durch
      // den letzten Auftrag aus der Liste ersetzt
      aufraege[k] = aufraege[aufraege_count - 1];
      aufraege_count--;      // Anzahl der Auftraege wird decremmentiert
      // Auftraege neu sortieren
      qsort(aufraege, aufraege_count, sizeof (struct auftrag_ds), a_vgl);
   }
   else
      printf( "Auftrag mit ID: %d nicht vorhanden\n", s );
   // Raallocation der variable 'auftraege' mit der aktuelle Aufträgeanzahl 'aufraege_count'
   aufraege = (struct auftrag_ds*)realloc(aufraege, aufraege_count*sizeof(struct auftrag_ds));
}

// laden der Adressdatei in das Feld adrs
void p_laden()
{
   FILE* stream;

   stream = fopen( "adressen.dat", "r" );
   free(adrs);

   // falls das Laden funktioniert hat
   if ( stream != NULL )
   {
      // Anzahl der Adressen einlesen
      fread( &pers_count, sizeof( int ), 1, stream );

      // Speicher allokieren
      adrs = (struct person_ds*)calloc(pers_count, sizeof(struct person_ds));

      // Adressen einlesen
      fread( adrs, sizeof(struct person_ds), pers_count, stream );

      fclose(stream);
   }
   // falls die Datei leer war
   else
   {
      printf( "\nKeine Adressdatei gefunden!\n" );
      printf( "\nGeben Sie eine Adresse ein\n\n" );
      pers_count = 0;
      adrs = (struct person_ds*)calloc( 1, sizeof(struct person_ds) );
      p_eingabe();
   }
}

// laden der Bucherdatei in das Feld buchr
void b_laden()
{
   FILE* stream;

   stream = fopen( "buecher.dat", "r" );
   free(buchr);

   // falls das Laden funktioniert hat
   if ( stream != NULL )
   {
      // Anzahl der Adressen einlesen
      fread( &buch_count, sizeof( int ), 1, stream );

      // Speicher allokieren
      buchr = (struct buch_ds*)calloc(buch_count, sizeof(struct buch_ds));

      // Adressen einlesen
      fread( buchr, sizeof(struct buch_ds), buch_count, stream );

      fclose(stream);
   }
   // falls die Datei leer war
   else
   {
      printf( "\nKeine Bucherdatei gefunden!\n" );
      printf( "\nGeben Sie ein Buch ein\n\n" );
      buch_count = 0;
      buchr = (struct buch_ds*)calloc( 1, sizeof(struct buch_ds) );
      b_eingabe();
   }
}

// laden der Auftraegedatei in das Feld aufraege
void a_laden()
{
   FILE* stream;

   stream = fopen( "auftraege.dat", "r" );
   free(aufraege);

   // falls das Laden funktioniert hat
   if ( stream != NULL )
   {
      // Anzahl der Auftraege einlesen
      fread( &aufraege_count, sizeof( int ), 1, stream );

      // Speicher allokieren
      aufraege = (struct auftrag_ds*)calloc(aufraege_count, sizeof(struct auftrag_ds));

      // Auftraege einlesen
      fread( aufraege, sizeof(struct auftrag_ds), aufraege_count, stream );

      fclose(stream);
   }
   // falls die Datei leer war
   else
   {
      printf( "\nKeine Auftraege gefunden!\n" );
      printf( "\nGeben Sie ein Auftrag ein\n\n" );
      aufraege_count = 0;
      aufraege = (struct auftrag_ds*)calloc( 1, sizeof(struct auftrag_ds) );
      a_eingabe();
   }
}

// speichern von adrs in der Adressedatei
void p_speichern()
{
   FILE* stream;
   int k;

   stream = fopen( "adressen.dat", "w+" );
   fwrite( &pers_count, sizeof( int ), 1, stream );

   for ( k=0; k<=pers_count-1; k++ )
   {
      fwrite( &adrs[k], sizeof(struct person_ds), 1, stream);
   }

   fclose(stream);
}

// speichern von buchr in der Bucherdatei
void b_speichern()
{
   FILE* stream;
   int k;

   stream = fopen( "buecher.dat", "w+" );
   fwrite( &buch_count, sizeof( int ), 1, stream );

   for ( k=0; k<=buch_count-1; k++ )
   {
      fwrite( &buchr[k], sizeof(struct buch_ds), 1, stream);
   }

   fclose(stream);
}

// speichern von aufraege in der Auftragdatei
void a_speichern()
{
   FILE* stream;
   int k;

   stream = fopen( "auftraege.dat", "w+" );
   fwrite( &aufraege_count, sizeof( int ), 1, stream );

   for ( k=0; k<=aufraege_count-1; k++ )
   {
      fwrite( &aufraege[k], sizeof(struct auftrag_ds), 1, stream);
   }

   fclose(stream);
}

// Auswahl der Programmunterpunkte fuer Adressen
int p_menue()
{   
   
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue Adressen ******/\n\n" );
      printf( "1. Adresse eingeben\n" );
      printf( "2. Adresse suchen\n" );
      printf( "3. Adressliste\n" );
      printf( "4. Adresse loeschen\n" );
      printf( "5. Laden\n" );
      printf( "6. Speichern\n" );
      printf( "7. Zurueck\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

// Auswahl der Programmunterpunkte fuer Buecher
int b_menue()
{
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue Bucher ******/\n\n" );
      printf( "1. Buch eingeben\n" );
      printf( "2. Buch suchen\n" );
      printf( "3. Buchliste\n" );
      printf( "4. Buch loeschen\n" );
      printf( "5. Laden\n" );
      printf( "6. Speichern\n" );
      printf( "7. Zurueck\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

// Auswahl der Programmunterpunkte fuer Auftraege
int a_menue()
{
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue Auftraege ******/\n\n" );
      printf( "1. Auftrag eingeben\n" );
      printf( "2. Auftrag suchen\n" );
      printf( "3. Auftragliste\n" );
      printf( "4. Auftrag loeschen\n" );
      printf( "5. Laden\n" );
      printf( "6. Speichern\n" );
      printf( "7. Zurueck\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

// Auswahl der Programmunterpunkte fuer Buecher
int menue()
{
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue ******/\n\n" );
      printf( "1. Adressen\n" );
      printf( "2. Buecher\n" );
      printf( "3. Auftraege\n" );
      printf( "4. Ende\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

int main()
{
   int a;
   p_laden();
   b_laden();
   a_laden();
   do
   {
      a=menue();
      switch(a)
      {
      case 1:
         do
         {
            a = p_menue();
            switch (a)
            {
               case 1: p_eingabe();   break;
               case 2: p_suchen();      
                     printf("\nweiter mit Eingabetaste\n");
                     getchar();                   
                         break;               
               case 3: p_ausgabe();   break;
               case 4: p_loeschen();   break;
               case 5: p_laden();      break;
               case 6: p_speichern();   break;
            }
            if (a==7)
               break;
            //printf("\nweiter mit Eingabetaste\n");
            //getchar();
         } while (1);
         break;
      case 2:
         do
         {
            a = b_menue();
            switch (a)
            {
               case 1: b_eingabe();   break;
               case 2: b_suchen();      
                     printf("\nweiter mit Eingabetaste\n");
                     getchar();                   
                         break;
               case 3: b_ausgabe();   break;
               case 4: b_loeschen();   break;
               case 5: b_laden();      break;
               case 6: b_speichern();   break;
            }
            if (a==7)
               break;
            //printf("\nweiter mit Eingabetaste\n");
            //getchar();
         } while (1);
         break;
      case 3:
         do
         {
            a = a_menue();
            switch (a)
            {
               case 1: a_eingabe();   break;
               case 2: a_suchen();      
                   printf("\nweiter mit Eingabetaste\n");
                     getchar();                   
                         break;
               case 3: a_ausgabe();   break;
               case 4: a_loeschen();   break;
               case 5: a_laden();      break;
               case 6: a_speichern();   break;
            }
            if (a==7)
               break;
            //printf("\nweiter mit Eingabetaste\n");
            //getchar();
         } while (1);
         break;
      }
      if (a==4)
         break;
   } while (1);
   p_speichern();
   b_speichern();
   a_speichern();
   free(adrs);
   free(buchr);
   free(aufraege);
   return 0;
}




Offline MCoupe

  • Newbie
  • *
  • Beiträge: 18
  • Bewertung der Beiträge: 0
  • Geschlecht: Männlich
  • Möge die Hardware mit Euch sein!
    • Profil anzeigen
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #4 am: Februar 20, 2006, 09:49:22 »
Ich Pack auch noch ein dazu Taschenrechner einfach damit sind wir Komplett :-D

// This Programm is free Software; you can modify

#include<stdio.h>
#include<math.h>

#define MAX 100

void anleitung()
{
   printf("\n\t Taschenrechner  \n\n");
   
   printf("Der Taschenrechner unterstuetzt:\n");
   printf("\n");
   printf("   () geklammerte Ausdruecke\n");
   printf("   +  Addition\n");
   printf("   -  Subtraktion\n");
   printf("   /  Division\n");
   printf("   ^  Potenzierung\n");
   printf("   s()Sinus\n");

   printf("\n");
   printf("\t z.B.:(s(1.1^4)-2)/(-4+2*s(1))\n");

   printf("\n");
   printf("Leerzeichen sind nicht erlaubt\n");
   printf("Aufeinanderfolg. Operratoren werden durch 0 "
      "getrennt!\n");
   printf("Ende durch Eingabe von 0 oder )\n\n");
}

char s[MAX];      //der eingebene Ausdruck,der ausgewertet wird
int i;         //s ist das Zeichen,das akt.bearbeitet wird;

float expr();      //Vorwaertsdeklaration

//wandelt eine Ziffernfolge in eine Zahl um.
//statt sprintf() zu verwenden,werden die Zahlen
//Stelle fuer Stelle aufgebaut

float zahl(float q, float c)
{

//c=0 =>noch kein '.'eingelesen
//c=(0.1)^n =>n-te Nachkommastelle

   
   if(c==0)
      q=10*q+s-48;         // Synthax edit 4
      else
      q=q+c*(s-48);

   if( (s[i+1]>47) && (s[i+1]<58) )   //s[i+1] ist ziffer
      if(c==0)
   {
      i++;
      q=zahl(q,0);
   }
   else
   {
      i++;
      q=zahl(q,c/10);
   }

   if (s[i+1]=='.')
 {
   i+=2;
   q=zahl(q,0.1);
 }

return q;

}

//s_expr() wertet einen Ausdruck aus der
//      
//      subtrahiert(c=0)
//      multipliziert/dividiert(c=1)
//      potenziert (c=2) werden soll
//
//   der parameter c gibt die Prioritaet  an

float s_expr(int c)

   {
   float q=0;
   
   //Punkt - vor Strichrechnung
   while( s!=')' && s!='\0' && s!='+' && s!='-'
      && (c<1 || s!='*') && (c<1 || s!='/')
      && (c<2 || s!='^'))
   {
   if (s>47 && s<58)
      q=zahl(0,0);

   switch (s)
   
      {
      case '(': i++;
         q=expr();
         break;
         case '*': if(c<1)
{
         i++;
         q*=s_expr(1);
         }
      break;
   case'/': if(c<1)

   {
         i++;
         q/=s_expr(1);
         }
      break;
   case '^': if(c<2)
   
   {
         i++;
         q=exp(log(q)*s_expr(2));
         }
      break;
   case 's': i+=2;
         q=sin(expr());
      break;
      }
           i++;
         }
         i--;
         return q;
            }
//wertet Ausdruck aus

   float expr()
   {
      float qh,q=0;

      while(s!=')' && s!='\0')
   {
   //s ist eine Ziffer => in Zahl umwandeln

   if(s>47 && s<58)
      q=zahl(0,0);

   //s Rechenzeichen / Symbol
   switch(s)
   {
      case '(': i++; q =expr();      break;
      case '+': i++; q+=expr();i--;      break;
      case '-': i++; q-=s_expr(0);      break;
      case '*': i++; q*=s_expr(1);      break;
      case '/': i++; q/=s_expr(1);      break;
      case '^': i++; q =exp(log(q)*s_expr(2));break;
      case 's': i+=2;q =sin(expr());      break;
   }
     i++;
   }
      return q;
      }

   int main()
     {
      anleitung();
      do
     {
     //Eingabeband leeren
     for(i=0; i<MAX; i++)
       s= ' ';

        // Eingabe des Ausdruck   

        printf("\Ihre Eingabe:\n\n\t");

         scanf("%s",&s);

   i=0; // Auswertung beginnt mit dem ersten Zeichen

        // Auswertung Ausgabe
        printf("\n\tErgebnis: %f\n",expr());
   }while(s[0]!=')' && s[0]!='0');
    }
Wer suchet der findet und wer nicht Schwimmen kann,
muß untergehen....!! :-)

Offline simse

  • Newbie
  • *
  • Beiträge: 12
  • Bewertung der Beiträge: 0
    • Profil anzeigen
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #5 am: April 08, 2007, 16:17:14 »
hi leute,
ich möchte mir das auch beibringen bin aber absoluter neuling auf dem programmier gebiet.
wie kriege ich die programme zum laufen?
lg
simse

*nachtrag*
muß ich das noch compilieren? wenn ja wie mache ich das und welche compilierer könnt ihr empfehlen?
« Letzte Änderung: April 08, 2007, 16:20:32 von simse »

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #6 am: April 10, 2007, 21:19:40 »
Hi, den besten Compiler den du für lau kriegen wirst ist sicherlich der GCC > http://gcc.gnu.org/
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline kv-70

  • Sr. Member
  • ***
  • Beiträge: 417
  • Bewertung der Beiträge: 2
  • Geschlecht: Männlich
  • Moin !!!!!!!!!!!!!
    • Profil anzeigen
    • My Web
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #7 am: April 10, 2007, 21:42:51 »
Mal eine ander Frage . Kann man das Xp Spider Solitär um schreiben ? Sprich neue Farbe usw?
Wenn ja wie mache ich das ?

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #8 am: April 11, 2007, 10:04:16 »
Nein, das wird wohl nichts. Das Programm liegt ja in binärer Form vor.
Um das umschreiben zu können bräuchtest du schon den Quellcode und Microsoft wird in dir kaum geben. Das ganze zu decompilieren/deassemblieren ist sicherlich auch verboten und funktioniert auch nicht so locker.
Bei sowas merkt man schnell den Vorteil von OpenSource Software, weil du den Quellcode bekommen kannst und anpassen kannst wie du ihn möchtest.
Mein Tipp, such dir eine OpenSource alternative zu Solitär und pass diese an wie du möchtest.
http://sourceforge.net/projects/pysolfc soll eine recht umfangreiche Sammlung an Kartenspielen sein. Ich hab es aber selbst noch nicht auprobiert.
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline simse

  • Newbie
  • *
  • Beiträge: 12
  • Bewertung der Beiträge: 0
    • Profil anzeigen
Re: Ein kleines Rechen Programm in C geschrieben
« Antwort #9 am: April 13, 2007, 22:25:34 »
danke baldrian für deine antwort, ich binzwar noch nicht dazu gekommen es auszuprobieren aber das werde ich in kürze nachholen.
viel um die ohren aber das kennt ihr ja:-)
simse