Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

stringovi-zadatak
WWW:
Idite na Prethodno  1, 2, 3  Sljedeće
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 19:15 sri, 6. 3. 2013    Naslov: Citirajte i odgovorite

[quote="ivanaaaa"]ma prilično sam sigurna da se nećete snaći u tome, dost je komplicirani taj program i svašta nešto radi, pa sam ja izvukla van pojednostavljeno da pitam :D[/quote]

Na stranu prispodoba da se Marko nece snaci u nekom kodu [ :lol: ], meni se cini da si previse pojednostavila. Imam dojam da zapravo ne radis sa stringom nego s nizom stringova, a u tom slucaju ti je vjerojatno deklaracija kriva. No, za to provjeriti, treba vidjeti relevantne dijelove koda, bez pojednostavljivanja.
ivanaaaa (napisa):
ma prilično sam sigurna da se nećete snaći u tome, dost je komplicirani taj program i svašta nešto radi, pa sam ja izvukla van pojednostavljeno da pitam Very Happy


Na stranu prispodoba da se Marko nece snaci u nekom kodu [ Laughing ], meni se cini da si previse pojednostavila. Imam dojam da zapravo ne radis sa stringom nego s nizom stringova, a u tom slucaju ti je vjerojatno deklaracija kriva. No, za to provjeriti, treba vidjeti relevantne dijelove koda, bez pojednostavljivanja.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
ivanaaaa
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 24. 10. 2011. (19:36:26)
Postovi: (31)16
Sarma = la pohva - posuda
= 4 - 4

PostPostano: 20:14 sri, 6. 3. 2013    Naslov: Citirajte i odgovorite

ma ok, nisam mislila da se neće snaći nego nisam htjela gnjavit s time, ugl...poslala sam mu pa neka se zabavlja :D
ma ok, nisam mislila da se neće snaći nego nisam htjela gnjavit s time, ugl...poslala sam mu pa neka se zabavlja Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 13:38 sub, 30. 3. 2013    Naslov: Citirajte i odgovorite

Zasto mi ovaj program ne broji tocno rijeci u stringu?

[code:1]#include<stdio.h>
#include<string.h>

int broj_rijeci (char str[])
{
int brojac=0, i=0;
int razmak=1;

while(str[i]!='0') {
if((str[i]==' ')||(str[i]=='\t'))
{
if(!razmak)
{
++brojac;
razmak=1;
}
}
else razmak=0;
++i;

}

if(!razmak) ++brojac;

return brojac;
}



int main (void){

char s[]= "Ja sam mala Ruza, mamina sam kci.";

printf("String: \n");

puts(s);
/*printf("%s\n", s);*/

printf("Broj rijeci u stringu: %d\n", broj_rijeci(s));
return 0;

}

[/code:1]
Zasto mi ovaj program ne broji tocno rijeci u stringu?

Kod:
#include<stdio.h>
#include<string.h>

   int broj_rijeci (char str[])
   {
        int brojac=0, i=0;
        int razmak=1;

        while(str[i]!='0') {
           if((str[i]==' ')||(str[i]=='\t'))
           {
             if(!razmak)
             {
               ++brojac;
               razmak=1;
             }
           }
           else razmak=0;
           ++i;

        }

        if(!razmak) ++brojac;

        return brojac;
  }



     int main (void){

     char s[]= "Ja sam mala Ruza, mamina sam kci.";

     printf("String: \n");

        puts(s);
     /*printf("%s\n", s);*/

     printf("Broj rijeci u stringu: %d\n", broj_rijeci(s));
     return 0;

   }



