funkcje i struktury

zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

funkcje i struktury

Post autor: zxc18 »

Mam taki problem .. Chce napisac funkcje ktora pokaze dane wszystkich tanich ksiazek (cena < 100) zawartych w tablicy struktur:

moj program wyglada tak:

#include
using namespace std;

struct ksiazka{
char tytul[40];
char autor[40];
int cena; };

void wypisz(ksiazka &a){
cout
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

funkcje i struktury

Post autor: Rafal88K »

Ten program powinien wyglądać mniej więcej tak:

Kod: Zaznacz cały

#include <iostream>
#include <string>
using namespace std;

const unsigned int rozmiar = 3;

struct Ksiazka
{
    string mTytul;
    string mAutor;
    unsigned int mCena;
};

void wypisz(const Ksiazka& a)
{
    cout << a.mTytul << " " << a.mAutor << " Cena: " << a.mCena << endl;
}

void tania(const Ksiazka* a)
{
    for(unsigned int i = 0; i < rozmiar; ++i)
    {
        if(a[i].mCena < 100)
        {
            wypisz(a[i]);
        }
    }
}

int main(int argc, char** argv)
{
    unsigned int i;

    Ksiazka baza[rozmiar] = { {"Symfonia C++", "Jerzy Grebosz", 90},
                        {"Thinking in C++", "Bruce Eckel", 150},
                        {"Wygraj z C++", "Kris Jamsa", 60} };

    for(i = 0; i < rozmiar; ++i)
    {
        wypisz(baza[i]);
    }

    cout << "************************************" << endl;

    tania(baza);

    cin.get();
    return 0;
}
Chociaż jeżeli to ma być w C++ to radziłbym zrobić klasę Książka i vector zamiast tablicy
zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

funkcje i struktury

Post autor: zxc18 »

Klas jeszcze nie znam, dopiero struktury ...

Ma ktos moze pomysl jak przerobic ten program aby zawieral menu ? np:

Kod: Zaznacz cały

#include<iostream>
  #include<string.h>
using namespace std;


struct ksiazka{
       char tytul[40];
       char autor[40];
       unsigned int cena; };
void wpisz(ksiazka &a ){
     cout<<"tytul: ";
     cin>>a.tytul;
     cout<<"autor: ";
     cin>>a.autor;
     cout<<"cena: ";
     cin>>a.cena;
     } 
void wypisz(ksiazka &a){
     unsigned int i;
                  cout<<i+1<<") "<<a.tytul<<" - "<<a.autor<<" - "<<a.cena<<" zl"<<endl; 
                  }
void tania(ksiazka *a){
     unsigned int i;
                  if(a[i].cena < 100)
                  {
                               wypisz(a[i]);
                  } } 
int main()
{
    unsigned int i, p;
    bool quit = false;
    int n;
    ksiazka baza[] = { 
             {"Symfonia C++", "Jerzy Grebosz", 90},
             {"Thinking in C++", "Bruce Eckel", 150},
             {"Wygraj z C++", "Kris Jamsa", 60} };
    cout<<"MENU"<<endl<<endl;
    cout<<" 1) Wpisz nowe ksiazki do bazy. "<<endl;
    cout<<" 2) Pokaz baze ksiazek. "<<endl;
    cout<<" 3) Pokaz tanie ksiazki. "<<endl;
    cout<<" 4) Opusc baze danych. "<<endl;
    
    while(quit == false){
                switch(p){
                          case '1': 
                                 for(i=0; i<baza[]; i++) // w tych miejscach nie wiem co robic ...
                                                     wpisz(baza[i]); ; break;
                          case '2':
                               for(i=0; i<baza[]; ++i){
                                        wypisz(baza[i]); } ;break;
                          case '3':
                               for(i=0; i<baza[];++i){
                                        tania(baza); } ;break;
                
                          case '4': quit=true;
                }
    cout<<"Opcja nr: ";
    cin>>p; 
}

cin.get();
} 

jesli ma ktos pomysl to prosze o pomoc ... kombinuje jak zrobic te funkcje by wszystko bylo przekazywane przez parametry.. a nie bezposrednio w programi ( ta petla for .. w instrukcji switch :/ )
btw: tak wiem ze instrukcje i<baza[] sa zle ... :(
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

funkcje i struktury

Post autor: soku11 »

Kod pisany na szybko niesprawdzony, tak wiec moze byc cos zle:

Kod: Zaznacz cały

#include<iostream>

using namespace std;

typedef struct ksiazka
{
  char *tytul;
  char *autor;
  unsigned int cena; 
} ksiazka;

void wpisz(ksiazka *a)
{
  cout<<"Tytul nowej ksiazki: ";
  cin>>a->tytul;
  cout<<"Autor: ";
  cin>>a->autor;
  cout<<"Cena: ";
  cin>>a->cena;
}

void pokaz(ksiazka a)
{
  cout<<a.tytul<<" - "<<a.autor<<" - "<<a.cena<<" zl"<<endl;
}

void wypisz(ksiazka a[],unsigned int ilosc)
{
  unsigned int i;
  
  cout<<endl;
  for(i=0;i<ilosc;i++) pokaz(a[i]);
  cout<<endl;
}


void tania(ksiazka a[],unsigned int ilosc)
{
  unsigned int i;
  
  cout<<endl;
  for(i=0;i<ilosc;i++)
    if(a[i].cena<100) pokaz(a[i]);
  cout<<endl;
}

int main()
{
  unsigned int i;
  char p;
  bool quit;
  ksiazka *baza;

  baza=(ksiazka*)malloc(3*sizeof(ksiazka));
  baza[0].tytul="Symfonia C++";
  baza[0].autor="Jerzy Grebosz";
  baza[0].cena=90;
  baza[1].tytul="Thinking in C++";
  baza[1].autor="Bruce Eckel";
  baza[1].cena=150;
  baza[2].tytul="Wygraj z C++";
  baza[2].autor="Kris Jamsa";
  baza[2].cena=60;
     
  quit=false, i=3;

  cout<<"--MENU--"<<endl;
  cout<<" 1) Wpisz nowe ksiazki do bazy. "<<endl;
  cout<<" 2) Pokaz baze ksiazek. "<<endl;
  cout<<" 3) Pokaz tanie ksiazki. "<<endl;
  cout<<" 4) Opusc baze danych. "<<endl;  
  
  while(quit == false)
  {
    cout<<"Opcja nr: ";
    cin>>p;
    switch(p)
    {
      case '1':
        i++;
        baza=(ksiazka*)calloc(i,sizeof(ksiazka));
        wpisz( &(baza[4]));
        cin.get();
        break;
      case '2':
        wypisz(baza,i);
        break;
      case '3':
        tania(baza,i);
        break;
      case '4':
        quit=true;
        break;
      default: 
        quit=false;
     }
  }

  cin.get();
  return 0;
}

Wszelkie bledy prosze poprawic jak ktos znajdzie :) POZDRO
ODPOWIEDZ