Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
malena Forumaš(ica)
Pridružen/a: 27. 03. 2009. (16:43:42) Postovi: (62)16
Spol:
Lokacija: ...
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
malena Forumaš(ica)
Pridružen/a: 27. 03. 2009. (16:43:42) Postovi: (62)16
Spol:
Lokacija: ...
|
Postano: 17:35 sri, 27. 5. 2009 Naslov: |
|
|
hvala vsego jos me samo zanima radi li ovaj kod ono sto treba, mislim da brise kriva slova pa ako mozes baciti oko...
[size=9][color=#999999]Added after 55 seconds:[/color][/size]
[code:1]#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/*5.4.*/
void b3_slovo(char *s){
int i, j=0, c, br=0;
for(i=0; s[i]!='\0'; i++){
c=isalpha(s[i]);
if(c) br++;
}
for(i=0; s[i]!='\0'; i++){
c=isalpha(s[i]);
if(c==0 || (br--)%3){
s[j++]=s[i];
}
}
s[j]='\0';
}
int main(){
char s[19];
printf("Upisi string: ");
scanf("%[^\n]", s);
b3_slovo(s);
printf("%s ", s);
system("PAUSE");
return 0;
}
[/code:1]
hvala vsego jos me samo zanima radi li ovaj kod ono sto treba, mislim da brise kriva slova pa ako mozes baciti oko...
Added after 55 seconds:
Kod: | #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/*5.4.*/
void b3_slovo(char *s){
int i, j=0, c, br=0;
for(i=0; s[i]!='\0'; i++){
c=isalpha(s[i]);
if(c) br++;
}
for(i=0; s[i]!='\0'; i++){
c=isalpha(s[i]);
if(c==0 || (br--)%3){
s[j++]=s[i];
}
}
s[j]='\0';
}
int main(){
char s[19];
printf("Upisi string: ");
scanf("%[^\n]", s);
b3_slovo(s);
printf("%s ", s);
system("PAUSE");
return 0;
}
|
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 22:33 sri, 27. 5. 2009 Naslov: |
|
|
@Gino: Cini mi se ispravno, ali kvadratna slozenost je stvarno nepotrebna. :) Takodjer, ne razumijem cemu sluze [tt]i[/tt] i [tt]k[/tt]... meni djeluje da imaju stalno isto vrijednost, tj. da je za to dosta jedna varijabla. :grebgreb:
@malena: Cemu sluzi da prvo prebrojis slova? :-k Sto fali ovome:
[code:1]void f(const char s[]) {
int j = 0, koje = 0;
for(i = 0; s[i] != '\0'; ++i) {
int slovo = isalpha(s[i]);
if (slovo) ++koje;
if (!slovo || koje % 3 == 1) /* moze i 0, ovisi kako interpretiras "svako trece" */
s[j++] = s[i];
}
s[j] = '\0';
}[/code:1]:?:
Ovo tvoje ce brisati "svako trece", pocevsi sdesna. Tj.
ako imas 7 slova, obrisat ce drugo i peto, no
ako imas 6 slova, obrisat ce prvo i cetvrto, itd. :?
Posto ne pise "sdesna", ocito se misli na brisanje "slijeva" (redom kojim citamo, ne?). ;)
@Gino: Cini mi se ispravno, ali kvadratna slozenost je stvarno nepotrebna. Takodjer, ne razumijem cemu sluze i i k... meni djeluje da imaju stalno isto vrijednost, tj. da je za to dosta jedna varijabla.
@malena: Cemu sluzi da prvo prebrojis slova? Sto fali ovome:
Kod: | void f(const char s[]) {
int j = 0, koje = 0;
for(i = 0; s[i] != '\0'; ++i) {
int slovo = isalpha(s[i]);
if (slovo) ++koje;
if (!slovo || koje % 3 == 1) /* moze i 0, ovisi kako interpretiras "svako trece" */
s[j++] = s[i];
}
s[j] = '\0';
} |
Ovo tvoje ce brisati "svako trece", pocevsi sdesna. Tj.
ako imas 7 slova, obrisat ce drugo i peto, no
ako imas 6 slova, obrisat ce prvo i cetvrto, itd.
Posto ne pise "sdesna", ocito se misli na brisanje "slijeva" (redom kojim citamo, ne?).
_________________ 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.
|
|
[Vrh] |
|
lucika Forumaš(ica)
Pridružen/a: 22. 11. 2007. (17:52:27) Postovi: (12F)16
Spol:
|
Postano: 22:06 pet, 5. 6. 2009 Naslov: |
|
|
zašto program ne radi ako umjesto if( isalpha(a[i])) napišem if( isalpha(a[i]) ==1 ) :?:
[code:1]
/*
Zadatak 5.4. Napiˇsite funkciju koja kao argument prima jedan
string, te iz njega briˇse svako tre´ce slovo. Napiˇsite i program koji po-
kazuje kako se funkcija upotrebljava.
*/
#include <stdio.h>
#include <ctype.h>
void brisi( char *s )
{
int i, kraj = 0, brojSlovaDosad = 0;
for( i = 0; s[ i ] != '\0'; ++i )
{
int brisi = 0;
//if( 'A' <= s[ i ] && s[ i ] <= 'Z' || 'a' <= s[ i ] && s[ i ] <= 'z' )
if( isalpha( s[ i ] ) )
{
++brojSlovaDosad;
if( brojSlovaDosad % 3 == 0 )
brisi = 1;
}
if( !brisi )
{
s[ kraj ] = s[ i ];
++kraj;
}
}
s[ kraj ] = '\0';
}
int main( void )
{
char ime[ 100 ];
scanf("%s", ime );
brisi( ime );
printf( "%s\n", ime );
scanf("%%");
return 0;
}
[/code:1]
zašto program ne radi ako umjesto if( isalpha(a[i])) napišem if( isalpha(a[i]) ==1 )
Kod: |
/*
Zadatak 5.4. Napiˇsite funkciju koja kao argument prima jedan
string, te iz njega briˇse svako tre´ce slovo. Napiˇsite i program koji po-
kazuje kako se funkcija upotrebljava.
*/
#include <stdio.h>
#include <ctype.h>
void brisi( char *s )
{
int i, kraj = 0, brojSlovaDosad = 0;
for( i = 0; s[ i ] != '\0'; ++i )
{
int brisi = 0;
//if( 'A' <= s[ i ] && s[ i ] <= 'Z' || 'a' <= s[ i ] && s[ i ] <= 'z' )
if( isalpha( s[ i ] ) )
{
++brojSlovaDosad;
if( brojSlovaDosad % 3 == 0 )
brisi = 1;
}
if( !brisi )
{
s[ kraj ] = s[ i ];
++kraj;
}
}
s[ kraj ] = '\0';
}
int main( void )
{
char ime[ 100 ];
scanf("%s", ime );
brisi( ime );
printf( "%s\n", ime );
scanf("%%");
return 0;
}
|
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 0:25 sub, 6. 6. 2009 Naslov: |
|
|
[quote="[tt]man isalpha[/tt]"]RETURN VALUE
The values returned are nonzero if the character c falls into the tested class, and a zero value if not.[/quote]
Probaj ovo:
[code:1]#include <stdio.h>
#include <ctype.h>
int main(void) {
int i;
for (i = 0; i < 256; ++i) {
printf("i = %d; isalpha((char)i) = %d", i, isalpha((char)i));
printf(i % 4 == 3 ? "\n" : "\t");
}
return 0;
}[/code:1]
Ovo ti ispisuje [tt]isalpha()[/tt] za sve ASCII vrijednosti. :) Naravno, za ne-slova ispise nulu, ali za slova ispise 1024, a ne 1. 8) Jednostavno, tebe samo zanima je l' nula ili nije; ne zanima te koliko je ako nije nula. ;)
Zasto bas tako... ostavimo pricu za neku drugu priliku... ili barem drugog asistenta. ;)
[b]Poanta:[/b] ako ti se bas komplicira, onda umjesto [tt]isalpha(a[i])[/tt] stavi [tt]isalpha(a[i]) != 0[/tt], sto je stvarni ekvivalent tog logickog izraza. 8)
P.S. Znam da u pozivu [tt]isalpha()[/tt] ne treba castanje... stavih to iz pedagoskih razloga. ;)
man isalpha (napisa): | RETURN VALUE
The values returned are nonzero if the character c falls into the tested class, and a zero value if not. |
Probaj ovo:
Kod: | #include <stdio.h>
#include <ctype.h>
int main(void) {
int i;
for (i = 0; i < 256; ++i) {
printf("i = %d; isalpha((char)i) = %d", i, isalpha((char)i));
printf(i % 4 == 3 ? "\n" : "\t");
}
return 0;
} |
Ovo ti ispisuje isalpha() za sve ASCII vrijednosti. Naravno, za ne-slova ispise nulu, ali za slova ispise 1024, a ne 1. Jednostavno, tebe samo zanima je l' nula ili nije; ne zanima te koliko je ako nije nula.
Zasto bas tako... ostavimo pricu za neku drugu priliku... ili barem drugog asistenta.
Poanta: ako ti se bas komplicira, onda umjesto isalpha(a[i]) stavi isalpha(a[i]) != 0, sto je stvarni ekvivalent tog logickog izraza.
P.S. Znam da u pozivu isalpha() ne treba castanje... stavih to iz pedagoskih razloga.
_________________ 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.
|
|
[Vrh] |
|
lucika Forumaš(ica)
Pridružen/a: 22. 11. 2007. (17:52:27) Postovi: (12F)16
Spol:
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
komaPMF Forumaš(ica)
Pridružen/a: 22. 11. 2007. (10:23:41) Postovi: (E6)16
Spol:
Lokacija: Over the roof
|
Postano: 14:44 pon, 8. 6. 2009 Naslov: |
|
|
[code:1]#include<stdio.h>
#include<stdlib.h>
void dupliciraj (char s[], char c)
{
int i, brojac=0, t;
for (i=0; s[i]!='\0'; i++)
{
t=i+1;
if(s[i]==c) brojac++;
}
printf ("String je dugacak: %d", t);
printf ("\n Znak se ponavlja %d puta", brojac);
}
int main(){
char s[20];
char blj;
// printf ("Unesite string: ");
scanf("%[^\n]", s);
// printf("Unesite znak: ");
scanf ("%c", &blj);
//printf ("Znak: %c\n", blj);
dupliciraj(s, blj);
printf("\n Trazeni ispis: %s \n", s);
system ("PAUSE");
return 0;
}
[/code:1]
ne znam zašto mi ne da da unesem znak. upišem string i on ispiše sve ovo iz funkcije što sam mu zadala, ali preskoči mi scanf za znak. inače, ovo je dio zadatka 6.6. iz skripte (samo početak, i već ne radi kako treba). pa, ako netko zna u čemu je problem...
isto tako, ako zamijenim scanf-ove, tj. da prvo unesem znak pa onda string, preskoči mi upis za string i stavi duljinu stringa proizvoljno na 7,uspijem samo znak upisati. više ne znam stvarno u čemu je fora, probala sam svašta.
Kod: | #include<stdio.h>
#include<stdlib.h>
void dupliciraj (char s[], char c)
{
int i, brojac=0, t;
for (i=0; s[i]!='\0'; i++)
{
t=i+1;
if(s[i]==c) brojac++;
}
printf ("String je dugacak: %d", t);
printf ("\n Znak se ponavlja %d puta", brojac);
}
int main(){
char s[20];
char blj;
// printf ("Unesite string: ");
scanf("%[^\n]", s);
// printf("Unesite znak: ");
scanf ("%c", &blj);
//printf ("Znak: %c\n", blj);
dupliciraj(s, blj);
printf("\n Trazeni ispis: %s \n", s);
system ("PAUSE");
return 0;
}
|
ne znam zašto mi ne da da unesem znak. upišem string i on ispiše sve ovo iz funkcije što sam mu zadala, ali preskoči mi scanf za znak. inače, ovo je dio zadatka 6.6. iz skripte (samo početak, i već ne radi kako treba). pa, ako netko zna u čemu je problem...
isto tako, ako zamijenim scanf-ove, tj. da prvo unesem znak pa onda string, preskoči mi upis za string i stavi duljinu stringa proizvoljno na 7,uspijem samo znak upisati. više ne znam stvarno u čemu je fora, probala sam svašta.
_________________ Granice mogućega možemo odrediti samo onda ako ih prijeđemo odlaskom u nemoguće
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
__fox Forumaš(ica)
Pridružen/a: 28. 11. 2008. (20:00:38) Postovi: (35)16
Spol:
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 15:48 pon, 8. 6. 2009 Naslov: |
|
|
Rekao bih da je problem u novom redu ;) Naime, nakon što učitaš string, učitava se do novog reda (tj dok ne stisneš enter) i to se spremi u s, a onaj \n ostaje visjeti "u zraku". Na žalost njega pokupiš sa onim scanf("%c"), tj u tvoj znak blj se spremi \n.
Malo sam se igro, i siguran sam da ima bolji način da se ovo riješi, ali ovo je pomoglo:
[code:1]getchar();[/code:1]
nakon učitavanja stringa, a prije chara... taj getchar ubije onaj \n "iz zraka"
Ovo je samo trenutna pomoć, siguran sam da vsego ima nešto pametnije u rukavu ;)
edit: vsego brži i pametniji, skroz sam zaboravio te fore s charovima ;)
Rekao bih da je problem u novom redu Naime, nakon što učitaš string, učitava se do novog reda (tj dok ne stisneš enter) i to se spremi u s, a onaj \n ostaje visjeti "u zraku". Na žalost njega pokupiš sa onim scanf("%c"), tj u tvoj znak blj se spremi \n.
Malo sam se igro, i siguran sam da ima bolji način da se ovo riješi, ali ovo je pomoglo:
nakon učitavanja stringa, a prije chara... taj getchar ubije onaj \n "iz zraka"
Ovo je samo trenutna pomoć, siguran sam da vsego ima nešto pametnije u rukavu
edit: vsego brži i pametniji, skroz sam zaboravio te fore s charovima
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy
|
|
[Vrh] |
|
komaPMF Forumaš(ica)
Pridružen/a: 22. 11. 2007. (10:23:41) Postovi: (E6)16
Spol:
Lokacija: Over the roof
|
Postano: 13:04 uto, 9. 6. 2009 Naslov: |
|
|
[code:1]#include<stdio.h>
#include<stdlib.h>
char dupliciraj (char s[], char c)
{
int i, brojac=0, t, dodatno=0;
char *s1;
for (i=0; s[i]!='\0'; i++)
{
t=i+1;
if(s[i]==c) brojac++;
}
s1=(char*)malloc((t+1+brojac)*sizeof(char));
for (i=0; i<t; i++)
{
if (s[i]==c)
{
s1[i+dodatno]=s[i];
dodatno++;
s1[i+dodatno]=s[i];
}
else s1[i+dodatno]=s[i];
}
s1[t+1+brojac]='\0';
printf("\n Trazeni ispis: %s \n", s1 );
free (s1);
}
int main(){
char s[20];
char c;
scanf("%[^\n]", s);
scanf (" %c", &c);
dupliciraj(s, c);
system ("PAUSE");
return 0;
}
[/code:1]
kad smo već tu počeli stavljati zadatke...evo konačnog koda za zadatak [b]5[/b].6. bijah odsutna od jučer...sad mi nije jasno zašto za riječ "banana" i "n" ispiše na kraju "g". dobro podupla tražena slova ali zezne ovo.. negdje sam očito fulala s granicama za '\0'. za neke stringove mi dobro napiše :?
:P samo trebam umjesto s1[t+1+brojac] staviti s1[[b]t+brojac[/b]]='\0'
pitam se zašto mi je trebalo da prvo to stavim na forum pa skužim o čemu se radi
Kod: | #include<stdio.h>
#include<stdlib.h>
char dupliciraj (char s[], char c)
{
int i, brojac=0, t, dodatno=0;
char *s1;
for (i=0; s[i]!='\0'; i++)
{
t=i+1;
if(s[i]==c) brojac++;
}
s1=(char*)malloc((t+1+brojac)*sizeof(char));
for (i=0; i<t; i++)
{
if (s[i]==c)
{
s1[i+dodatno]=s[i];
dodatno++;
s1[i+dodatno]=s[i];
}
else s1[i+dodatno]=s[i];
}
s1[t+1+brojac]='\0';
printf("\n Trazeni ispis: %s \n", s1 );
free (s1);
}
int main(){
char s[20];
char c;
scanf("%[^\n]", s);
scanf (" %c", &c);
dupliciraj(s, c);
system ("PAUSE");
return 0;
}
|
kad smo već tu počeli stavljati zadatke...evo konačnog koda za zadatak 5.6. bijah odsutna od jučer...sad mi nije jasno zašto za riječ "banana" i "n" ispiše na kraju "g". dobro podupla tražena slova ali zezne ovo.. negdje sam očito fulala s granicama za '\0'. za neke stringove mi dobro napiše
samo trebam umjesto s1[t+1+brojac] staviti s1[t+brojac]='\0'
pitam se zašto mi je trebalo da prvo to stavim na forum pa skužim o čemu se radi
_________________ Granice mogućega možemo odrediti samo onda ako ih prijeđemo odlaskom u nemoguće
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 13:37 uto, 9. 6. 2009 Naslov: |
|
|
Zasto pise da funkcija vraca [tt]char[/tt], a onda nigdje prebitog [tt]return[/tt]-a? :-k
Inace, u zadatku pise da nesto treba napraviti na stringu i da pretpostavis da imas dovoljno memorije. :? Dakle, nema [tt]malloc()[/tt]-a i nema dodatnog niza (stringa). :ccc:
Zasto pise da funkcija vraca char, a onda nigdje prebitog return-a?
Inace, u zadatku pise da nesto treba napraviti na stringu i da pretpostavis da imas dovoljno memorije. Dakle, nema malloc()-a i nema dodatnog niza (stringa).
_________________ 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.
|
|
[Vrh] |
|
komaPMF Forumaš(ica)
Pridružen/a: 22. 11. 2007. (10:23:41) Postovi: (E6)16
Spol:
Lokacija: Over the roof
|
|
[Vrh] |
|
|