[C++] Przetłumaczenie kodu na język C

anka19
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 6 cze 2011, o 09:40
Płeć: Kobieta
Lokalizacja: Warszawa

[C++] Przetłumaczenie kodu na język C

Post autor: anka19 »

Witam,
Zamieniłby mi ktoś kod C++ na C? Ja sama nie mam pojęcia jak to zrobić bo jestem strasznie słaba z informatyki, a projekt jest na zaliczenie

Kod: Zaznacz cały

#include <iostream>
#include <vector>
#include <stdlib.h>
#include <stdio.h>

#define WIDTH 10 // szerokosc tablicy
#define HEIGHT 8 // wysokosc tablicy
#define ST_COUNT 3 // ilosc rodzajow statkow
#define ALL_COUNT 6 // ilosc wszystkich statkow, musi byc to liczba, gdy np. mamy 3 rodzaje to 1 + 2 + 3 = 6, dla 2 rodzajow 1 + 2 = 3, dla 4 rodzajow nie wszystkie statki sie mieszcza

using namespace std;

int gracz1_wyg;
int gracz2_wyg;
int gracz1_rem;
int gracz2_rem;
int gracz1_przeg;
int gracz2_przeg;

class Statek
{
      protected:
              int x; // pozycja w wierszu
              int y; // pozycja w kolumnie
              int w; // koncowa pozycja w wierszu
              int h; // koncowa pozycja w kolumnie
              int count; // dlugosc statku
      
      public:
             Statek(int x, int y, int w, int h) // konstruktor statku
             {
                        this->x = x;
                        this->y = y;
                        this->w = w;
                        this->h = h;
             }
                        
             
             int traf(int i, int j) // probujemy trafic w statek
             {
               if (i<x || i>w || j < y || j > h) // jesli nie miescimy sie w granicach statku
               {
                       return -1;
               }
               count--; // zmiejszamy rozmiar statku
               if (count==0)
                  zatopiony(); // jesli statek juz nie ma masztow
               else
                   trafiony(); // jesli statek ma jeszcze maszty
               return count;
             }
             
             virtual void zatopiony() = 0; // funkcja wirtuala przeslonieta przes klasy pochodne
             
             void trafiony() 
             {
                    cout <<  "Trafiles statek
";      
             }
             
             
      
      
};

class Statek_1 : public Statek // klasa pochodna dla jednomasztowca
{
            private:
              static const int size = 1; // rozmiar
              int tab[size]; // tablica masztow
            public:
                   Statek_1(int x, int y, int w, int h) : Statek(x, y, w, h) // konstruktor jednomasztowca
                   {
                                count = size;
                                for(int i = 0;i<count;i++)
                                {
                                        tab[i] = 0;
                                }
                   }    
                   void zatopiony()
                   {
                        cout << "Zatopiles jednomasztowca!
";
                   }
};

class Statek_2 : public Statek// klasa pochodna dla dwumasztowca
{
            private:
              static const int size = 2;
              int tab[size];
            public:
                   Statek_2(int x, int y, int w, int h) : Statek(x, y, w, h) // konstruktor dwumasztowca
                   {
                                count = size;
                                for(int i = 0;i<count;i++)
                                {
                                        tab[i] = 0;
                                }
                   }     
                   void zatopiony()
                   {
                        cout << "Zatopiles dwumasztowca!
";
                   }
};

class Statek_3 : public Statek// klasa pochodna dla trzymasztowca
{
            private:
              static const int size = 3;
              int tab[size];
            public:
                   Statek_3(int x, int y, int w, int h) : Statek(x, y, w, h)// konstruktor trzymasztowca
                   {
                                count = size;
                                for(int i = 0;i<count;i++)
                                {
                                        tab[i] = 0;
                                }
                   }
                   void zatopiony()
                   {
                        cout << "Zatopiles trzymasztowca!
";
                   }

};

class Statek_4 : public Statek// klasa pochodna dla czteromasztowca
{
            private:
              static const int size = 4;
              int tab[size];
            public:
                   Statek_4(int x, int y, int w, int h) : Statek(x, y, w, h)// konstruktor czteromasztowca
                   {
                                count = size;
                                for(int i = 0;i<count;i++)
                                {
                                        tab[i] = 0;
                                }
                   }
                   void zatopiony()
                   {
                        cout << "Zatopiles czteromasztowca!
";
                   }
      
};
      

class Plansza
{
      int tab[HEIGHT][WIDTH]; // plansza na ktorej sa statki
      private:
              vector<Statek*> vec; // wektor statkow
              int count[ST_COUNT]; // kazda komorka zawiera informacje ile mamy statkow danego typu
                