[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 14:47 sub, 30. 3. 2013    Naslov: Citirajte i odgovorite

Kriv ti je uvjet u petlji. Znak [tt]'0'[/tt] je "znak nula", a terminator stringa je "null-znak", tj. [tt]'[color=red]\[/color]0'[/tt].
Kriv ti je uvjet u petlji. Znak '0' je "znak nula", a terminator stringa je "null-znak", tj. '\0'.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 14:59 sub, 30. 3. 2013    Naslov: Citirajte i odgovorite

[quote="vsego"]Kriv ti je uvjet u petlji. Znak [tt]'0'[/tt] je "znak nula", a terminator stringa je "null-znak", tj. [tt]'[color=red]\[/color]0'[/tt].[/quote]

Hvala. :D
vsego (napisa):
Kriv ti je uvjet u petlji. Znak '0' je "znak nula", a terminator stringa je "null-znak", tj. '\0'.


Hvala. Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 22:21 ned, 31. 3. 2013    Naslov: Citirajte i odgovorite

Ovo je kod kako sortirati rjecnik:

[code:1]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_BROJ 100
#define MAX_DULJ 80

char w[MAX_BROJ * MAX_DULJ];

char* p[MAX_BROJ];

int broj_rijeci;

int unos (char* p[]){

char* q=w;
int flag=1, broj=0, dulj;

while(flag){

if(gets(q)==NULL) return -1;
if ((dulj=strlen(q))==0) return broj;

if(broj>=MAX_BROJ) return -1;

p[broj]=q;
++broj;

q+=dulj+1;

}
}

void sort(char* p[], int n){

int i, j, ind_min;

char* temp;


for(i=0; i<n-1; ++i){

ind_min=i;

for(j=i+1; j<n; ++j)

if(strcmp(p[j], p[ind_min])<0)
ind_min=j;

if(i!=ind_min){
temp=p[i];
p[i]=p[ind_min];
p[ind_min]=temp;
}

}


return;
}


void ispis(char* p[]){

int i;

for(i=0; i<broj_rijeci; i++)
puts(p[i]);

return;

}


int main (void){

if((broj_rijeci=unos(p))>=0){

printf ("Broj rijeci: %d\n", broj_rijeci);
sort(p, broj_rijeci);

ispis(p);

}

else
printf ("Previse rijeci na ulazu\n");

return 0;

}
[/code:1]

E sad me zanima

1) kako promijeniti program tako da se polja w i p dinamicki alociraju.

2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci

2.1)odnosno kad se ne zna
Ovo je kod kako sortirati rjecnik:

Kod:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

    #define MAX_BROJ 100
    #define MAX_DULJ 80

    char w[MAX_BROJ * MAX_DULJ];

    char* p[MAX_BROJ];

    int broj_rijeci;

       int unos (char* p[]){

         char* q=w;
         int flag=1, broj=0, dulj;

         while(flag){

           if(gets(q)==NULL) return -1;
           if ((dulj=strlen(q))==0) return broj;

           if(broj>=MAX_BROJ) return -1;

           p[broj]=q;
           ++broj;

           q+=dulj+1;

         }
       }

         void sort(char* p[], int n){

            int i, j, ind_min;

            char* temp;


            for(i=0; i<n-1; ++i){

                 ind_min=i;

                 for(j=i+1; j<n; ++j)

                    if(strcmp(p[j], p[ind_min])<0)
                    ind_min=j;

                    if(i!=ind_min){
                    temp=p[i];
                    p[i]=p[ind_min];
                    p[ind_min]=temp;
                    }

                 }


            return;
    }


        void ispis(char* p[]){

        int i;

        for(i=0; i<broj_rijeci; i++)
        puts(p[i]);

        return;

        }


        int main (void){

        if((broj_rijeci=unos(p))>=0){

        printf ("Broj rijeci: %d\n", broj_rijeci);
        sort(p, broj_rijeci);

        ispis(p);

        }

        else
              printf ("Previse rijeci na ulazu\n");

              return 0;

        }


E sad me zanima

1) kako promijeniti program tako da se polja w i p dinamicki alociraju.

2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci

2.1)odnosno kad se ne zna


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 22:38 ned, 31. 3. 2013    Naslov: Citirajte i odgovorite

