Forum FAQForum FAQSearchSearch MemberlistMemberlist Forum ignore listForum ignore list RegisterRegister ProfileProfile Log in to check your private messagesLog in to check your private messages Log inLog in
C programiranje - help!

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side
View previous topic :: View next topic  
Author Message
nel`chee



Joined: 08 Jul 2004
Posts: 2087
Location: Rijeka

PostPosted: 18.09.2006 19:38    Post subject: C programiranje - help! Add user to your forum ignore list Reply with quote

Ispricavam se sto upadam u ovaj forum - ovo mi je jako hitno, na sto cuda sam.
Program se cudno ponasa oko linije 15. Molim svjezi par ociju da mi to pogleda i javi sto je otkrio.

Unaprijed hvala Smile

Quote:
Napisati funkciju koja simulira igru vješala. Za zadani znakovni niz, korisnik pogađa moguća slova riječi, maksimalno n puta pogrešno, nakon čega igra završava (uspješno ili neuspješno). Funkcija u petlji traži od korisnika da unosi znak po znak i ispisuje međurezultat (uspješno pogođene znakove niza), dok korisnik ne pogodi sve znakove ili dok ne pogriješi maksimalan broj puta. Funkcija kao parametre prima pokazivač na zadani znakovni niz i maksimalan broj pogreški, a vraća pokazivač na „pogođen“ niz. Znakovni niz pogađanja se memorijski alocira dinamično, sukladno dužini zadanog niza.
Napisati program koji prvo traži unos znakovnog niza koji će se pogađati i maksimalan broj pogreški, a zatim nakon poziva funkcije i odigrane igre uspoređuje unešeni znakovni niz s onim kojeg funkcija vrati te ispiše obavijest o mogućoj pobjedi (ili ne).

Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
char *pogadjanje(char *niz, int max) {
   char *pogodak='\0', slovo; // pogodak pocinje kao prazan niz
      char *pomocni=pogodak; // pomocni niz pokazivat ce uvijek na prvo mjesto pogodjenog niza
   int n=0;
   while((n<max) && (strlen(pomocni)<strlen(niz))) { // dok god nisu ispucani svi pokusaji i pogodjeni niz je kraci od zadanog
      printf("\nUnesite slovo: ");
      getchar(); // dodano da u varijablu slovo ne uleti znak za novi red \n
      slovo=getchar();
      if(strchr(niz,slovo) != NULL) { // provjera je li slovo u nizu
         realloc(pogodak, sizeof(char)*(strlen(pogodak))); // ako jest, alociramo memoriju za jos jedno mjesto
         *pogodak=slovo; // pisemo slovo na zadnje mjesto u pogodak - GRESKA!!!
         //printf("%s\n", pomocni);
         pogodak++; // pomicemo se za jedno mjesto
      }
      else n++;
      printf("Broj pogresaka: %d. Uspjesno pogodjena slova: %s\n", n, pomocni); // ispis pogodjenih slova
   }
   *pogodak='\0'; // na kraj dodajemo \0 znak da se zna kako je ovdje kraj niza
   return pomocni; // funkcija vraca pokazivac na 1. clan niza
}
int main() {
   char niz[MAX];
   int n;
   //niz = malloc(sizeof(char)*MAX);
   printf("Unesite niz koji ce se pogadjati: ");
   scanf("%s", &niz);
   printf("Unesite maksimalan broj pogreski: ");
   scanf("%d", &n);
   if(strlen(pogadjanje(niz,n))==strlen(niz)) // ako su duljine nizova iste, znaci da su sva slova pogodjena
      printf("\nPobijedili ste!");
   else printf("\nIzgubili ste!");
   return 0;
}

_________________
art & design portfoliofree Photoshop brushes stuffsketchblogfacebook
Back to top
View user's profile Send private message Visit poster's website Twitter profile
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 19.09.2006 00:33    Post subject: Add user to your forum ignore list Reply with quote

što si napisala bilo je koma na nekim mjestima... mislim da još ne znaš što je adresa, što vrijednost, čemu pointeri i tako

working:
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100

char *pogadjanje(char *niz, int max) {
   char *pogodak = (char*) malloc(sizeof(char));
   *pogodak = NULL; // pogodak pocinje kao prazan niz
   char slovo;
   int n=0; // brojac pokusaja
   int i=0; // offset (duljina) "pogodak" stringa
   
   while(n<max && strlen(pogodak) < strlen(niz)) {
      printf("\nUnesite slovo: ");
      scanf("%c", &slovo);
      fflush(stdin);
    
      if(strchr(niz, slovo)) { // provjera je li slovo u nizu
            pogodak[i]=slovo;
            i++;
            realloc(pogodak, sizeof(char)*(i+1));
            pogodak[i]=NULL;
      }
      else n++;
      printf("Uspjesno pogodjena slova: %s", pogodak); // ispis pogodjenih slova
   }
   
   return pogodak; // funkcija vraca pokazivac na 1. clan niza
}

int main() {
   char niz[MAX];
   int n;
   
   printf("\nUnesite niz koji ce se pogadjati: ");
   scanf("%s", niz);
   fflush(stdin);
   printf("\nUnesite maksimalan broj pogreski: ");
   scanf("%d", &n);
   fflush(stdin);
   
   // ako su duljine nizova iste, znaci da su sva slova pogodjena
   if(strlen(pogadjanje(niz,n))==strlen(niz)) printf("\n\nPobijedili ste!");
   else printf("\n\nIzgubili ste!");
   
   return 0;
}
Back to top
View user's profile Send private message Send e-mail Visit poster's website
nel`chee



