Program losujący zwycięzców

0

Mam takie zadanie:
zadanie.png

Oto moje rozwiązanie:

 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
		
struct data
{
	char imie[50];
	int nr_telefonu[9];
	int wygrywa;	
};	


int losuj(int tab_losuj[2])
{
	tab_losuj[0]=rand()%10;
	tab_losuj[1]=rand()%10;
	
	return tab_losuj[2];
}


void wprowadz_dane(struct data *tab, int n)
{
	int i,j;
	int numer=0;
	char nazwa[50];
	
	for(i=0;i<n;i++)
	{
	printf("Wprowadz imie:");	
	scanf("%49s",tab[i].imie);
	
	
	printf("Wprowadz nr_telefonu:\n");
		for(j=0;j<9;j++)
		{
			scanf("%d",&numer);
			tab[i].nr_telefonu[j] = numer;
		}
	}
		

}

int wygrywajace(struct data *tab, int n,int tab_losowe[2])
{
	int ilosc,i,j;	
	
	for(i=0;i<n;i++)
	{
		if(tab[i].nr_telefonu[7]==tab_losowe[0]&&tab[i].nr_telefonu[8]==tab_losowe[1])
		{
			ilosc++;
			tab[i].wygrywa=1;
		}
	}
	
	return ilosc;
}

void wyswietl_wygranych(struct data *tab,int liczba_wygranych,int n)
{
	int i;
	
	printf("Wygrala/y %d osoba/osob \n",liczba_wygranych);
	printf("Oto zwyciezcy:\n");
	
	for(i=0;i<n;i++)
	{
		if(tab[i].wygrywa==1)
		{
		printf("Pan/i:%s\n",tab[i].imie);
		}
	}
	
}

int main(int argc, char *argv[]) {
	
	srand(time(NULL));
	struct data tab[100];
	int n;
	int liczba_wygranych=0;
	int tab_losowe[2];
	int temp=0;
	
	printf("Wprowadz ilosc osob telefonujacych:");
	scanf("%d",&n);
	
	wprowadz_dane(tab,n);
	
		do
		{
		losuj(tab_losowe);
		liczba_wygranych=wygrywajace(tab,n,tab_losowe);
	
		temp++;
		}while(liczba_wygranych==0);

	//printf("%d",temp);	
	wyswietl_wygranych(tab,liczba_wygranych,n);

	return 0;
}

http://codepaste.net/si4d8g

Tutaj screen z konsoli:
Bez tytułu1.png

Wszystko mi działa, tylko mam wątpliwości co do poprawności tego programu. Mógłby ktoś stestować/przeanalizować, czy jest wszystko ok? Ewentualnie jakieś sugestie etc.
Z góry dzięki!

2
  1. int nr_telefonu;
  2. int losuj() { return rand()%100; }
  3. scanf("%d",&tab[i].nr_telefonu);
  4. if(tab[i].nr_telefonu%100==losowe)
  5. int losowe;
  6. losowe=losuj();
0

Dostosowałem się do twoich wskazówek, ale coś mi teraz nie działa:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
		
struct data
{
	char imie[50];
	int nr_telefonu;
	int wygrywa;	
};	


int losuj() 
{ 
    return rand()%100;
}


void wprowadz_dane(struct data *tab, int n)
{
	int i,j;
	
	for(i=0;i<n;i++)
	{
	printf("Wprowadz imie:");	
	scanf("%49s",tab[i].imie);
	
	printf("Wprowadz nr_telefonu:\n");
	scanf("%d",&tab[i].nr_telefonu);
	}
		

}

int wygrywajace(struct data *tab, int n,int losowe)
{
	int ilosc,i,j;	
	
	for(i=0;i<n;i++)
	{
		if(tab[i].nr_telefonu%100==losowe)
		{
			ilosc++;
			tab[i].wygrywa=1;
		}
	}
	
	return ilosc;
}

void wyswietl_wygranych(struct data *tab,int liczba_wygranych,int n)
{
	int i;
	
	printf("Wygrala/y %d osoba/osob \n",liczba_wygranych);
	printf("Oto zwyciezcy:\n");
	
	for(i=0;i<n;i++)
	{
		if(tab[i].wygrywa==1)
		{
		printf("Pan/i:%s\n",tab[i].imie);
		}
	}
	
}