[quote="frutabella"]1) kako promijeniti program tako da se polja w i p dinamicki alociraju.[/quote]

[tt]char *w, **p;[/tt] + [tt]malloc()[/tt] / [tt]realloc()[/tt]

[quote="frutabella"]2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci[/quote]

Napravis da je [tt]w[/tt] automatski niz elemenata tipa [tt]char[MAX_LEN+1][/tt] (ako je maximalni broj rijeci zadan) ili da je pointer na [tt]char[MAX_LEN+1][/tt] (ako maximalni broj rijeci nije zadan), pri cemu je [tt]MAX_LEN[/tt] najveca duljina pojedine rijeci.

[quote="frutabella"]2.1)odnosno kad se ne zna[/quote]

Napravis da je [tt]w[/tt] automatski niz pointera na [tt]char[/tt] (ako je maximalni broj rijeci zadan) ili da je tipa [tt]char**[/tt] (ako maximalni broj rijeci nije zadan). U oba slucaja, pojedine rijeci alociras s
[tt]w[i] = (char*)malloc((duljina+1) * sizeof(char));[/tt],
a u drugom slucaju, prije alociranja rijeci, trebas i produljiti niz:
[tt]w = (char**)realloc(w, (++n) * sizeof(char*));[/tt] (onda ovo gore [tt]w[i][/tt] postaje [tt]w[n-1][/tt])
frutabella (napisa):
1) kako promijeniti program tako da se polja w i p dinamicki alociraju.


char *w, **p; + malloc() / realloc()

frutabella (napisa):
2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci


Napravis da je w automatski niz elemenata tipa char[MAX_LEN+1] (ako je maximalni broj rijeci zadan) ili da je pointer na char[MAX_LEN+1] (ako maximalni broj rijeci nije zadan), pri cemu je MAX_LEN najveca duljina pojedine rijeci.

frutabella (napisa):
2.1)odnosno kad se ne zna


Napravis da je w automatski niz pointera na char (ako je maximalni broj rijeci zadan) ili da je tipa char** (ako maximalni broj rijeci nije zadan). U oba slucaja, pojedine rijeci alociras s
w[i] = (char*)malloc((duljina+1) * sizeof(char));,
a u drugom slucaju, prije alociranja rijeci, trebas i produljiti niz:
w = (char**)realloc(w, (++n) * sizeof(char*)); (onda ovo gore w[i] postaje w[n-1])



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 1:49 pon, 1. 4. 2013    Naslov: Citirajte i odgovorite

Ovo ce pitanje zvucati glupo, ali jednostavno nisam ovo razumjela.

Znaci ovo je program koji ispisuje argumente komande linije:

[code:1]#include<stdio.h>


int main (int argc, char *argv[])
{
int i;

printf("argc: %d\n", argc);
for(i=0; i<argc; ++i)
printf("argv[%d]: %s\n", i, argv[i]);

return 0;

}

[/code:1]

Ja ocito ne znam sta je komanda linija :oops: , pa ne znam, gdje sad treba utipkati npr.

arg_1 Ja sam mala Ruza, mamina sam kci.
Ovo ce pitanje zvucati glupo, ali jednostavno nisam ovo razumjela.

Znaci ovo je program koji ispisuje argumente komande linije:

Kod:
#include<stdio.h>


   int main (int argc, char *argv[])
   {
      int i;

      printf("argc: %d\n", argc);
      for(i=0; i<argc; ++i)
          printf("argv[%d]:  %s\n", i, argv[i]);

          return 0;

   }



Ja ocito ne znam sta je komanda linija Embarassed , pa ne znam, gdje sad treba utipkati npr.

arg_1 Ja sam mala Ruza, mamina sam kci.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 3:00 pon, 1. 4. 2013    Naslov: Citirajte i odgovorite