      public:
             Plansza() // konstruktor planszy
             {
                      vec.clear(); // czyscimy wektor
                      for(int i=0;i<ST_COUNT;i++)
                              count[i] = 0;
                      for(int i=0;i<HEIGHT;i++) // wszystkie pola ustawiamy na 0, czyli puste
                      {
                              for(int j=0;j<WIDTH;j++)
                              {
                                      tab[i][j] = 0;
                              }
                      }
             }
             
             int strzal(int i, int j) // sprawdzamy trafienie
             {
                      if (tab[i][j]>0) // jesli znajduje sie w tym miejscu statek
                      {
                                      for(int l = 0;l<vec.size();l++) // dla kazdego statku
                                      {
                                              if (vec[l]->traf(i, j) == 0) // jesli trafilismy wlasnie w ten statek i jest zatopiony
                                              {
                                                                 vec.erase(vec.begin()+l); // usuwamy go z wektora
                                              }
                                      }
                                      tab[i][j] = -1; // ustawiamy pole trafienia na -1
                                    
                      }
                      if (tab[i][j]==0) // jesli pole bylo puste
					  {
                         tab[i][j] = -2; // zaznaczamy strzal jako -2
						 return -2;
					  } else
                      return vec.size();  // zwracamy ilosc statkow                                                      
             }
             
             int ustaw(int i, int j, int w, int h, int klasa) // ustawienie statku przed gra, klasa oznacza dlugosc statku
             {
                       if (i<=0 || j <= 0 || w <= 0 || h <=0) // czy nie wybhodzimy poza granice planszy
                       {
                               
                                return -1;
                                
                       }
                       if (i>=HEIGHT-1 || j>=WIDTH-1 || w>=HEIGHT-1 || h>=WIDTH-1)// czy nie wybhodzimy poza granice planszy
                       {
                                     
                                     return -1;
                                     
                       }     
                           
                       if (i!=w && j!=h) // wszystkie wspolrzedne nie moga byc rozne
                       {
                                
                                return -1;
                                
                       }
                       if (i!=w && abs(i-w)!=klasa-1) // jesli dlugosc nie zgadza sie do wspolrzednych
                       {
                                
                                return -1;
                                
                       }
                       if (j!=h && abs(j-h)!=klasa-1) // jesli dlugosc nie zgadza sie do wspolrzednych
                       {
                              
                                return -1;

                       }
                       
                       for(int l = i-1; l<=w+1 ;l++) // sprawdzamy czy istnieja sasiedzi
                       {
                               for(int k = j-1;k<=h+1;k++)
                               {
                                       if (tab[l][k]!=0)
                                       {

                                                        return -1;

                                       }
                               }
                       }
                       
                       if (klasa < 1 || klasa > ST_COUNT) // jesli dlugosc jest bledna
                       {

                                 return -1;

                       }
                       
                       if (count[klasa-1] >= (ST_COUNT+1-klasa)) // jesli mamy jeszcze miejsce na ustawienie statku danego typu
                       {

                                        return -1;

                       }
                       
              
                       switch(klasa) // wybieramy odpowiedni statek do dlugosci i wrzucamy go do wektora
                       {
                                    case 1: 
                                            {
                                            Statek_1 *st1 = new Statek_1(i, j, w, h);
                                            vec.push_back(st1);
                                            break;
                                            }
                                    case 2:
                                            {                                         
                                            Statek_2 *st2 = new Statek_2(i, j, w, h);
                                            vec.push_back(st2);
                                            break;
                                            }
                                    case 3: {
                                            Statek_3 *st3 = new Statek_3(i, j, w, h);
                                            vec.push_back(st3);
                                            break;
                                            }
                                    case 4: {
                                            Statek_4 *st4 = new Statek_4(i, j, w, h);
                                            vec.push_back(st4);
                                            break;
                                            }
                       }
                       for(int l = i; l<=w ;l++) // tam gdzie znajduje sie statek ustawiamy pola na 1
                       {
                               for(int k = j;k<=h;k++)
                               {
                                       tab[l][k] = 1;
                               }
                       }
                       count[klasa-1]++; // zwiekszamy licznik statku danego typu        
                       return ALL_COUNT-vec.size(); // zwracamy ile statkow zostalo do ustawienia
             }
             
