|- - -|
|

U programu se u nisci čuva sadržaj reči (sastavljen od velikih slova engleske abecede) koju korisnik pogađa. Napisati program vesanje koji od strane korisnika učitava jedno po jedno slovo koje unosi korisnik pogađajući reč. Pri učitavanju svakog uspešno pogođenog slova program treba da ispiše sve pojave onih slova u reci koja su do tada pogođena. Na mestima nepogođenih slova treba da stoje *. Voditi racuna da korisnik može da unese nešto što nije slovo (u kom slučaju program ne treba da mu ispiše trenutno stanje pogodjenih slova, jer se ništa nije promenilo). Takođe, predvideti mogućnost da se korisniku uvaži unos malog slova (tretirati ga kao odgovarajuće veliko slovo). Program treba da se zaustavi nakon više od n neuspelih pokušaja ili, u suprotnom da ispiše ukupan broj pokušaja (uspešnih, neuspešnih) u slučaju da su pogođena sva slova za manje od n neuspelih pokušaja. Ceo broj n se zadaje iz komandne linije.
rešenje (.c)

#include <stdio.h>
#define MAX 80
void getline(char s[], int g[], int lim);
int vecpogadjano(char p[], char c);
int proveri(char s[], int g[], char c);
int pogodjen(int g[]);
main(int argc, char *argv[])
{
char s[MAX], c, znak, prosli[30];
int i, j=0, n=0, g[MAX], uspesnih=0, neuspesnih=0, pogodak=0, unizu;
prosli[0] = '\0';
for (i=0; (((znak=argv[1][i]) >='0') && (znak <= '9')); i++)
n = n*10+(znak-'0');
if ((znak != '\0') || (n == 0))
{
printf("Niste pravilno uneli broj u komandnoj liniji. Unesite broj ponovo:\n");
scanf("%d", &n);
getchar();
}
printf("Unesite rec za pogadjanje\n");
getline(s, g, MAX);
if (s[0] == '\0')
printf("Rec koja se pogadja mora da sadrzi bar jedno slovo\n");
else
{
for(i=1; i<100; i++)
printf("\n");
printf("Unesite slovo\n");
while ((neuspesnih < n) && (!pogodak))
{
c = getchar();
getchar();
if ((c >= 'a') && (c <= 'z'))
c = c-32;
if (vecpogadjano(prosli, c))
{
printf("Za slovo %c ste vec proveravali da se nalazi u reci\n", c);
continue;
}
else if ((c >= 'A') && (c <= 'Z'))
{
prosli[j++] = c;
prosli[j] = '\0';
}
if ((c >= 'A') && (c <= 'Z'))
{
unizu = proveri(s, g, c);
if (unizu)
uspesnih++;
else
neuspesnih++;
pogodak = pogodjen(g);
if (unizu && !pogodak)
{
printf("Znak %c se nalazi u trazenoj reci:\n", c);
for (i=0; s[i]; i++)
if (g[i])
printf("%c", s[i]);
else
printf("*");
printf("\nUnesite sledece slovo\n");
}
if (!unizu && (neuspesnih < n))
{
printf("Znak %c se ne nalazi u trazenoj reci:\n", c);
for (i=0; s[i]; i++)
if (g[i])
printf("%c", s[i]);
else
printf("*");
printf("\nMozete da promasite jos samo %d puta\n", n-neuspesnih);
printf("Unesite sledece slovo\n");
}
}
else
{
printf("Uneseni znak nije slovo! Pazite kako trosite pokusaje!!!\n");
neuspesnih++;
printf("Mozete da promasite jos samo %d puta\n", n-neuspesnih);
}
}
if (pogodak)
{
printf("\nSvaka cast!!! Pogodili ste trazenu rec!!!\n");
printf("Trazena rec je bila: ");
for (i=0; s[i]; i++)
printf("%c", s[i]);
printf("\nPogodili ste iz %d pokusaja, od cega je bilo\n", uspesnih+neuspesnih);
printf("%d uspesnih i\n", uspesnih);
printf("%d neuspesnih pokusaja.\n", neuspesnih);
}
if (neuspesnih >= n)
{
printf("\nGame Over\nNiste pogodili trazenu rec :-(\n");
printf("Trazena rec je bila: ");
for (i=0; s[i]; i++)
printf("%c", s[i]);
printf("\nPokusali ste %d puta, od cega je bilo\n", uspesnih+neuspesnih);
printf("%d uspesnih i\n", uspesnih);
printf("%d neuspesnih pokusaja.\n", neuspesnih);
}
}
return 0;
}
void getline(char s[], int g[], int lim)
{
int i;
char c;
for(i=0; ((i<lim-1) && (c=getchar()) != '\n');)
{
if ((c >= 'A') && (c <= 'Z'))
{
s[i] = c;
g[i++] = 0;
}
else if ((c >= 'a') && (c <= 'z'))
{
s[i] = c-32;
g[i++] = 0;
}
else
{
s[i] = '\0';
g[i++] = 2;
}
}
s[i] = '\0';
g[i] = 2;
}
int vecpogadjano(char p[], char c)
{
int i;
for (i=0; p[i]; i++)
if (c == p[i])
return 1;
return 0;
}
int proveri(char s[], int g[], char c)
{
int i=0, unizu=0;
while (s[i])
if (s[i] == c)
{
g[i] = 1;
unizu = 1;
i++;
}
else
i++;
return unizu;
}
int pogodjen(int g[])
{
int i;
for (i=0; g[i] != 2; i++)
if (g[i] == 0)
return 0;
return 1;
}

Primer:

C:\...>vesanje 4
Unesite rec za pogadjanje
BANANA

(ovde ide sto praznih linija kako bi se očistio ekran)

Unesite slovo
i
Znak I se ne nalazi u trazenoj reci:
******
Mozete da promasite jos samo 3 puta
Unesite sledece slovo
a
Znak A se nalazi u trazenoj reci:
*A*A*A
Unesite sledece slovo
B
Znak B se nalazi u trazenoj reci:
BA*A*A
Unesite sledece slovo
4
Uneseni znak nije slovo! Pazite kako trosite pokusaje!!!
Mozete da promasite jos samo 2 puta
b
Za slovo B ste vec proveravali da se nalazi u reci
r
Znak R se ne nalazi u trazenoj reci:
BA*A*A
Mozete da promasite jos samo 1 puta
Unesite sledece slovo
n

Svaka cast!!! Pogodili ste trazenu rec!!!
Trazena rec je bila: BANANA
Pogodili ste iz 6 pokusaja, od cega je bilo
3 uspesnih i
3 neuspesnih pokusaja.


|
|= - =|
|_ - _|