View Full Version : Pomozite mi! Rješite mi jedan zadačić iz programiranja
viki00007777
01-12-2007, 18:14
Ne znam da li ovo spada tu, ali bi molio bilo koga za pomoć - da mi riješi ovaj zadatak u C-u.
ZAD. : Napisati program kojim se unose 3 velika slova engleske abecede. Ako uneseni znak nije veliko slovo engleske abecede, ispisati poruku "Neispravan unos" i završiti program. Ako je unos ispravan, potrebno je ispisati ono slovo koje se pojavljuje više od jedan put, ako takvog ima. U slučaju da se niti jedno slovo ne pojavljuje više od jedan put, ispisati ono slovo koje ima najmanju ASCII vrijednost. Na kraju pretvorite velika slova u mala i ispišite ih na zaslon.
Puno hvala,...!
Pa ne cini mi se neki problem.
Vidis, mala slova se nalaze u ascii kodu od vrijednosti 97 do 122, a velika od 65 do 90
dakle razlika izmedju istog velikog i malog slova je 32
npr. vrijednost od malog a + 32 je vrijednost od velikog slova a
Ma evo rješio sam ali katastrofalno :uaa:
//1.12.2007.
//by empetri
#include<stdio.h>
void main(){
int i,min;
char c[2];
for(i=0;i<3;i++){
printf("Unesi %d. slovo. \n",i+1);
scanf("%s",&c[i]);
if(c[i]>96){
printf("neispravan unos \n");
break;}}
if(c[0]==c[1]) printf("Ponavlja se %c \n",c[0]);
else if(c[0]==c[2]) printf("Ponavlja se %c \n",c[0]);
else if(c[1]==c[2]) printf("Ponavlja se %c \n",c[1]);
else{
min=c[0];
for(i=1;i<3;i++){if(min>c[i]) min=c[i];}
printf("Najmanju ascii vrijednost ima %c \n",min);}
for(i=0;i<3;i++){
printf("%c \n",c[i]+32);}
}
Problem prvi je što ne izbaci iz programa nego samo iz petlje kada se upiše malo slovo.
Problem drugi je što ovaj dio programa za uspoređivanje ascii vrijednosti vrijedi samo za ta 3 slova, volio bi kad bi se to moglo lijepše napisati pomoću neke petlje.
Problem treci je što ne mogu editirati post pa ih sada imam tri za redom.
viki00007777
01-12-2007, 23:33
Pomoglo je. Puno hvala!
viki00007777
01-12-2007, 23:37
Jedino ima jedan problemčić. Zašto mi za upisano slovo koje nije veliko slovo eng. abecede ispisuje i "Najmanju ascii vrijednost ima".. i ostatak ispod. zašto se ne zaustavi i ne ispiše samo "neispravan unos"?
Eh to sam napisao tamo pod probleme :mm:
Dakle
if(c[i]>96){
printf("neispravan unos \n");
break;}
sa break naredbom samo iskače iz te petlje, ali nastavlja sa programom dalje
ne pada mi napamet niti jedno inteligentno rješenje, i ne znam postoji li naredba koja zaustavlja program :kokica:
probao sam nešto sa do - while petljom ali nećemo sada o tome...
viki00007777
01-12-2007, 23:54
Sad sam skužio. A što si rekao da si probao s do-while petljom? Jeli se s do-while petljom otklanja taj problem?
Koji sam ja baksuz... Evo ti koda koji radi sve što se traži, samo što i dalje nisam sretan s tim što vrijedi samo za 3 slova. Al ajd.
#include<stdio.h>
int main(){
int i,min;
char c[2];
for(i=0;i<3;i++){
printf("Unesi %d. slovo. \n",i+1);
scanf("%s",&c[i]);
if(c[i]>96){
printf("neispravan unos \n");
return 0;}}
if(c[0]==c[1]) printf("Ponavlja se %c \n",c[0]);
else if(c[0]==c[2]) printf("Ponavlja se %c \n",c[0]);
else if(c[1]==c[2]) printf("Ponavlja se %c \n",c[1]);
else{
min=c[0];
for(i=1;i<3;i++){if(min>c[i]) min=c[i];}
printf("Najmanju ascii vrijednost ima %c \n",min);}
for(i=0;i<3;i++){
printf("%c \n",c[i]+32);}
return 0;
}
viki00007777
03-12-2007, 16:13
Možeš li mi još nešto pomoći?
kod jednog dijela:
int a=5;
int b, c;
b=++a * 2;
c=b++;
Nakon izvođenja a=6, b=13, c=12.
Zašto je to tako? Možeš li mi to objasnit?
int a=5;
int b, c;
b=++a * 2;
c=b++;
Nakon izvođenja a=6, b=13, c=12.
Evo ovako, kada je operator ++ prije varijable, onda se varijabla odma poveća za 1, kada je poslije varijable onda najprije izvrši naredbu, pa tek onda uveća varijablu za 1
int a = 5, b, c;
varijabli "a" se pridruzuje pocetna vrijednost 5
b = ++a * 2;
prvo se u naredbi poveca vrijednost varijable "a" za 1, a = 6, i tek onda se izvrsi mnozenje i rezultat pridruzuje varijabli "b", b = 12
c = b++;
prvo se izvrsi pridruzivanje dok je "b" i dalje = 12, dakle i c =12, i tek onda se "b" poveca za 1, tj b = 13
:eu:
viki00007777
03-12-2007, 17:04
Sorry što te gnjavim, ali ovo mi je puno pomoglo. sutra imam kolokvij iz programiranja, pa pokušavam razjasnit nekoliko stvari.
imam još dva primjera.
ako mi možeš komentirati rješenja svakog od njih, puno bi mi pomoglo. hvala.
1. primjer
Što će se ispisati slijedećim programskim odsječkom?
int a, b, c, d;
a = 0;
b = 4;
c = (a++) + b;
printf("a = %d, b = %d, c = %d\n",a, b, c);
d = c && b + 3 * a;
printf("d = %d\n", d);
a = 1, b = 4, c = 4 d = 1
2. primjer
Što će se ispisati na zaslonu slijedećim naredbama?
int a = 5, b = -1, c = 0;
c = (a = c && b) ? a = b : ++c;
printf("a = %d, b = %d, c = %d \n",a, b, c);
a = 0, b = -1, c = 1
Puno hvala!
Ne gnjaviš i meni ovo dobro dođe :D
a = 0;
b = 4;
c = (a++) + b;
dakle c = 0 + 4 = 4, i tek onda se "a" poveća sa 0 na 1, a=1
b ostane isti, dakle b = 4
d = c && b + 3 * a;
&& - logički operator "i" koji ovako djeluje
0 && 0 = 0, 0 && 1 = 0, 1 && 0 = 0, 1 && 1 = 1
svaki cijeli broj se uzima kao logička istina, tj. "1", a samo 0 je neistina, tj "0"
sa lijeve strane je c, sa desne b+3*a --> 4 && 7, tj. 1 && 1 = 1, d = 1
int a = 5, b = -1, c = 0;
c = (a = c && b) ? a = b : ++c;
Ovo je zapravo skraćeni uvjet, isto ovo je moglo biti napisano na slijedeći način:
if (a = c && b) a=b;
else ++c;
dakle, c = (uvjet) ? istina : neistina;
c = (a = 0 && -1) ? a = -1 : c = 0 + 1;
budući da je 0 && -1 logička LAŽ, rezultat je 0, i varijabla "a" poprima vrijednost 0, dakle ispunjava se druga naredba, ++c (0+1), i ta vrijednost se pridružuje varijabli "c", c = 1, a "b" ostaje -1
viki00007777
03-12-2007, 18:33
Hvala na pomoći. Sad sam razjasnio neke stvari.
viki00007777
12-12-2007, 21:26
Evo opet ja:). Imam još jedan zadačić. Ako bi ga mogao rješit, stvarno bi mi pomoglo. Dosta je težak s obzirom da sam ja početnik. Ovo nam je prof. dao da riješimo za pripremu.
Napisati program koji će učitati broj članova reda n (provjeriti da li je n prirodan broj iz intervala [1, 50]). Izračunati broj 0.75 pomoću sljedećeg reda:
3/4=1/1×3 + 1/2×4 + 1/2×3 + 1/3×5+...+1/(i-1)×(i+1)+...
a zatim ispisati:
- učitani broj članova reda n
- vrijednosti za 0.75 određenu pomoću sume n članova reda
- apsolutnu vrijednost pogreške proračuna kao razlika između vrijednosti dobivene sumom reda i prave vrijednosti.
viki00007777
13-12-2007, 12:18
Ne treba. Uspio sam ga riješit. I to uspješno. :)
vBulletin® v3.7.4, Copyright ©2000-2009, Jelsoft Enterprises Ltd.