Upravo to predavanje iz kojeg si uzela kod, pise ti na prethodnom slideu:
[quote="[url=http://web.math.pmf.unizg.hr/~singer/P2_1213/06.pdf]Predavanje 6[/url], slide 58"]Ako program pozovemo s
[code:1]ime.exe jedan dva tri[/code:1]
...[/quote]
Dakle, digni Command prompt ili kako se vec komandna linija zove (pretpostavljam da koristis Win, jer ljudi koji koriste operativne sustave znaju sto je komandna linija), odi u direktorij gdje ti se nalazi program ([tt]c:[/tt] ili koja je vec particija, pa [tt]cd \put\do\direktorija[/tt]) i onda tamo upisi tocno sto ti tu gore pise.

Ako i dalje nije jasno, copi nekog demosa. Tekstualno opisivanje je nespretno, a pokaze se u minutu-dvije (cini mi se da prof. i pokazu na predavanjima).
Upravo to predavanje iz kojeg si uzela kod, pise ti na prethodnom slideu:
Predavanje 6, slide 58 (napisa):
Ako program pozovemo s
Kod:
ime.exe jedan dva tri

...

Dakle, digni Command prompt ili kako se vec komandna linija zove (pretpostavljam da koristis Win, jer ljudi koji koriste operativne sustave znaju sto je komandna linija), odi u direktorij gdje ti se nalazi program (c: ili koja je vec particija, pa cd \put\do\direktorija) i onda tamo upisi tocno sto ti tu gore pise.

Ako i dalje nije jasno, copi nekog demosa. Tekstualno opisivanje je nespretno, a pokaze se u minutu-dvije (cini mi se da prof. i pokazu na predavanjima).



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 3:51 pon, 1. 4. 2013    Naslov: Citirajte i odgovorite

Evo uspjela sam, malo sam se zadrzala dok sam ovo prokontala "cd \put\do\direktorija", ali evo uspjelo je.

"Tenk ju veri mač", uljepšali ste mi rano jutro.

P.s. Nisam bila u mogucnosti pratiti predavanja. :S
Evo uspjela sam, malo sam se zadrzala dok sam ovo prokontala "cd \put\do\direktorija", ali evo uspjelo je.

"Tenk ju veri mač", uljepšali ste mi rano jutro.

P.s. Nisam bila u mogucnosti pratiti predavanja. :S