Joined: 08 Jul 2004
Posts: 2087
Location: Rijeka

PostPosted: 19.09.2006 00:43    Post subject: Add user to your forum ignore list Reply with quote

hvala ti puno, pogledati cu to... uglavnom, do ovog sam ja dosla i radi za niz do 3 slova :/ nakon 4. slova mi uvijek doda na kraju "inf", ne kuzim zasto... grr.

btw, zasto moja deklaracija ne valja? ne vidim zasto bi trebalo malloc na pocetku, nikad to u programu nisam vidjela.
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
char *pogadjanje(char *niz, int max) {
   char *pogodak="\0", slovo; // pogodak pocinje kao prazan niz
      char *pomocni=pogodak; // pomocni niz pokazivat ce uvijek na prvo mjesto pogodjenog niza
   int n=0;
   while((n<max) && (strlen(pomocni)<strlen(niz))) { // dok god nisu ispucani svi pokusaji i pogodjeni niz je kraci od zadanog
      printf("\nUnesite slovo: ");
      getchar(); // dodano da u varijablu slovo ne uleti znak za novi red \n
      slovo=getchar();
      if(strchr(niz,slovo) != NULL) { // provjera je li slovo u nizu, isto kao strstr samo sto je 2. argument character a ne string
         realloc(pogodak, sizeof(char)*(strlen(pogodak))); // ako jest, alociramo memoriju za jos jedno mjesto
         *pogodak=slovo; // pisemo slovo na zadnje mjesto u pogodak
         pogodak++; // pomicemo se za jedno mjesto
      }
      else n++;
      printf("Broj pogresaka: %d. Uspjesno pogodjena slova: %s\n", n, pomocni); // ispis pogodjenih slova
   }
   *pogodak='\0'; // na kraj dodajemo \0 znak da se zna kako je ovdje kraj niza
   return pomocni; // funkcija vraca pokazivac na 1. clan niza
}
int main() {
   char niz[MAX];
   int n;
   //niz = malloc(sizeof(char)*MAX);
   printf("Unesite niz koji ce se pogadjati: ");
   scanf("%s", &niz);
   printf("Unesite maksimalan broj pogresaka: ");
   scanf("%d", &n);
   if(strlen(pogadjanje(niz,n))==strlen(niz)) // ako su duljine nizova iste, znaci da su sva slova pogodjena
      printf("\nPobijedili ste!\n\n");
   else printf("\nIzgubili ste!\n\n");
   return 0;
}


Last edited by nel`chee on 19.09.2006 03:06; edited 1 time in total

_________________
art & design portfoliofree Photoshop brushes stuffsketchblogfacebook
Back to top
View user's profile Send private message Visit poster's website Twitter profile
nel`chee



Joined: 08 Jul 2004
Posts: 2087
Location: Rijeka