             void show_visible() // procedura drukuje tablice w czasie ustawiania statkow
             {
				 cout << " ";
				  for(int i = 1;i<WIDTH-1;i++) // wypisanie liczb odpowiadajacych kolumnom
				  {
					  cout << " ";
					  cout.width(2);
					  cout << i;
				  }
				  cout << "
";
                  for(int i=1;i<HEIGHT-1;i++)
                  {
					  
					      cout << char(i+96) << " "; // wypisanie liter odpowiadajacych wierszom
                          for(int j=1;j<WIDTH-1;j++)
                          {
                                  switch(tab[i][j]) // dla kazdej komorki wypisujemy odpowiedni status
                                  {
                                                   case 0: cout << "[ ]";
                                                         break;
                                                   case 1: cout << "[s]";
                                                         break;
                                  }
                          }
                          cout << "
";
                  }
             }
             void show() //drukowanie planszy w czasie gry
             {
				 cout << " ";
				  for(int i = 1;i<WIDTH-1;i++)
				  {
					  cout << " ";
					  cout.width(2);
					  cout << i;
				  }
				  cout << "
";
                  for(int i=1;i<HEIGHT-1;i++)
                  {
					  
					      cout << char(i+96) << " ";
                          for(int j=1;j<WIDTH-1;j++)
                          {
                                  switch(tab[i][j])
                                  {
                                                   case -2: cout << "[*]"; // jesli bylo pudlo
                                                         break;
                                                   case -1: cout << "[s]"; // jesli trafiony zostal statek
                                                         break;
                                                   case 0: cout << "[ ]"; // jesli pole puste
                                                         break;
                                                   case 1: cout << "[ ]"; // jesli pole nieodkryte
                                                         break;
                                  }
                          }
                          cout << "
";
                  }
             }
             
             void recznie() // reczne ustawienie statkow
             {
                  char wiersz;
                  int kolumna;
                  int kier, klasa;
				  system("clear");
				  cout << "Pozostalo Ci 10 statkow do ustawienia
";
                  while(true) // dopoki nie ustawimy 10 statkow
                  {
                             show_visible(); // drukujemy plansze
                              cout << "Podaj pozycje np. e4: ";
                              cin >> wiersz >> kolumna; // pobranie wspolrzednych
                              if (wiersz < 97 || wiersz > 102 || kolumna < 1 || kolumna > WIDTH-2) // sprawdzenie poprawnosci wspolrzednych
                              {
                                         cout << "Podales bledna pozycje
";
                                         continue;
                              }
                              cout << "Podaj orientacje masztowca 1. pionowy, 2. poziomy: ";
                              cin >> kier;
                              if (kier < 1 || kier > 2) // sprawdzenie poprawnosci kierunku
                              {
                                       cout << "Podales zla orientacje
";
                                         continue;
                              }
                              cout << "Podaj rozmiar statku: ";
                              cin >> klasa;
                              if (klasa < 1 || klasa > ST_COUNT) // sprawdzenie poprawnosci dlugosci
                              {
                                       cout << "Podales zly rozmiar
";
                                         continue;
                              }
                              wiersz-=96;
                              int result;
                              switch(kier) // wzgledem kierunku probujemy ustawic nowy statek
                              {
                                          case 1:
                                               result = ustaw(wiersz, kolumna, wiersz+klasa-1, kolumna, klasa);
                                               break;
                                          case 2:
                                               result = ustaw(wiersz, kolumna, wiersz, kolumna+klasa-1, klasa);
                                               break;                                               
                              }
                              
							  system("clear");

                              if (result == 0) // jesli nie pozostaly juz statki do ustawienia
                              {
                                 cout << "Ustawiono wszystkie statki
";
                                 break;
                              }
                              else
							  {
								  if (result > 0) // jesli pozostaly jeszcze statki do ustawienia
									cout << "Pozostalo Ci " << result << " statkow do ustawienia
";
								  else // jesli nie udalo sie ustawic statku czyli result = -1
									  cout << "Nie mozna ustawic w tym miejscu statku, poniewaz zachacza o inny badz wybiega poza plansze
";
							  }
							  
                  }
             }
                  
             void losowo() // losowe ustawienie statkow
             {
                  char wiersz;
                  int kolumna;
                  int kier, klasa;
				  system("clear");
                  while(true)
                  {
                              wiersz = rand()%HEIGHT+1; // wybranie losowe danych
                              kolumna = rand()%WIDTH+1;
                              kier = rand()%2 + 1;
                              klasa = rand()%ST_COUNT+1;  

                              int result;
                              switch(kier)
                              {
                                          case 1:
                                               result = ustaw(wiersz, kolumna, wiersz+klasa-1, kolumna, klasa);
                                               break;
                                          case 2:
                                               result = ustaw(wiersz, kolumna, wiersz, kolumna+klasa-1, klasa);
                                               break;                                               
                              }
                              
                              if (result == 0) // koncowy komunikat
                              {
                                 cout << "Ustawiono wszystkie statki
";
                                 break;
                              }
                  }

                                  
                  
             }
};

void show_results()
{
     cout << "	W	R	P
";
     cout << "Gracz1	"<<gracz1_wyg << "	" << gracz1_rem << "	" <<gracz1_przeg << endl;
     cout << "Gracz2	"<<gracz2_wyg << "	" << gracz2_rem << "	" <<gracz2_przeg << endl;
}