[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 23:42 pon, 1. 4. 2013    Naslov: Citirajte i odgovorite

Zadatak zahtjeva da napisemo funkciju koja kao argument prima jedan string te iz stringa brise znamenke.

[code:1]
void brisi(char s[]){

int citam=0, pisem=0;

while(s[citam]!='\0')
{
if(isdigit(s[citam]))
{
++citam;
}
else
s[pisem]=s[citam];
++citam;
++pisem;

}

s[pisem]='\0';

return;
}


int main (void)
{
char s[100];


printf("Unesite string: ");
scanf("%s", s);
brisi(s);
printf("String bez znamenki: %s", s);

return 0;

}
[/code:1]

Na papiru ovo kad vrtim ispada mi dobro, ne znam gdje grijesim. :S
Zadatak zahtjeva da napisemo funkciju koja kao argument prima jedan string te iz stringa brise znamenke.

Kod:

void brisi(char s[]){

     int citam=0, pisem=0;

     while(s[citam]!='\0')
     {
         if(isdigit(s[citam]))
         {
            ++citam;
         }
         else
            s[pisem]=s[citam];
             ++citam;
             ++pisem;

     }

     s[pisem]='\0';

     return;
   }


     int main (void)
     {
        char s[100];


        printf("Unesite string: ");
        scanf("%s", s);
        brisi(s);
        printf("String bez znamenki: %s", s);

        return 0;

       }


Na papiru ovo kad vrtim ispada mi dobro, ne znam gdje grijesim. :S


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 23:55 pon, 1. 4. 2013    Naslov: Citirajte i odgovorite

Naredbe u [tt]else[/tt] treba zapakirati u viticaste zagrade.
Naredbe u else treba zapakirati u viticaste zagrade.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 1:35 uto, 2. 4. 2013    Naslov: Citirajte i odgovorite

Napisite funkciju int palindrom (char *s) koja vraća 1 ako je string s palindrom, inace treba vratiti 0.

Npr. "anavolimilovana" je palindrom, ali "ana voli milovana" nije.


Moj kod:

[code:1]
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>

int palindrom (char s[])
{
int n, i, j;

n=strlen(s);
j=n-1;

for(i=0; s[i]!='\0' ; ++i)
{
if (isblank(s[i])|| isblank(s[j])) return 0;
if(s[i]==s[j]) --j;

else return 0;

}

s[i]='\0';

return 1;

}

int main (void)
{

char s[100];

printf("Unesi string: ");

scanf("%s", s);

printf("Da li je string palindrom: %d", palindrom(s));


return 0;



}
[/code:1]

Ne znam zasto mi "ana voli milovana" ispisuje da je palindrom, dok recimo "petra rtep" ispisuje da nije (znaci ispisuje pravilno)?
Napisite funkciju int palindrom (char *s) koja vraća 1 ako je string s palindrom, inace treba vratiti 0.

Npr. "anavolimilovana" je palindrom, ali "ana voli milovana" nije.


Moj kod:

Kod:

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>

    int palindrom (char s[])
    {
        int n, i, j;

        n=strlen(s);
        j=n-1;

       for(i=0; s[i]!='\0' ; ++i)
       {
          if (isblank(s[i])|| isblank(s[j])) return 0;
          if(s[i]==s[j])  --j;

          else return 0;

       }

          s[i]='\0';

          return 1;

   }

     int main (void)
     {

        char s[100];

        printf("Unesi string: ");

        scanf("%s", s);

        printf("Da li je string palindrom: %d", palindrom(s));


        return 0;



     }


Ne znam zasto mi "ana voli milovana" ispisuje da je palindrom, dok recimo "petra rtep" ispisuje da nije (znaci ispisuje pravilno)?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
quark
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 22. 10. 2011. (16:47:39)
Postovi: (DA)16
Spol: muško
Sarma = la pohva - posuda
20 = 26 - 6

PostPostano: 2:08 uto, 2. 4. 2013    Naslov: Citirajte i odgovorite

Dakle, [tt]%s[/tt] ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom :D

No, ako i točno učitaš string, ne radi ti kod.
Naime uvjet if [tt](isblank(s[i])|| isblank(s[j])) return 0;[/tt] ne štima.
Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.

I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.

I čemu ovaj [tt]s[i]='\0'[/tt] ? :shock:
Dakle, %s ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom Very Happy

No, ako i točno učitaš string, ne radi ti kod.
Naime uvjet if (isblank(s[i])|| isblank(s[j])) return 0; ne štima.
Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.

I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.

I čemu ovaj s[i]='\0' ? Shocked


[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 2:41 uto, 2. 4. 2013    Naslov: Citirajte i odgovorite

[quote="quark"]Dakle, [tt]%s[/tt] ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom :D

No, ako i točno učitaš string, ne radi ti kod.
Naime uvjet if [tt](isblank(s[i])|| isblank(s[j])) return 0;[/tt] ne štima.
Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.

I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.

I čemu ovaj [tt]s[i]='\0'[/tt] ? :shock:[/quote]


Istina, radim nepotrebne stvari.

A ovo zadnje shvacam da ne treba,
ali, ako bi trebali ispisati taj palindrom, onda bi to trebali valjda napisati, jel da? (mozda sam to imala u mislima dok sam pisala)

Hvala!

[size=9][color=#999999]Added after 25 minutes:[/color][/size]

http://degiorgi.math.hr/prog2/materijali/p2-vjezbe.pdf

str. 89 (po skripti), zad 5.4.2.

Zadatak sam sama pokusala rijesiti bez gledanja u rjesenje,
dobro ispise ali nešto nije uredu (javlja da windows trazi rjesenje problema).
Zanima me gdje grijesim?


[code:1]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

int main (void){

char s[20];
int n, t, m, i;
char *s2;

printf("Unesit broj n: ");
scanf("%d", &n);

printf("Unesi string: ");
scanf("%s", s);

t=strlen(s);

if(n%t==0) n=n/t;

else
n=n/t+1;

m=n*t;


s2=(char*)malloc((m+1)*sizeof(char)); /* m+1 zbog '\0' */

if(s2==NULL)
{
printf ("Greska!\n");

exit(0);
}


strcpy(s2, s);

for(i=0; i<m; ++i)

strcat(s2, s);

s2[i]='\0';

printf("Ispisi string: %s", s2);

free(s2);


return 0;
}

[/code:1]
quark (napisa):
Dakle, %s ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom Very Happy

No, ako i točno učitaš string, ne radi ti kod.
Naime uvjet if (isblank(s[i])|| isblank(s[j])) return 0; ne štima.
Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.

I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.

I čemu ovaj s[i]='\0' ? Shocked



Istina, radim nepotrebne stvari.

A ovo zadnje shvacam da ne treba,
ali, ako bi trebali ispisati taj palindrom, onda bi to trebali valjda napisati, jel da? (mozda sam to imala u mislima dok sam pisala)

Hvala!

Added after 25 minutes:

http://degiorgi.math.hr/prog2/materijali/p2-vjezbe.pdf

str. 89 (po skripti), zad 5.4.2.

Zadatak sam sama pokusala rijesiti bez gledanja u rjesenje,
dobro ispise ali nešto nije uredu (javlja da windows trazi rjesenje problema).
Zanima me gdje grijesim?


Kod:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

    int main (void){

       char s[20];
       int n, t, m, i;
       char *s2;

       printf("Unesit broj n: ");
       scanf("%d", &n);

       printf("Unesi string: ");
       scanf("%s", s);

       t=strlen(s);

       if(n%t==0) n=n/t;

       else
                  n=n/t+1;

       m=n*t;


       s2=(char*)malloc((m+1)*sizeof(char));  /* m+1  zbog '\0' */

       if(s2==NULL)
       {
           printf ("Greska!\n");

           exit(0);
       }


       strcpy(s2, s);

       for(i=0; i<m; ++i)

       strcat(s2, s);

        s2[i]='\0';     

        printf("Ispisi string: %s", s2);

        free(s2);


        return 0;
    }



[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 8:44 uto, 2. 4. 2013    Naslov: Citirajte i odgovorite

U string [tt]s2[/tt] trpas [tt]m+1[/tt] kopiju stringa [tt]s[/tt] ([tt]strcpy()[/tt] ubaci jednu, a onda petlja sa [tt]strcat()[/tt]-om napravi jos [tt]m[/tt]), iako si alocirala memoriju za najvise [tt]m[/tt] [b]znakova[/b] (plus nul-znak).

Sto se prethodnog zadatka tice, quark je u pravu: [tt]s[i]='\0';[/tt] je cisti vishak, i to iz dva razloga.
1. String u funkciji ne mijenjas, pa on vec ima [tt]'\0'[/tt] tocno tamo gdje to treba biti.
2. Kad [tt]for()[/tt] petlja zavrsi, [tt]i[/tt] je upravo index od [tt]'\0'[/tt], pa [tt]s[i]='\0';[/tt] postavlja [tt]s[i][/tt] na vrijednost koju taj znak vec ima.
U string s2 trpas m+1 kopiju stringa s (strcpy() ubaci jednu, a onda petlja sa strcat()-om napravi jos m), iako si alocirala memoriju za najvise m znakova (plus nul-znak).

Sto se prethodnog zadatka tice, quark je u pravu: s[i]='\0'; je cisti vishak, i to iz dva razloga.
1. String u funkciji ne mijenjas, pa on vec ima '\0' tocno tamo gdje to treba biti.
2. Kad for() petlja zavrsi, i je upravo index od '\0', pa s[i]='\0'; postavlja s[i] na vrijednost koju taj znak vec ima.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 22:41 uto, 2. 4. 2013    Naslov: Citirajte i odgovorite

[quote="vsego"]U string [tt]s2[/tt] trpas [tt]m+1[/tt] kopiju stringa [tt]s[/tt] ([tt]strcpy()[/tt] ubaci jednu, a onda petlja sa [tt]strcat()[/tt]-om napravi jos [tt]m[/tt]), iako si alocirala memoriju za najvise [tt]m[/tt] [b]znakova[/b] (plus nul-znak).

Sto se prethodnog zadatka tice, quark je u pravu: [tt]s[i]='\0';[/tt] je cisti vishak, i to iz dva razloga.
1. String u funkciji ne mijenjas, pa on vec ima [tt]'\0'[/tt] tocno tamo gdje to treba biti.
2. Kad [tt]for()[/tt] petlja zavrsi, [tt]i[/tt] je upravo index od [tt]'\0'[/tt], pa [tt]s[i]='\0';[/tt] postavlja [tt]s[i][/tt] na vrijednost koju taj znak vec ima.[/quote]


Ourajt, mislim da sam skontala.

Znaci moram alocirati (m+1)*t znakova, tj.
s2=(char*)malloc(((m+1)*t)*sizeof(char));

Sad radi za unos n=17, i Pero :D
ali opet ne radi za recimo n=15, Petar. :S
vsego (napisa):
U string s2 trpas m+1 kopiju stringa s (strcpy() ubaci jednu, a onda petlja sa strcat()-om napravi jos m), iako si alocirala memoriju za najvise m znakova (plus nul-znak).

Sto se prethodnog zadatka tice, quark je u pravu: s[i]='\0'; je cisti vishak, i to iz dva razloga.
1. String u funkciji ne mijenjas, pa on vec ima '\0' tocno tamo gdje to treba biti.
2. Kad for() petlja zavrsi, i je upravo index od '\0', pa s[i]='\0'; postavlja s[i] na vrijednost koju taj znak vec ima.



Ourajt, mislim da sam skontala.

Znaci moram alocirati (m+1)*t znakova, tj.
s2=(char*)malloc(((m+1)*t)*sizeof(char));

Sad radi za unos n=17, i Pero Very Happy
ali opet ne radi za recimo n=15, Petar. :S


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 23:42 uto, 2. 4. 2013    Naslov: Citirajte i odgovorite

Meni se cini da u [tt]n[/tt] trpas koliko kopija treba, a u [tt]m[/tt] duljinu novog stringa. Dakle, [tt]malloc()[/tt] je (bio) ok, ali for petlja je trebala ici od 1 do [tt]<n[/tt], umjesto od 0 do [tt]<m[/tt].

Ako i dalje ne radi, molim aktualnu verziju, da ne pricamo napamet.
Meni se cini da u n trpas koliko kopija treba, a u m duljinu novog stringa. Dakle, malloc() je (bio) ok, ali for petlja je trebala ici od 1 do <n, umjesto od 0 do <m.

Ako i dalje ne radi, molim aktualnu verziju, da ne pricamo napamet.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 1:27 sri, 3. 4. 2013    Naslov: Citirajte i odgovorite

I meni je logicno da bi trebalo u for petlji ici do n, umjesto m, ali sad ispisuje pogresno (i jos trazi rjesenje problema).

[code:1]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

int main (void){

char s[20];
int n, t, m, i;
char *s2;

printf("Unesit broj n: ");
scanf("%d", &n);

printf("Unesi string: ");
scanf("%s", s);

t=strlen(s);

if(n%t==0) n=n/t;

else
n=n/t+1;

m=n*t;


s2=(char*)malloc((m+1)*sizeof(char)); /* m+1 zbog '\0' */

if(s2==NULL)
{
printf ("Greska!\n");

exit(0);
}


strcpy(s2, s);

for(i=0; i<n; ++i)

strcat(s2, s);

s2[i]='\0';

printf("Ispisi string: %s", s2);

free(s2);


return 0;
}
[/code:1]


U sluzbenim rjesenjima stoji:

[code:1]
if (n%strlen(s))
n=(n/strlen(s)+1)*strlen(s) [/code:1] -----> sto je moj m

zatim

[code:1]
s2=(char*)malloc((n+1)*sizeof(char));

strcpy(s2,s);

while(strlen(s2)<n) strcat(s2, s);

/*ovo isto ide do n (sto je m iz moje price) */

[/code:1]


Sad sam tek zbunjena... :?
I meni je logicno da bi trebalo u for petlji ici do n, umjesto m, ali sad ispisuje pogresno (i jos trazi rjesenje problema).

Kod:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

    int main (void){

       char s[20];
       int n, t, m, i;
       char *s2;

       printf("Unesit broj n: ");
       scanf("%d", &n);

       printf("Unesi string: ");
       scanf("%s", s);

       t=strlen(s);

       if(n%t==0) n=n/t;

       else
                  n=n/t+1;

       m=n*t;


       s2=(char*)malloc((m+1)*sizeof(char));  /* m+1  zbog '\0' */

       if(s2==NULL)
       {
           printf ("Greska!\n");

           exit(0);
       }


       strcpy(s2, s);

     for(i=0; i<n; ++i)

       strcat(s2, s);

        s2[i]='\0';     

        printf("Ispisi string: %s", s2);

        free(s2);


        return 0;
    }



U sluzbenim rjesenjima stoji:

Kod:

if (n%strlen(s))
n=(n/strlen(s)+1)*strlen(s)
-----> sto je moj m

zatim

Kod:

 s2=(char*)malloc((n+1)*sizeof(char));

strcpy(s2,s);

while(strlen(s2)<n) strcat(s2, s);     

/*ovo isto ide do n (sto je m iz moje price) */




Sad sam tek zbunjena... Confused


[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 3:34 sri, 3. 4. 2013    Naslov: Citirajte i odgovorite

Zadaca:
Napišite program koji učitava jednu riječ s najviše 11387 znakova, te ispisuje koliko se puta u toj riječi pojavljuje podstring "rlk".

[code:1]

#include<stdio.h>
#include<string.h>


int main (void)
{

char rijec[11388], podstring[]="rlk";

int br=0, i, j=0;

scanf("%s", rijec);


for(i=0; i<strlen(rijec); ++i)
{
if(rijec[i]==podstring[j]) ++j;

if(podstring[j]=='\0')
{
++br;
j=0;
}
}


printf("%d", br);

return 0;

}
[/code:1]

Ispisuje mi sve dobro (bar ja mislim), ali ne znam zbog cega onda nije prihvaceno kao tocno rjesenje.
Zadaca:
Napišite program koji učitava jednu riječ s najviše 11387 znakova, te ispisuje koliko se puta u toj riječi pojavljuje podstring "rlk".

Kod:


#include<stdio.h>
#include<string.h>


    int main (void)
    {

        char rijec[11388], podstring[]="rlk";

        int br=0, i, j=0;

        scanf("%s", rijec);


        for(i=0; i<strlen(rijec); ++i)
        {
             if(rijec[i]==podstring[j]) ++j;

             if(podstring[j]=='\0')
             {
                ++br;
                j=0;
             }
        }


        printf("%d", br);

        return 0;

    }


Ispisuje mi sve dobro (bar ja mislim), ali ne znam zbog cega onda nije prihvaceno kao tocno rjesenje.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Idite na Prethodno  1, 2, 3  Sljedeće
Stranica 2 / 3.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan