Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Bug Forumaš(ica)


Pridružen/a: 06. 04. 2003. (17:31:11) Postovi: (1A9)16
Spol: 
Lokacija: Kako kad!!
|
Postano: 11:47 ned, 10. 9. 2006 Naslov: funkcija i zadatak |
|
|
Da li bi mi netko mogao napisat ovu f-ju
Napisite funkciju ciji je prototip slijedeceg oblika
unsigned int rot_lijevo(unsigned int x, unsigned int k);
i koja za dane nenegativne cijele brojeve x i k vraca nenegativni cijeli broj ciji je binarni zapis dobiven rotacijom
binarnog zapisa od x za k mjesta ulijevo.
Napomena: Zadatak morate rijesiti bez koristenjapolja. Smijete pretpostaviti da vrijedi
sizeof(unsignedint)==4.
hvala
i imam jos jedan problem, molio bih da mi ljudi kazu sta ne valja ovdje, izbacuje mi gresku "non-lvalue" kod if petlje
[code:1]
/*Napisite program koji ucitava rijec sastavljenu od najvise 100 znakova A, B ili C, te provjerava ima li
ucitana rijec slijedeca svojstva:
– pocinje sa znakom A;
– sadrzi dva ili vise susjednih znakova B, ili ne sadrzi niti jedan znak C;
– ne zavrsava sa znakom B.
Ukoliko su sva navedena svojstva zadovoljena, program treba ispisati da, dok u protivnom slucaju treba ispisati ne.
Napomena: U programskom kodu smijete upotrijebiti samo jednu for, while ili do-while petlju.*/
#include <stdio.h>
#include <string.h>
int main()
{
int i, n;
char rijec[101];
char r;
printf("Ucitaj rijec od maximalno 100 znakova: ");
scanf("%s", r);
n=strlen(rijec);
for (i=0; i<n; i++)
{
if (rijec[0]='A' && (rijec[i]='B' && rijec[i+1]='B' || rijec[i]!='C') && rijec[n]!='B')
printf("Da");
else printf("Ne");
}
scanf("%%");
return 0;
}
[/code:1]
Da li bi mi netko mogao napisat ovu f-ju
Napisite funkciju ciji je prototip slijedeceg oblika
unsigned int rot_lijevo(unsigned int x, unsigned int k);
i koja za dane nenegativne cijele brojeve x i k vraca nenegativni cijeli broj ciji je binarni zapis dobiven rotacijom
binarnog zapisa od x za k mjesta ulijevo.
Napomena: Zadatak morate rijesiti bez koristenjapolja. Smijete pretpostaviti da vrijedi
sizeof(unsignedint)==4.
hvala
i imam jos jedan problem, molio bih da mi ljudi kazu sta ne valja ovdje, izbacuje mi gresku "non-lvalue" kod if petlje
Kod: |
/*Napisite program koji ucitava rijec sastavljenu od najvise 100 znakova A, B ili C, te provjerava ima li
ucitana rijec slijedeca svojstva:
– pocinje sa znakom A;
– sadrzi dva ili vise susjednih znakova B, ili ne sadrzi niti jedan znak C;
– ne zavrsava sa znakom B.
Ukoliko su sva navedena svojstva zadovoljena, program treba ispisati da, dok u protivnom slucaju treba ispisati ne.
Napomena: U programskom kodu smijete upotrijebiti samo jednu for, while ili do-while petlju.*/
#include <stdio.h>
#include <string.h>
int main()
{
int i, n;
char rijec[101];
char r;
printf("Ucitaj rijec od maximalno 100 znakova: ");
scanf("%s", r);
n=strlen(rijec);
for (i=0; i<n; i++)
{
if (rijec[0]='A' && (rijec[i]='B' && rijec[i+1]='B' || rijec[i]!='C') && rijec[n]!='B')
printf("Da");
else printf("Ne");
}
scanf("%%");
return 0;
}
|
_________________ Everybody Dies...
Nobody is perfect...
Non scholae, sed vitae discimus
|
|
[Vrh] |
|
jakov Forumaš(ica)


Pridružen/a: 30. 08. 2006. (20:03:41) Postovi: (47)16
Spol: 
Lokacija: evo me doma
|
|
[Vrh] |
|
jakov Forumaš(ica)


Pridružen/a: 30. 08. 2006. (20:03:41) Postovi: (47)16
Spol: 
Lokacija: evo me doma
|
Postano: 13:55 ned, 10. 9. 2006 Naslov: |
|
|
Ne znam čemu ti služi char r. On se učitava s %c, a ne s %s. Ustvari, char r ti uopce ne treba vec umjesto scanf ("%s", r) trebas napisati scanf("%s", rijec). Tada će ti istek strlen imati smisla jer po tvojoj verziji rijec uopce nisi učitao. Nadalje, u if naredbama trebaš imati znak relacijeske jednakosti (==) umjesto znaka pridruživanja (=). Evo ti moje rjesenje (malo je spetljeno, ali radi). Dan je lijep. Uzivaj!
#include<stdio.h>
#include<string.h>
int main (void){
char rijec[100];
int da=0, br=0, i, n, br2=0;
printf ("Ucitajte rijec (max 100 znakova): ");
scanf ("%s", rijec);
n=strlen(rijec);
if (rijec[0] == 'A') da=0;
else goto kraj;
for (i=0; i<n-1; i++){
if (rijec[i]=='B' && rijec[i+1]=='B') br++;
if (rijec[i]=='C') br2++;
}
if (rijec[n-1]=='C')br2++;
if (br!=0 || br2==0) da =0; else goto kraj;
if (rijec[n-1]!='B')da = 0; else goto kraj;
if (!da) {printf ("Da."); goto kraj2;}
kraj : printf ("Ne.");
kraj2: scanf ("%%");
return 0;
}
Ne znam čemu ti služi char r. On se učitava s %c, a ne s %s. Ustvari, char r ti uopce ne treba vec umjesto scanf ("%s", r) trebas napisati scanf("%s", rijec). Tada će ti istek strlen imati smisla jer po tvojoj verziji rijec uopce nisi učitao. Nadalje, u if naredbama trebaš imati znak relacijeske jednakosti (==) umjesto znaka pridruživanja (=). Evo ti moje rjesenje (malo je spetljeno, ali radi). Dan je lijep. Uzivaj!
#include<stdio.h>
#include<string.h>
int main (void){
char rijec[100];
int da=0, br=0, i, n, br2=0;
printf ("Ucitajte rijec (max 100 znakova): ");
scanf ("%s", rijec);
n=strlen(rijec);
if (rijec[0] == 'A') da=0;
else goto kraj;
for (i=0; i<n-1; i++){
if (rijec[i]=='B' && rijec[i+1]=='B') br++;
if (rijec[i]=='C') br2++;
}
if (rijec[n-1]=='C')br2++;
if (br!=0 || br2==0) da =0; else goto kraj;
if (rijec[n-1]!='B')da = 0; else goto kraj;
if (!da) {printf ("Da."); goto kraj2;}
kraj : printf ("Ne.");
kraj2: scanf ("%%");
return 0;
}
|
|
[Vrh] |
|
Bug Forumaš(ica)


Pridružen/a: 06. 04. 2003. (17:31:11) Postovi: (1A9)16
Spol: 
Lokacija: Kako kad!!
|
Postano: 14:38 ned, 10. 9. 2006 Naslov: |
|
|
Ali ima jedan problem kod tvoga programa, zapravo 2, ne smiju se koristiti [b]goto[/b] i program ne zadovoljava sve uvjete odjednom
ajde ak ti nije problem pogledat zast meni ispise da kad ukucam [b]C[/b]
[code:1]#include <stdio.h>
#include <string.h>
int main()
{
int i, n, br=0, br2=0;
char rijec[101];
printf("Ucitaj rijec od maximalno 100 znakova: ");
scanf("%s", rijec);
n=strlen(rijec);
for (i=0; i<n; i++)
{
if (rijec[0]=='A' && rijec[n-1]!='B') br++;
if (rijec[i]==rijec[i+1]=='B' || rijec[i]!='C') br2++;
}
if (br==0 || br2==0)
printf("Ne");
else
printf("Da");
scanf("%%");
return 0;
}[/code:1]
Ali ima jedan problem kod tvoga programa, zapravo 2, ne smiju se koristiti goto i program ne zadovoljava sve uvjete odjednom
ajde ak ti nije problem pogledat zast meni ispise da kad ukucam C
Kod: | #include <stdio.h>
#include <string.h>
int main()
{
int i, n, br=0, br2=0;
char rijec[101];
printf("Ucitaj rijec od maximalno 100 znakova: ");
scanf("%s", rijec);
n=strlen(rijec);
for (i=0; i<n; i++)
{
if (rijec[0]=='A' && rijec[n-1]!='B') br++;
if (rijec[i]==rijec[i+1]=='B' || rijec[i]!='C') br2++;
}
if (br==0 || br2==0)
printf("Ne");
else
printf("Da");
scanf("%%");
return 0;
} |
_________________ Everybody Dies...
Nobody is perfect...
Non scholae, sed vitae discimus
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 16:48 ned, 10. 9. 2006 Naslov: |
|
|
Meni, kad ucitam [tt]C[/tt], ispisuje [tt]Ne[/tt]. 8)
[b]Problem:[/b]
[tt]rijec[i]==rijec[i+1]=='B'[/tt] :-s
Kad stavis [tt]a = b = 1[/tt], onda je to [tt]a = (b = 1)[/tt], tj. [tt]b = 1; a = b;[/tt] (jer se pridruzivanje evaluira s desna na lijevo). :) Na isti nacin:
[tt]y = (rijec[i] == rijec[i+1] == 'B')[/tt] :arrow: [tt]y = ((rijec[i] == rijec[i+1]) == 'B')[/tt] (jer se [tt]==[/tt] evaluira s lijeva na desno) sto je kao da napises
[tt]x = (rijec[i] == rijec[i+1]); y = (x == 'B');[/tt]
I [tt]x[/tt] i [tt]y[/tt] su 0 ili 1, sto ce reci da je [tt]y[/tt] rezultat usporedbe 0 ili 1 s 'B', a to je uvijek laz ('B' ima ASCII vrijednost 66), dakle 0. :(
Dodatno, u zadnjem koraku [tt]for()[/tt] petlje je [tt]i + 1 == n[/tt], pa zadnji znak usporedjujes s 0, sto nije krivo, ali vjerojatno nesvjesno napravljeno i produciralo bi gresku da su uvjeti zadatka drugaciji. :?
Usput, [tt]if (rijec[0]=='A' && rijec[n-1]!='B') br++;[/tt] ne mora biti u petlji. :)
Meni, kad ucitam C, ispisuje Ne.
Problem:
rijec[i]==rijec[i+1]=='B'
Kad stavis a = b = 1, onda je to a = (b = 1), tj. b = 1; a = b; (jer se pridruzivanje evaluira s desna na lijevo). Na isti nacin:
y = (rijec[i] == rijec[i+1] == 'B') y = ((rijec[i] == rijec[i+1]) == 'B') (jer se == evaluira s lijeva na desno) sto je kao da napises
x = (rijec[i] == rijec[i+1]); y = (x == 'B');
I x i y su 0 ili 1, sto ce reci da je y rezultat usporedbe 0 ili 1 s 'B', a to je uvijek laz ('B' ima ASCII vrijednost 66), dakle 0.
Dodatno, u zadnjem koraku for() petlje je i + 1 == n, pa zadnji znak usporedjujes s 0, sto nije krivo, ali vjerojatno nesvjesno napravljeno i produciralo bi gresku da su uvjeti zadatka drugaciji.
Usput, if (rijec[0]=='A' && rijec[n-1]!='B') br++; ne mora biti u petlji.
_________________ 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] |
|
jakov Forumaš(ica)


Pridružen/a: 30. 08. 2006. (20:03:41) Postovi: (47)16
Spol: 
Lokacija: evo me doma
|
Postano: 22:13 ned, 10. 9. 2006 Naslov: |
|
|
Meni program uredno radi kada učitam 'C', ispisuje 'Ne.' Ako te buni zašto u mom kodu ide [size=12][size=18]i[/size][/size] do n-1, to ti je jer pitaš kasnije za rijec[i+1], a za i=n-1 imaš rijec[n], a to je '\0'. Što se tiče naredbe goto, ne znam zašto je ne bih smio koristiti (premda je ona predviđena samo za ispitivanje grešaka, tako nam je bar rečeno na predavanju, ali ona se meni baš dopada), ali mislim da sam ovime malčice skratio rad programa, iako je na kraju ispao skroz spetljano i lako se pogubiš. Trebalo bi samo ubaciti onda jedan brojač koji će stalno biti na nuli i u slučaju da naiđeš na nešto što ne ispunjava zadane uvjete, samo ga povećati i na kraju s jednom if naredbom riješiti cijeli ispis. Naime, sad nemam vremena više, (a ni sutra), ali ako ne uspiješ, javi mi se pa ću ti ga napisati (u utorak) na drugi način. Ne volim tražiti greške u tuđim programima jer ne znam ideju pa se cijeli pogubim, ali i tu se trudim.
Meni program uredno radi kada učitam 'C', ispisuje 'Ne.' Ako te buni zašto u mom kodu ide [size=18]i[/size] do n-1, to ti je jer pitaš kasnije za rijec[i+1], a za i=n-1 imaš rijec[n], a to je '\0'. Što se tiče naredbe goto, ne znam zašto je ne bih smio koristiti (premda je ona predviđena samo za ispitivanje grešaka, tako nam je bar rečeno na predavanju, ali ona se meni baš dopada), ali mislim da sam ovime malčice skratio rad programa, iako je na kraju ispao skroz spetljano i lako se pogubiš. Trebalo bi samo ubaciti onda jedan brojač koji će stalno biti na nuli i u slučaju da naiđeš na nešto što ne ispunjava zadane uvjete, samo ga povećati i na kraju s jednom if naredbom riješiti cijeli ispis. Naime, sad nemam vremena više, (a ni sutra), ali ako ne uspiješ, javi mi se pa ću ti ga napisati (u utorak) na drugi način. Ne volim tražiti greške u tuđim programima jer ne znam ideju pa se cijeli pogubim, ali i tu se trudim.
|
|
[Vrh] |
|
andreao Forumaš(ica)


Pridružen/a: 10. 02. 2005. (12:08:18) Postovi: (46F)16
Lokacija: SK
|
|
[Vrh] |
|
jakov Forumaš(ica)


Pridružen/a: 30. 08. 2006. (20:03:41) Postovi: (47)16
Spol: 
Lokacija: evo me doma
|
Postano: 14:04 pon, 11. 9. 2006 Naslov: |
|
|
Stigoh ja to danas pogledati i malo prepraviti. Dodao sam još jedan brojač i to je to. Nadam se da je sada u redu. Ako nešto nije jasno(posebno ovaj ispis na kraju), viči!
#include<stdio.h>
#include<string.h>
int main (void){
char rijec[100];
int da=0, br=0, i, n, b=0;
printf ("Ucitajte rijec (max 100 znakova): ");
scanf ("%s", rijec);
n=strlen(rijec);
if (rijec[0]=='A' && rijec[n-1]!='B') da = 0;
else da++;
for (i=0; i<n-1; i++){
if (rijec[i]=='B' && rijec[i+1]=='B') b++;
if (rijec[i]=='C') br++;
}
if (rijec[n-1]=='C') br++;
if (da==0 && (b || (!br))) printf ("Da.");
else printf ("Ne.");
scanf ("%%");
return 0;
}
Ugodan ostatak dana želim!
Stigoh ja to danas pogledati i malo prepraviti. Dodao sam još jedan brojač i to je to. Nadam se da je sada u redu. Ako nešto nije jasno(posebno ovaj ispis na kraju), viči!
#include<stdio.h>
#include<string.h>
int main (void){
char rijec[100];
int da=0, br=0, i, n, b=0;
printf ("Ucitajte rijec (max 100 znakova): ");
scanf ("%s", rijec);
n=strlen(rijec);
if (rijec[0]=='A' && rijec[n-1]!='B') da = 0;
else da++;
for (i=0; i<n-1; i++){
if (rijec[i]=='B' && rijec[i+1]=='B') b++;
if (rijec[i]=='C') br++;
}
if (rijec[n-1]=='C') br++;
if (da==0 && (b || (!br))) printf ("Da.");
else printf ("Ne.");
scanf ("%%");
return 0;
}
Ugodan ostatak dana želim!
|
|
[Vrh] |
|
mladac Forumaš(ica)


Pridružen/a: 24. 10. 2005. (22:46:14) Postovi: (4D5)16
Spol: 
Lokacija: zg
|
|
[Vrh] |
|
andreao Forumaš(ica)


Pridružen/a: 10. 02. 2005. (12:08:18) Postovi: (46F)16
Lokacija: SK
|
|
[Vrh] |
|
suziQ Forumaš(ica)


Pridružen/a: 29. 05. 2005. (13:52:50) Postovi: (2B)16
Spol: 
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
andreao Forumaš(ica)


Pridružen/a: 10. 02. 2005. (12:08:18) Postovi: (46F)16
Lokacija: SK
|
|
[Vrh] |
|
andreao Forumaš(ica)