int main()
{
    gracz1_wyg = gracz2_wyg = gracz1_rem = gracz2_rem = gracz1_przeg = gracz2_przeg = 0;
    
    int opcja;
    
                    cout << "Gra w statki (gracz-gracz)
";
		cout << "Aby kontynuowac nacisnij ENTER...";
                getchar();

    while(opcja != 3)
    {
    cout << "Wybierz opcje: " << endl;
    cout << "1. Rozpocznij gre
";
    cout << "2. Wypisz statystyki
";
    cout << "3. Zakoncz program
";
    cin >> opcja;
    switch(opcja)
    {
                 case 1:
                 {     
             
                Plansza plansze[2];

                
                int gracz = 0;
                int wybor = 0;
                while(gracz < 2) // dla kazdego gracza
                {
                    while(wybor<1 || wybor >2) // jesli wybor byl bledny
                    {
                                  cout << "Wybierz sposob rozmieszczenia statkow dla "<< gracz+1 << " gracza
"; 
                                  cout << "1. Reczny
";
                                  cout << "2. Losowy
";
                                  cin >> wybor;
                                  switch(wybor) // wybor ustawiania
                                  {
                                               case 1: plansze[gracz].recznie();
            									    plansze[gracz].show_visible();
            										cout << "Aby kontynuowac nacisnij ENTER...";
                									getchar();
getchar();
            										system("clear");
                                                    gracz++;
                                               break;
                                               case 2: plansze[gracz].losowo();
                                                    plansze[gracz].show_visible();
            										cout << "Aby kontynuowac nacisnij ENTER...";
                									getchar();
getchar();
            										system("clear");
                                                    gracz++;
                                               break;
                                               default: cout << "Wybrales zla opcje
";
                                  }
                    }
            		wybor = 0;
                }
            
            	gracz = 0;
            	int przeciwnik = 1;
            	char wiersz;
            	int kolumna;
            	while(true) // gra wlasciwa
            	{
            		system("clear");
            		cout << "Ruch ma gracz " << gracz+1 << endl;
            		plansze[przeciwnik].show(); // drukowanie tablicy przeciwnika
            		cout << "Podaj pozycje np. e4: ";
                    cin >> wiersz >> kolumna;
                    if (wiersz < 97 || wiersz > 102 || kolumna < 1 || kolumna > WIDTH-2) // pobranie wspolrzednych
                    {
                                        cout << "Podales bledna pozycje
";
            				cout << "Aby kontynuowac nacisnij ENTER...";
                			getchar();
					getchar();
                                        continue;
                    }
            		int result = plansze[przeciwnik].strzal(wiersz-96, kolumna); // proba strzalu
            		switch(result) 
            		{
            			case 0:// jesli nie pozostaly juz statki
            				cout << "Wygral gracz nr " << gracz+1 << "
";
            				break;
            			case -2: // jesli pole bylo puste
            				cout << "Pudlo
";
            				break;
            		}
            
            		int tmp = gracz; // zamiana graczy
            		gracz = przeciwnik;
            		przeciwnik = tmp;
            
            		if (result == 0) // jesli result==0 to jeden z graczy ma zbite wszystkie statki i konczymy gre
            		{
                               if (gracz == 0)
                               {
                                         gracz1_wyg++;
                                         gracz2_przeg++;
                               }
                               else
                               {
                                   gracz2_wyg++;
                                   gracz1_przeg++;
                               }
                               break;
                     }
            
            		cout << "Aby kontynuowac nacisnij ENTER...";
                	getchar();
			getchar();
            	}    
             }

             break;
             case 2:
                  show_results();
                  cout << "Aby kontynuowac nacisnij ENTER...";
                  getchar();
getchar();
                  system("clear");
                  break;
             case 3:
                  "Zapraszam ponownie
";
                  break;
             default:
                     "Wybrales zla opcje
";
             }
}
    
                            
    cout << "Aby kontynuowac nacisnij ENTER...";
    getchar(); // zatrzymanie programu
getchar();
}
Ostatnio zmieniony 21 cze 2011, o 11:23 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C++] Przetłumaczenie kodu na język C

Post autor: wawek91 »

Za darmo gwarantuje Ci że żadnego jelenia nie znajdziesz, który będzie zmieniał kod napisany obiektowo na kod strukturalny.
anka19
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 6 cze 2011, o 09:40
Płeć: Kobieta
Lokalizacja: Warszawa

[C++] Przetłumaczenie kodu na język C

Post autor: anka19 »

No to jestes w stanie nawet zapłacić...
ODPOWIEDZ