PostPosted: 19.09.2006 00:49    Post subject: Add user to your forum ignore list Reply with quote

tvoj program:
Code:
Wedit output window build: Tue Sep 19 00:48:36 2006
Error c:\progs\lcc\projects\blah\vjesala2.c: 8  operands of = have illegal types 'char' and 'pointer to void'
Error c:\progs\lcc\projects\blah\vjesala2.c: 22  operands of = have illegal types 'char' and 'pointer to void'
Compilation + link time:0.1 sec, Return code: 1

_________________
art & design portfoliofree Photoshop brushes stuffsketchblogfacebook
Back to top
View user's profile Send private message Visit poster's website Twitter profile
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 19.09.2006 12:30    Post subject: Add user to your forum ignore list Reply with quote

ti koristiš lcc, ja sam kompajlirao sa cl (MS Visual C) - mislio sam da i vi to koristite pošto tjeraju ljude na FERu da koriste Visual Studio

probaj promijeniti liniju 22, dodati casting u char:
Code:
pogodak[i]= (char) NULL;

a moje prve dvije linije zamijeni sa
Code:
char *pogodak = "\n";


tvoj program:
Code:
char *pomocni=pogodak;
...
pogodak++;

ovo je glupo. stvaraš pomoćni pointer koji ostaje tamo gdje je bio originalan a ovaj prvi inkrementiraš Confused ne diraj originalni pointer i napravi pomoćni integer kojeg inkrementiraš (kao kod mene)

druga greška:
Code:
*pogodak=slovo;
pogodak++;

napišeš slovo na kraj "pogodak" stringa, ali nisi terminirala string sa null znakom sve do kraja petlje (prije return)... to nije dobro jer unutar petlje radiš strlen() na tom nizu, treba biti null-terminiran
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 19.09.2006 12:49    Post subject: Add user to your forum ignore list Reply with quote

...i nemoj koristiti getch() jer to nije C standard, koristi getchar
Back to top
View user's profile Send private message Send e-mail Visit poster's website
nel`chee



Joined: 08 Jul 2004
Posts: 2087
Location: Rijeka

PostPosted: 19.09.2006 13:03    Post subject: Add user to your forum ignore list Reply with quote

hmm sad je kasno za popravke, trebalo mi je za danas... i btw koristim getchar, ne znam gdje si vidio drugacije Confused

razlog zasto koristim pointer koji pokazuje na prvi clan je taj sto sam istu metodu vidjela u rijesenim zadacima s FERa pa sam pretpostavila da je bolje. oh well. vidjet cu sto mi frend javi, nadam se da ce bit okej Sad

_________________
art & design portfoliofree Photoshop brushes stuffsketchblogfacebook
Back to top
View user's profile Send private message Visit poster's website Twitter profile
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 19.09.2006 21:00    Post subject: Add user to your forum ignore list Reply with quote

sorry za getch, my bad Sad

gle ako trebaš pointer + offset, ne trebaju ti dva pointera od kojih jedan inkrementiraš nego ti treba pointer + integer - drugi način je bolji jer je fleksibilniji, makar naravno možeš i na prvi način

tvoj problem je bio što si povećavala string, dodavala slova na kraj, ali nisi terminirala sa NULL pa su zbog toga string funkcije na tom nizu poludjele (izbacile te iz programa ili što ti ja znam)
Back to top
View user's profile Send private message Send e-mail Visit poster's website
nel`chee



Joined: 08 Jul 2004
Posts: 2087
Location: Rijeka

PostPosted: 19.09.2006 22:15    Post subject: Add user to your forum ignore list Reply with quote

je, ma kuzim... to sa null je bila glupost.

prosao je Very Happy
citiram
Quote:
Dao mi je dva, nije me nista pita samo je vidija da radi!

pretpostavljam da je unio niz od tri slova pa je radilo bez greske Laughing kakva sreca...

_________________
art & design portfoliofree Photoshop brushes stuffsketchblogfacebook
Back to top
View user's profile Send private message Visit poster's website Twitter profile
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 19.09.2006 23:16    Post subject: Add user to your forum ignore list Reply with quote

a to nije bilo za tebe? što ti nemaš C programiranje sa svom faxu? Confused
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group