int main(int argc, char *argv[]) {
	
	srand(time(NULL));
	struct data tab[100];
	int n;
	int liczba_wygranych=0;
	int losowe;
	int temp=0;

	printf("Wprowadz ilosc osob telefonujacych:");
	scanf("%d",&n);
	
	wprowadz_dane(tab,n);
	
		do
		{
		losowe=losuj();
		liczba_wygranych=wygrywajace(tab,n,losowe);
	
		}while(liczba_wygranych==0);

	wyswietl_wygranych(tab,liczba_wygranych,n);

	return 0;
}

 
1
  1. Nie rozumiesz inkrementacji: http://4programmers.net/Forum/1101404
  2. scanf(" %49s",tab[i].imie); - spacja
  3. if(tab[i].wygrywa) - liczba może być traktowana jako wartość logiczna 0-> false; reszta->true;
  4. while(!(liczba_wygranych=wygrywajace(tab,n,losuj())) {} - zamiast całego brzydkiego do/while
0

Mogę jeszcze poprosić o jakieś koło ratunkowe? Wydaje mi się, że zrobiłem wedle Twoich wskazówek i dalej to samo. Poprawnie wyświetla ilość wygrywających np.3, ale przy wypisaniu wypisuje tylko 1 imię, a powinno jeszcze wypisać 2 pozostałe.

0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
struct data
{
    char imie[50];
    int nr_telefonu;
    int wygrywa;    
};    
 
 
int losuj() 
{ 
    return rand()%100;
}
 
 
void wprowadz_dane(struct data *tab, int n)
{
    int i,j;
 
    for(i=0;i<n;++i)
    {
    printf("Wprowadz imie:");    
    scanf(" %49s",tab[i].imie);
 
    printf("Wprowadz nr_telefonu:\n");
    scanf("%d",&tab[i].nr_telefonu);
    }
 
 
}
 
int wygrywajace(struct data *tab, int n,int losowe)
{
    int ilosc,i;    
 
    for(i=0;i<n;++i)
    {
        if(tab[i].nr_telefonu%100==losowe)
        {
            ++ilosc;
            tab[i].wygrywa=1;
        }
    }
 
    return ilosc;
}
 
void wyswietl_wygranych(struct data *tab,int liczba_wygranych,int n)
{
    int i;
 
    printf("Wygrala/y %d osoba/osob \n",liczba_wygranych);
    printf("Oto zwyciezcy:\n");
 
    for(i=0;i<n;++i)
    {
        if(tab[i].wygrywa)
        {
        printf("Pan/i:%s\n",tab[i].imie);
        }
    }
 
}
 
int main(int argc, char *argv[]) {
 
    srand(time(NULL));
    struct data tab[100];
    int n;
    int liczba_wygranych=0;
    int losowe;
    int temp=0;
 
    printf("Wprowadz ilosc osob telefonujacych:");
    scanf("%d",&n);
 
    wprowadz_dane(tab,n);
 
    while(!(liczba_wygranych=wygrywajace(tab,n,losuj()))) {}
 
    wyswietl_wygranych(tab,liczba_wygranych,n);
 
    return 0;
}
 
1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
struct data
  {
   char imie[50];
   int nr_telefonu;
   int wygrywa;    
  }; 
 
int losuj() 
  { 
   return rand()%100;
  } 
 
void wprowadz_dane(struct data *tab,int n)
  {
   int i; 
   for(i=0;i<n;++i)
     {
      printf("Wprowadz imie:");    
      scanf(" %49s",tab[i].imie); 
      printf("Wprowadz nr_telefonu:\n");
      scanf("%d",&tab[i].nr_telefonu);
      tab[i].wygrywa=0; /* trzeba zainicjalizować */
     }
  }
 
int wygrywajace(struct data *tab, int n,int losowe)
  {
   int ilosc=0,i; /* ilosc - trzeba wqyzerować */
   for(i=0;i<n;++i)
     {
      if(tab[i].nr_telefonu%100==losowe)
         {
          ++ilosc;
          tab[i].wygrywa=1;
         }
     }
   return ilosc;
  }
 
void wyswietl_wygranych(struct data *tab,int liczba_wygranych,int n)
  {
   int i; 
   printf("Wygrala/y %d osoba/osob \n",liczba_wygranych);
   printf("Oto zwyciezcy:\n"); 
   for(i=0;i<n;++i)
     {
      if(tab[i].wygrywa) printf("Pan/i:%s\n",tab[i].imie);
     }
  }
 
int main() 
  {
   struct data tab[100];
   int n=101; /* dla kontroli */
   int liczba_wygranych=0;
   srand(time(NULL)); /* najpierw deklaracje póxniej kod */
   while(n>100)
     {
      printf("Wprowadz ilosc osob telefonujacych (<=100):");
      scanf("%d",&n);
      while(getchar()!='\n') {} /* oprózniamy bufor klawiatury */
     }
   wprowadz_dane(tab,n); 
   while(!(liczba_wygranych=wygrywajace(tab,n,losuj()))) {}
   wyswietl_wygranych(tab,liczba_wygranych,n);
   return 0;
  }
0

Wszystko jasne! Wielkie dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1