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
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: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

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

Ref. prvi:
1. Kako sam naveo u prethodnim porukama, petlja treba ici od 1, jer prvu kopiju kreiras sa [tt]strcpy()[/tt]. Alternativno, mozes [tt]strcpy()[/tt] zamijeniti sa [tt]s[0] = '\0'[/tt], pa onda [tt]strcat()[/tt] stvarno ide [tt]n[/tt] puta.
2. Moras se oduciti od toga da bezveze stavljas [tt]s2[i]='\0';[/tt], jer ovdje to izaziva gresku (skratis [tt]s2[/tt] na [tt]n[/tt] znakova, a skroz bespotrebno jer string-funkcije same paze gdje ide string-terminator).

Ref. drugi:
Isprobaj za string [tt]"rxlxk"[/tt]. Treba osigurati da prihvaca stringove samo [tt]"rlk"[/tt] u komadu, a ne sa smecem (a la moji [tt]'x'[/tt]-evi) unutra.
Ref. prvi:
1. Kako sam naveo u prethodnim porukama, petlja treba ici od 1, jer prvu kopiju kreiras sa strcpy(). Alternativno, mozes strcpy() zamijeniti sa s[0] = '\0', pa onda strcat() stvarno ide n puta.
2. Moras se oduciti od toga da bezveze stavljas s2[i]='\0';, jer ovdje to izaziva gresku (skratis s2 na n znakova, a skroz bespotrebno jer string-funkcije same paze gdje ide string-terminator).

Ref. drugi:
Isprobaj za string "rxlxk". Treba osigurati da prihvaca stringove samo "rlk" u komadu, a ne sa smecem (a la moji 'x'-evi) unutra.



_________________
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: 16:33 sri, 3. 4. 2013    Naslov: Citirajte i odgovorite

1. radi sad sve uredno :D

2.

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


int main (void)
{

char s[11388], p[]="rlk";

int br=0, i, j=0;

scanf("%s", s);

for(i=0; i<strlen(s); ++i) s[i]=tolower(s[i]);


for(i=0; i<strlen(s); ++i)
{
if(s[i]==p[j])
{
++j;

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

else j=0;
}


printf("%d", br);

return 0;

}
[/code:1]

Mislim da bi ovo sad trebalo biti dobro.

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

Nije dobro... :?
1. radi sad sve uredno Very Happy

2.

Kod:

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


    int main (void)
    {

        char s[11388], p[]="rlk";

        int br=0, i, j=0;

        scanf("%s", s);

        for(i=0; i<strlen(s); ++i)  s[i]=tolower(s[i]);


        for(i=0; i<strlen(s); ++i)
        {
             if(s[i]==p[j])
             {
                  ++j;

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

             else j=0;
        }


        printf("%d", br);

        return 0;

    }


Mislim da bi ovo sad trebalo biti dobro.

Added after 58 minutes:

Nije dobro... Confused


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


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

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

Gdje u zadatku pise da sve bacis na mala slova? :-s

P.S. Izbjegavaj [tt]strlen()[/tt] u uvjetu petlje kad string ne mijenja duljinu, jer to u svakom pozivu petlje prolazi kroz string (cit. imas nepotrebnu kvadratnu slozenost). Stavi jednostavno [tt]s[i][/tt] ili, ekvivalentno, [tt]s[i] != '\0'[/tt].
Gdje u zadatku pise da sve bacis na mala slova? Eh?

P.S. Izbjegavaj strlen() u uvjetu petlje kad string ne mijenja duljinu, jer to u svakom pozivu petlje prolazi kroz string (cit. imas nepotrebnu kvadratnu slozenost). Stavi jednostavno s[i] ili, ekvivalentno, s[i] != '\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
AvastSecure
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 22. 10. 2012. (20:31:12)
Postovi: (E)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 18:24 sri, 3. 4. 2013    Naslov: Upit Citirajte i odgovorite

Mozda je glupo pitanje ( iako glupa pitanja nebi trebala postojati) ali zanima me dobijemo li mi na kolokviju funkcije za stringove na onom podsjetniku, tipa funkcije tolower, toupper, isalnum itd ?! :)
Mozda je glupo pitanje ( iako glupa pitanja nebi trebala postojati) ali zanima me dobijemo li mi na kolokviju funkcije za stringove na onom podsjetniku, tipa funkcije tolower, toupper, isalnum itd ?! Smile


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


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

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

Zasto to sam ne provjeris? Sluzbeni podsjetnik je na webu, a ja ne znam na pamet sto je tamo i mogu samo ici tamo pogledati, kao i ti.
Zasto to sam ne provjeris? Sluzbeni podsjetnik je na webu, a ja ne znam na pamet sto je tamo i mogu samo ici tamo pogledati, kao i ti.



_________________
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
delilah01.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 10. 11. 2011. (22:50:23)
Postovi: (39)16
Sarma = la pohva - posuda
11 = 12 - 1

PostPostano: 18:29 sri, 3. 4. 2013    Naslov: Re: Upit Citirajte i odgovorite

[quote="AvastSecure"]Mozda je glupo pitanje ( iako glupa pitanja nebi trebala postojati) ali zanima me dobijemo li mi na kolokviju funkcije za stringove na onom podsjetniku, tipa funkcije tolower, toupper, isalnum itd ?! :)[/quote]

