pierwszy program C++

Potrzebujesz pomocy z C, C++, perl, python, itp.
malinkalive
Beginner
Posty: 100
Rejestracja: 12 lutego 2007, 14:35

pierwszy program C++

Post autor: malinkalive »

Witam,

Dane jest zadanie:

1 Utworzyć typ wyliczeniowy wzor zawierający elementy:
bez, rododendron, sosna, fiolek, czekaolada

2. Utworzyć dwuwymiarową tablicę o wymiarach 20*15

3. Opracować funkcję nie zwracającą wartości o nazwie tlo posiadającą jeden parametr typu wzor za pomocą, którego zostanie przekazany do funkcji wzór podstawowy podłogi. Zadaniem funkcji tlo jest wypełnienie tablicy podloga wzorem podanym w parametrze

dotychczasowy kod wygląda tak

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>

using namespace std;
//typedef bylo odrzucilem
enum wzor {bez, rododendron, sosna, fiolek,czekolada};

int i,j,akcja;

int main(int argc, char *argv[])
{

wzor podloga[20][15]; //def tablicy 2 wymiarowej

void tlo (wzor);
{
     do
     {
      cout << "1 Bez" << std::endl;
      cout << "2 Rododendron" << std::endl;
      cout << "3 Sosna" << std::endl;
      cout << "4 Fiolek" << std::endl;
      cout << "5 Czekolada" << std::endl;
      cout << "Twoj wybor: ";
      cin >> akcja;
      }
while (akcja!=1 && akcja!=2 && akcja!=3 && akcja!=4 && akcja!=5);     //  !=  nie rowna sie

}

switch (akcja)
{
       default: cout << "Zly wybor liczba nie zawiera sie w [1,5]"<<endl;  //chyba nie dziala
       case 1: cout << "Wybrano BEZ" <<endl;
       podloga[i][j]=bez;
       break;
       case 2: cout << "Rododendron"<<endl;
       podloga[i][j]=rododendron;
       break;
       case 3: cout << "Sosna"<<endl;
       podloga[i][j]=sosna;
       break;
       case 4: cout << "Fiolek"<<endl;
       podloga[i][j]=fiolek;
       break;
       case 5: cout << "Czekolada"<<endl;
       podloga[i][j]=czekolada;
       break;

}


    system("PAUSE");
    return EXIT_SUCCESS;
}

czy kod jest poprawny?
simonnam
Posty: 75
Rejestracja: 04 września 2009, 23:42

Post autor: simonnam »

Po co Ci

Kod: Zaznacz cały

#include <cstdlib>
Funkcja tło w Twoim programie nic nie robi, a sam napisałeś, że ma wypełnić tablicę.
Dlaczego użyłeś typu char w tablicy?
Nie potrzebne jest Ci też

Kod: Zaznacz cały

system("PAUSE");
return EXIT_SUCCESS;
malinkalive
Beginner
Posty: 100
Rejestracja: 12 lutego 2007, 14:35

Post autor: malinkalive »

simonnam pisze:#include <cstdlib>
Korzystam z dev-C++ i są to pliki nagłówkowe standardowo przypisane przez kompilator.
£ącznie z pauzą i enter.
simonnam pisze:system("PAUSE")]
Użyłem ,,char'' do tablicy ponieważ nie jestem pewien czy tablica ma zostać wypełniona elementami typu ,,bez, rododendron, sosna, fiolek,czekaolada'', czy też ma być to dwu elementowa tablica składająca się z 20 wierszy i 15 kolumn?
simonnam
Posty: 75
Rejestracja: 04 września 2009, 23:42

Post autor: simonnam »

Widzę, że już poprawiłeś w kodzie tablicę :)
Teraz zostało Ci tylko napisanie ciała funkcji, do czego możesz wykorzystać pętlę for.
A i jeszcze jedno, zmień funkcję np. na:

Kod: Zaznacz cały

void tlo (wzor wybor)
giaur
Member
Posty: 1915
Rejestracja: 25 maja 2007, 22:16

Post autor: giaur »