Pridružen/a: 10. 02. 2005. (12:08:18) Postovi: (46F)16
Lokacija: SK
|
Postano: 15:06 uto, 12. 9. 2006 Naslov: |
|
|
@suziq:Vidi ovaj program.Jel to to šta tražiš?
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,x,y,prvi,drugi,min1,j,min2,x1,y1;
printf("Upisite koliko brojeva zelite ucitati:");
scanf("%d",&i);
if(i==1) return 0;
printf("Upisite 1. i 2. broj a da nije 0: ");
scanf("%d %d",&x,&y);
if(x==0){
printf("Ucitajte ponovo 1. broj a da nije nula: ");
scanf("%d",&x);
}
if(y==0){
printf("Ucitajte ponovo 2. broj a da nije nula: ");
scanf("%d",&y);
}
if(x==0 && y==0){
printf("Ucitajte ponovo 1. i 2. broj: ");
scanf("%d %d",&x,&y);
}
prvi=x;
drugi=y;
min1=abs(prvi-drugi);
if(i==2){ printf("Brojevi sa najmanjom medusobnom razlikom su %d i %d.",
prvi,drugi); scanf("%%"); return 0;
}
for(j=3;j<=i;j++){
printf("Unesite %d. broj: ",j);
scanf("%d",&y);
if(y==0){
printf("Ucitajte ponovo 2. broj a da nije nula: ");
scanf("%d",&y);
}
prvi=drugi;
drugi=y;
min2=abs(prvi-drugi);
if(min2<=min1){
min1=min2;
x1=prvi;
y1=drugi;
}
}
printf("Najmanja razlika je %d izmedu %d i %d.",min1,x1,y1);
scanf("%%");
return 0;
}
@suziq:Vidi ovaj program.Jel to to šta tražiš?
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,x,y,prvi,drugi,min1,j,min2,x1,y1;
printf("Upisite koliko brojeva zelite ucitati:");
scanf("%d",&i);
if(i==1) return 0;
printf("Upisite 1. i 2. broj a da nije 0: ");
scanf("%d %d",&x,&y);
if(x==0){
printf("Ucitajte ponovo 1. broj a da nije nula: ");
scanf("%d",&x);
}
if(y==0){
printf("Ucitajte ponovo 2. broj a da nije nula: ");
scanf("%d",&y);
}
if(x==0 && y==0){
printf("Ucitajte ponovo 1. i 2. broj: ");
scanf("%d %d",&x,&y);
}
prvi=x;
drugi=y;
min1=abs(prvi-drugi);
if(i==2){ printf("Brojevi sa najmanjom medusobnom razlikom su %d i %d.",
prvi,drugi); scanf("%%"); return 0;
}
for(j=3;j<=i;j++){
printf("Unesite %d. broj: ",j);
scanf("%d",&y);
if(y==0){
printf("Ucitajte ponovo 2. broj a da nije nula: ");
scanf("%d",&y);
}
prvi=drugi;
drugi=y;
min2=abs(prvi-drugi);
if(min2<=min1){
min1=min2;
x1=prvi;
y1=drugi;
}
}
printf("Najmanja razlika je %d izmedu %d i %d.",min1,x1,y1);
scanf("%%");
return 0;
}
_________________ 
|
|
[Vrh] |
|
jakov Forumaš(ica)


Pridružen/a: 30. 08. 2006. (20:03:41) Postovi: (47)16
Spol: 
Lokacija: evo me doma
|
Postano: 19:15 uto, 12. 9. 2006 Naslov: |
|
|
Andreo, mislim da ne smiješ na početku programa pitati koliko će brojeva biti u nizu. Ovako bih ja to napisao:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int x, y, min, i = 3;
printf ("Ucitajte 1. broj: ");
scanf ("%d", &x);
if (x==0) exit (-1);
printf ("Ucitajte 2. broj: ");
scanf (" %d", &y);
if (y==0) exit (-1);
min = x - y;
while (x){
printf ("Ucitajte %d. broj: ", i++);
scanf (" %d", &x);
if (x==0){ printf ("\nNajmanja razlika je %d.", min); break;}
if (min > y - x) min = y - x;
y = x;
}
return 0;
}
(mogu se još eventualno dodati poruke o 'grešci' prije svake naredbe exit(-1), nešto tipa 'Ucitali ste premalo brojeva)
Andreo, mislim da ne smiješ na početku programa pitati koliko će brojeva biti u nizu. Ovako bih ja to napisao:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int x, y, min, i = 3;
printf ("Ucitajte 1. broj: ");
scanf ("%d", &x);
if (x==0) exit (-1);
printf ("Ucitajte 2. broj: ");
scanf (" %d", &y);
if (y==0) exit (-1);
min = x - y;
while (x){
printf ("Ucitajte %d. broj: ", i++);
scanf (" %d", &x);
if (x==0){ printf ("\nNajmanja razlika je %d.", min); break;}
if (min > y - x) min = y - x;
y = x;
}
return 0;
}
(mogu se još eventualno dodati poruke o 'grešci' prije svake naredbe exit(-1), nešto tipa 'Ucitali ste premalo brojeva)
|
|
[Vrh] |
|
andreao Forumaš(ica)


Pridružen/a: 10. 02. 2005. (12:08:18) Postovi: (46F)16
Lokacija: SK
|
|
[Vrh] |
|
|