http://degiorgi.math.hr/prog2/materijali/p2-podsjetnik.pdf
AvastSecure (napisa):
Mozda je glupo pitanje ( iako glupa pitanja nebi trebala postojati) ali zanima me dobijemo li mi na kolokviju funkcije za stringove na onom podsjetniku, tipa funkcije tolower, toupper, isalnum itd ?! Smile


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


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


Pridružen/a: 22. 10. 2012. (20:31:12)
Postovi: (E)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 18:49 sri, 3. 4. 2013    Naslov: - Citirajte i odgovorite

to mi čak nije palo na pamet.... hvala :)
to mi čak nije palo na pamet.... hvala Smile


[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: 20:07 sri, 3. 4. 2013    Naslov: Citirajte i odgovorite

Da li je ovo sad ok? (znaci ispisati koliko se puta u stringu pojavljuje "rlk")

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


int main (void)
{

char s[11388], p[]="rlk";

int br=0, i, j=0;

scanf("%s", s);


for(i=0; s[i]!='\0'; ++i)

if(s[i]==p[0] && s[i+1]==p[1] && s[i+2]==p[2])

++br;



printf("%d", br);

return 0;

}
[/code:1]
Da li je ovo sad ok? (znaci ispisati koliko se puta u stringu pojavljuje "rlk")

Kod:

#include<string.h>


    int main (void)
    {

        char s[11388], p[]="rlk";

        int br=0, i, j=0;

        scanf("%s", s);


        for(i=0; s[i]!='\0'; ++i)

             if(s[i]==p[0] && s[i+1]==p[1] && s[i+2]==p[2])

                 ++br;



        printf("%d", br);

        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: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

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

Skoro. Gotovo sigurno ce raditi ispravno, ali nije dobro. Primijeti da [tt]s[i+2][/tt] nije nuzno u stringu, nego moze pobjeci izvan memorije koja pripada programu, sto ga moze srusisi (mada, sanse da se to desi su solidno male).

Ako zelis tako, onda stavi:
[code:1]last = strlen(s) - 3; /* 3 je strlen(p) */
for (i = 0; i <= last; i++) ...[/code:1]

Cini mi se da bi i ono prvo radilo, samo da si maknula
[tt]for(i=0; i<strlen(s); ++i) s[i]=tolower(s[i]);[/tt]
Naravno, moguce je da mi je nesto promaklo. Nisam testirao.[/tt]
Skoro. Gotovo sigurno ce raditi ispravno, ali nije dobro. Primijeti da s[i+2] nije nuzno u stringu, nego moze pobjeci izvan memorije koja pripada programu, sto ga moze srusisi (mada, sanse da se to desi su solidno male).

Ako zelis tako, onda stavi:
Kod:
last = strlen(s) - 3; /* 3 je strlen(p) */
for (i = 0; i <= last; i++) ...


Cini mi se da bi i ono prvo radilo, samo da si maknula
for(i=0; i<strlen(s); ++i) s[i]=tolower(s[i]);
Naravno, moguce je da mi je nesto promaklo. Nisam testirao.[/tt]



_________________
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: 20:41 sri, 3. 4. 2013    Naslov: Citirajte i odgovorite

[quote="vsego"]Skoro. Gotovo sigurno ce raditi ispravno, ali nije dobro. Primijeti da [tt]s[i+2][/tt] nije nuzno u stringu, nego moze pobjeci izvan memorije koja pripada programu, sto ga moze srusisi (mada, sanse da se to desi su solidno male).

Ako zelis tako, onda stavi:
[code:1]last = strlen(s) - 3; /* 3 je strlen(p) */
for (i = 0; i <= last; i++) ...[/code:1]

Cini mi se da bi i ono prvo radilo, samo da si maknula
[tt]for(i=0; i<strlen(s); ++i) s[i]=tolower(s[i]);[/tt]
Naravno, moguce je da mi je nesto promaklo. Nisam testirao.[/tt][/quote]


Uauuu, cak mi je prihvatilo da je tocno. :D :D :D :D

Sto se tice onog prvog programa, maknula sam "mijenjanje sve u mala slova", ali nije prihvaceno kao tocno.
I provjerila sam, za unos: rrlk izbacuje 0 pojavljivanja, sto naravno nije tocno.
(eh, kad smo vec tu, sta bi morala promijeniti da bi radilo dobro - znaci u mom prvom programu)

Evo ga jos jednom:

[code:1]

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


int main (void)
{

char s[11388], p[]="rlk";

int br=0, i, j=0;

scanf("%s", s);



for(i=0; i<strlen(s); ++i)
{
if(s[i]==p[j])
{
++j;

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

else j=0;
}


printf("%d", br);

return 0;

}
[/code:1]
vsego (napisa):
Skoro. Gotovo sigurno ce raditi ispravno, ali nije dobro. Primijeti da s[i+2] nije nuzno u stringu, nego moze pobjeci izvan memorije koja pripada programu, sto ga moze srusisi (mada, sanse da se to desi su solidno male).

Ako zelis tako, onda stavi:
Kod:
last = strlen(s) - 3; /* 3 je strlen(p) */
for (i = 0; i <= last; i++) ...


Cini mi se da bi i ono prvo radilo, samo da si maknula
for(i=0; i<strlen(s); ++i) s[i]=tolower(s[i]);
Naravno, moguce je da mi je nesto promaklo. Nisam testirao.[/tt]



Uauuu, cak mi je prihvatilo da je tocno. Very Happy Very Happy Very Happy Very Happy

Sto se tice onog prvog programa, maknula sam "mijenjanje sve u mala slova", ali nije prihvaceno kao tocno.
I provjerila sam, za unos: rrlk izbacuje 0 pojavljivanja, sto naravno nije tocno.
(eh, kad smo vec tu, sta bi morala promijeniti da bi radilo dobro - znaci u mom prvom programu)

Evo ga jos jednom:

Kod:


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


    int main (void)
    {

        char s[11388], p[]="rlk";

        int br=0, i, j=0;

        scanf("%s", s);

       

        for(i=0; i<strlen(s); ++i)
        {
             if(s[i]==p[j])
             {
                  ++j;

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

             else j=0;
        }


        printf("%d", br);

        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: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

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

Ah, pa da... :facepalm:

Problem je upravo ako imas "rrkl" ili "rkrkl", tj. podstring od [tt]s[/tt] je oblika [tex]xp[/tex], pri cemu je [tex]x \subsetneq p[/tex]. Recimo, za "rrkl":
1. [tt]i = 0[/tt] => [tt]s[i] == 'r'[/tt] => [tt]j = 1[/tt]
2. [tt]i = 1[/tt] => [tt]s[i] == 'r'[/tt] => [tt]j = 0[/tt] --> ovo je problem, jer utvrdis da to nije drugo slovo (k), ali [b]ne[/b] utvrdis da [b]je[/b] prvo.

Ispravak:

[code:1]for(i = 0; s[i]; ++i) {
if (s[i] == p[j]) {
j++;
if (p[j] == '\0') {
br++;
j = 0;
}
} else
j = (s[i] == p[0]); /* ili j = (s[i] == p[0] ? 1 : 0); ili if (s[i] == p[0]) j = 1; else j = 0; */
}[/code:1]

Dakle, [tt]j[/tt] resetiras na 1 ako je [tt]s[i][/tt] prvi znak od [tt]p[/tt]; inace resetiras na nulu.
Ah, pa da... O, kuku meni...

Problem je upravo ako imas "rrkl" ili "rkrkl", tj. podstring od s je oblika [tex]xp[/tex], pri cemu je [tex]x \subsetneq p[/tex]. Recimo, za "rrkl":
1. i = 0s[i] == 'r'j = 1
2. i = 1s[i] == 'r'j = 0 → ovo je problem, jer utvrdis da to nije drugo slovo (k), ali ne utvrdis da je prvo.

Ispravak:

Kod:
for(i = 0; s[i]; ++i) {
  if (s[i] == p[j]) {
    j++;
    if (p[j] == '\0') {
      br++;
      j = 0;
    }
  } else
    j = (s[i] == p[0]); /* ili j = (s[i] == p[0] ? 1 : 0); ili if (s[i] == p[0]) j = 1; else j = 0; */
}


Dakle, j resetiras na 1 ako je s[i] prvi znak od p; inace resetiras na nulu.



_________________
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
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
Stranica 3 / 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