[C++]dla bezpieczeństwa


(Botoja95) #1

include

using namespace std;

int main(int argc, char **argv)

{

int suma[5]={1,6,8,3,5};

string imiona[5]={"Ala","Maciek","Zenek","Bogdan","Jan"};

string itmp;

int tmp;

for (int j=0; j>5; j++){

for (int i=0; i<5; i++){

if(suma_>suma[i+1]){_

tmp=suma__;

suma__=suma[i+1];

suma[i+1]=tmp;

itmp=imiona__;

imiona__=imiona[i+1];

imiona[i+1]=itmp;

}

}

}

cout<<"Wyniki sortowań"<

for( int i=0; i<5; i++){

cout<

}

return 0;

}


(Wajdzik) #2

Wrzucać treść programu w znacznik CODE i pamiętaj o Tabulatorach, bo ciężko coś rozeznać.

Post powinien wyglądać w ten sposób:

#include 

#include 

using namespace std;


void sleep (int ile)

	{

	int b=ile+1;

	int tmp=time(0);

	int stop=time(0)+ile;

	do

		{

		if(time(0)>tmp)

			{

			b--;

			tmp=time(0);

			cout<
			}

		}while(time(0)

	}


int main(int argc, char **argv)

{


string imiona[5];

string boty[5]={"Gienio","Zygmunt","Adek","Iduś","Amadeusz"};

const int maxLG=5;

int suma1[10];

int ilegraczy;

int ilegier;

string itmp;

int tmp;


cout<<"Ile graczy ? " <
cin>>ilegraczy;


cout<<"Ile gier ? " <
cin>>ilegier;




for (int i=0; i
	{


	cout<<"Podaj imie "<
	cin>>imiona[i];

	suma1[i]=0;

	cout<


	//sleep(5);


	for (int j=0; j
		{



		srand (time(0)+j) ;

		int liczba =rand ()%6;


		suma1[i]=suma1[i]+liczba;


		cout<<"Wylosowano : "<
		cout<

		for(int i=ilegraczy; i
			{

			imiona[i]=boty[i];

			}

		}



	cout<<"Suma punktów wynosi : "<
	}

cout<

for (int j=0; j
	{

	for (int i=0; i
		{


		if(suma1[i]
			{

			tmp=suma1[i];

			suma1[i]=suma1[i+1];

			suma1[i+1]=tmp;


			itmp=imiona[i];

			imiona[i]=imiona[i+1];

			imiona[i+1]=itmp;

			}

		}

	}


cout<<"Wyniki sortowań"<
cout<
for (int i=0; i
	{

	cout<


	}


return 0;

}

[/code]




Sprawdzę, może znajdę jakiś sposób na rozwiązanie jeśli nikt inny mnie nie ubiegnie :P





Dodano:



ten fragment:

[code]for(int i=ilegraczy; i { imiona[i]=boty[i]; } }
nie powinien być wewnątrz pętli

for (int i=0; i


Dodaj pod tą pętlą podobną ale zaczynającą się właśnie od

[code]for(int i=ilegraczy; i { imiona[i]=boty[i]; } }


(Botoja95) #3

Ok, na następny raz już będę wiedział :slight_smile: Jest to mój pierwszy wątek na tym forum i z góry dzięki :stuck_out_tongue:


(Wajdzik) #4

Sprawdź co napisałem wyżej.

Robiłeś do tego programu schemat blokowy? Jeśli tak to wrzuć go tutaj, bo albo masz źle schemat napisany, albo nie stosowałeś się do schematu pisząc program :stuck_out_tongue:


(Botoja95) #5

Nie robiłem schematu blokowego, ponieważ jeszcze nie mieliśmy tego na lekcjach w szkole, a jeżeli chodzi to co wyżej napisałeś to nie za bardzo to rozumiem ;/


(Wajdzik) #6

Jak można uczyć programowania nie ucząc schematów?

Ja zrobiłem to w ten sposób - nie mam jednak kompilatora, żeby sprawdzić czy na pewno działa.

#include 

#include 

using namespace std;


void sleep (int ile)

	{

	int b=ile+1;

	int tmp=time(0);

	int stop=time(0)+ile;

	do

		{

		if(time(0)>tmp)

			{

			b--;

			tmp=time(0);

			cout<
			}

		}while(time(0)

	}


int main(int argc, char **argv)

{


string imiona[5];

string boty[5]={"Gienio","Zygmunt","Adek","Iduś","Amadeusz"};

const int maxLG=5;

int suma1[10];

int ilegraczy;

int ilegier;

string itmp;

int tmp;


cout<<"Ile graczy ? " <
cin>>ilegraczy;


cout<<"Ile gier ? " <
cin>>ilegier;




for (int i=0; i
	{


	cout<<"Podaj imie "<
	cin>>imiona[i];

	suma1[i]=0;

	cout<


	//sleep(5);


	for (int j=0; j
		{



		srand (time(0)+j) ;

		int liczba =rand ()%6;


		suma1[i]=suma1[i]+liczba;


		cout<<"Wylosowano : "<
		cout<


		}



	cout<<"Suma punktów wynosi : "<
	}


for(int i=ilegraczy; i
	{

	imiona[i]=boty[i];

	for (int j=0; j
		{



		srand (time(0)+j) ;

		int liczba =rand ()%6;


		suma1[i]=suma1[i]+liczba;


		cout<<"Wylosowano : "<
		cout<


		}



	}	


	cout<


for (int j=0; j
	{

	for (int i=0; i
		{


		if(suma1[i]
			{

			tmp=suma1[i];

			suma1[i]=suma1[i+1];

			suma1[i+1]=tmp;


			itmp=imiona[i];

			imiona[i]=imiona[i+1];

			imiona[i+1]=itmp;

			}

		}

	}


cout<<"Wyniki sortowań"<
cout<
for (int i=0; i
	{

	cout<


	}


return 0;

}

[/code]




W Twoim przykładzie dodawałeś boty na wolne miejsca po każdym dodaniu gracza zdeklarowanego, ale nic z tymi botami nie robiłeś. Teraz program najpierw dodaje graczy i rzuca dla nich kostką, a później dodaje boty i rzuca dla nich kostką. Dodatkowo na końcu wypisywałeś wyniki tylko dla graczy, ja poprawiłem, żeby wypisywał dla wszystkich. Dodatkowo program umożliwia deklarację większej ilości graczy niż 5, a założenie jest że 5 graczy to max, więc całość bym jeszcze wrzucił w

[code]if(ilegraczy<6) tresc programu; else cout<<"zbyt dużo graczy";

Pomyśl też nad tym "ifem" żeby sprawdzał czy nie wprowadzono ujemnej lub niecałkowitej liczby graczy.


(Botoja95) #7

Jest prawie dobrze :slight_smile: Tyle że moim zdaniem powinno być inaczej. Niżej wkleiłem to co się wyświetla w terminalu.

Ile graczy ?

2

Ile gier ?

2

Podaj imie 1 gracza :

Zenek

Zenek

Wylosowano : 1 suma : 1

Wylosowano : 2 suma : 3

Suma punktów wynosi : 3

Podaj imie 2 gracza :

Adek

Adek

Wylosowano : 1 suma : 1

Wylosowano : 1 suma : 2

Suma punktów wynosi : 2

Wylosowano : 1 suma : 1

Wylosowano : 1 suma : 2

Wylosowano : 1 suma : 3129428

Wylosowano : 1 suma : 3129429

Wylosowano : 1 suma : 2

Wylosowano : 1 suma : 3

Wyniki sortowań

  1. Zenek 3 pkt

  2. Adek 2 pkt

  3. Adek 2 pkt

  4. Iduś 3129429 pkt

  5. Amadeusz 3 pkt

Powinny się jeszcze wyświetlać nazwy botów przy ich losowaniu, tak jak przy normalnych graczach, a drugi problem to bardzo wysoka liczba pkt czy bocie "Iduś" też nie mam pojęcia skąd aż taka . ;/


(Wajdzik) #8

Zmień tą linie w for dla graczy i dla botów:

cout<<"Wylosowano : "<

tak, żeby miała format: "Dla gracza x wylosowano: y, Suma: z" (Dodatkowo mógłbyś zrobić formę "Dla gracza x w grze nr "p", wylosowano: y, Suma: z")

Duża suma wyskoczyła, bo w funkcji for dla botów brakuje zerowania sumy czyli "suma1[i]=0;" "imiona[i]=boty[i];.

Następnym razem sprawdzaj program stosując inne imiona niż te nadane botom, bo myślałem, że program powtarza wpisane przez Ciebie imię "Adek" :stuck_out_tongue:


(Drobok) #9

srand ma być poza for, losujesz od 0 do 5


(Botoja95) #10

dobra z imionami i dużą liczbą mam już z głowy :slight_smile: Ale wystąpił kolejny problem ;/ Wyniki sortowań wyświetlane pod koniec programu ;/ osobno sortuje pkt dla graczy i osobno dla botów. Niżej wkleiłem jak sie wyświetla teraz a jak powinno :

Tak jest teraz :

  1. Lukasz 9 pkt

  2. Antek 5 pkt

  3. Zenek 2 pkt

  4. Iduś 15 pkt

  5. Amadeusz 12 pkt

A powinno być tak :

  1. Iduś 15 pkt

  2. Amadeusz 12 pkt

  3. Lukasz 9 pkt

  4. Antek 5 pkt

  5. Zenek 2 pkt

Z czego Iduś i Amadeusz to boty, a reszta to gracze.


(Drobok) #11

Posortuj sobie wyniki, zamieniając też imiona. (popatrz na też mój pierwszy post)


(Wajdzik) #12

Sortowanie powinno być nie na podstawie "ilegier" tylko "maxLG". Wtedy pewnie będzie działać dobrze, bo funkcja sortująca nie wie którzy gracze to boty. Po prostu posortowało Ci pierwszych trzech graczy, bo pewnie zrobiłeś 3 rzuty kostką.


(Botoja95) #13

:smiley:

Dzięki wielkie wam :slight_smile: Już jest wszystko OK ! :stuck_out_tongue:

Nie przypuszczałem że znajdą się tacy ludzie jak wy :smiley:


(Wajdzik) #14

Nic ciekawego w robocie się nie dzieję, więc można siedzieć na forum i pomagać innym skoro szef za ten czas płaci :stuck_out_tongue:

Posprawdzaj sobie jeszcze dokładnie wyniki, czy wszędzie dobrze Ci sumuje, bo ja sprawdzałem tylko ogólną funkcjonalność :stuck_out_tongue:


(Botoja95) #15

Hehe :smiley:

Wszystko jest dobrze :wink: Program działa tak jak chciałem :wink:

Żeby był jeszcze fajniejszy dodałem w nim pętle while :slight_smile:

To dałem na początek :

cout<<"Witaj w grze Kości ! "<
	cout<<"1 - Start "<
	cout<<"2 - Zakończ "<
	cout<
	cin>>znak;

	while ( znak == 1 ){

A to na koniec :

cout<
		cout<<"Czy chcesz zagrać jeszcze raz ? "<
		cout<<"1 - Tak"<
		cout<<"2 - Nie"<
		cin>>znak;

	}

:slight_smile:

Jeszcze raz bardzo dziękuje, pozdrawiam i życzę przyjemnej pracy :slight_smile:

-- Dodane 25.02.2013 (Pn) 12:56 --

Proszę o usunięcie tematu ... problem rozwiązany