Nie, ten kod jest bzdurny. Poczytaj chociaz o deklarowaniu funkcji, dziwne ze w ogole dev to skompilowal. Aha, devC++ to chyba najgorsze IDE na do C++ na Windows jakie istnieje - uzywa gcc pamiętającego chyba czasy potopu, jest nierozwijane i zabuggowane. Radze zmienic, najlepiej na Visual Studio albo chociaz Code::Blocks.
simonnam
Posty: 75
Rejestracja: 04 września 2009, 23:42

Post autor: simonnam »

Teraz tak się przyjrzałem jeszcze raz temu kodowi i nie rozumiem dlaczego napisałeś:

Kod: Zaznacz cały

typedef enum wzor {bez, rododendron, sosna, fiolek,czekolada};
zamiast:

Kod: Zaznacz cały

enum wzor {bez, rododendron, sosna, fiolek, czekolada};
malinkalive
Beginner
Posty: 100
Rejestracja: 12 lutego 2007, 14:35

Post autor: malinkalive »

Nowa wersja:

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>

using namespace std;

typedef enum wzor {bez, rododendron, sosna, fiolek,czekolada};

int main(int argc, char *argv[])
{
wzor podloga[20][15]; //def tablicy 2 wymiarowej

int i,j,akcja; //licznik tablicy

void tlo (wzor);
{
     do
     {
      std::cout << "1 Bez" << std::endl; 
      std::cout << "2 Rododendron" << std::endl; 
      std::cout << "3 Sosna" << std::endl; 
      std::cout << "4 Fiolek" << std::endl; 
      std::cout << "5 Czekolada" << std::endl; 
      std::cout << "Twoj wybor: "; 
      cin >> akcja;
      } 
while (akcja!=1 && akcja!=2 && akcja!=3 && akcja!=4 && akcja!=5);     //  !=  nie rowna sie
         
}

switch (akcja)
{
       case 1: cout << "Wybrano BEZ" <<endl;
       podloga[i][j]=bez;
       break;               
       case 2: cout << "Rododendron"<<endl;
       podloga[i][j]=rododendron;
       break;
       case 3: cout << "Sosna"<<endl;
       podloga[i][j]=sosna;
       break;
       case 4: cout << "Fiolek"<<endl;
       podloga[i][j]=fiolek;
       break;
       case 5: cout << "Czekolada"<<endl;
       podloga[i][j]=czekolada;
       break;
       default: cout << "Zly wybor liczba nie zawiera sie w [1,5]"<<endl;  //chyba nie dziala 
}

                        
    system("PAUSE");
    return EXIT_SUCCESS;
}

Nie wiem dlaczego ale przy wyborze cyfry nie należącej do zakresu [1,5] nie dostaje komunikatu "default"
Awatar użytkownika
grucha
Beginner
Posty: 345
Rejestracja: 29 września 2007, 01:04
Lokalizacja: Rzeszów / Kraków

Post autor: grucha »

Bo do niego nie dochodzi. Zostaje w pętli, jak akcja jest różna od {1,2,3,4,5}.

PS. Zdefiniuj sobie gdzieś i i j bo bez tego wyrzuca naruszenie ochrony pamięci.
malinkalive
Beginner
Posty: 100
Rejestracja: 12 lutego 2007, 14:35

Post autor: malinkalive »

Zdefiniowałem ,,i j'' jako zmienne globalne ale nadal mi nie wchodzi w domyślne.
Awatar użytkownika
grucha
Beginner
Posty: 345
Rejestracja: 29 września 2007, 01:04
Lokalizacja: Rzeszów / Kraków

Post autor: grucha »

Kod: Zaznacz cały

 do
     {
      std::cout << "1 Bez" << std::endl;
      std::cout << "2 Rododendron" << std::endl;
      std::cout << "3 Sosna" << std::endl;
      std::cout << "4 Fiolek" << std::endl;
      std::cout << "5 Czekolada" << std::endl;
      std::cout << "Twoj wybor: ";
      cin >> akcja;
      }
while (akcja!=1 && akcja!=2 && akcja!=3 && akcja!=4 && akcja!=5);  
A co według ciebie robi ta pętla? Zabezpiecza przed wpisaniem innej wartości niż 1-5. Nie jest ci potrzebna albo ona, albo default. Obstawiałbym pętle, bo nieciekawie reaguje na wpisanie do akcji np. litery.
ODPOWIEDZ