Poslao: 16 Sep 2010 21:54
|
offline
- clzola

- Građanin
- Pridružio: 10 Mar 2009
- Poruke: 101
- Gde živiš: Podgorica
|
Uzeo sam danas da ucim programiranje u C jeziku (u osnovnoj smo ucili u QBasic i ucili smo to za algoritme, tako da znam odprilike kako to ide)
Poceo sam od Hello World, pa malo sabiranje i odlucio da se malo igram sa digitronom
Uspio sam da ga napravim medjutim moze da sabira, mnozi, dijeli, oduzima samo sa 2 broja... Radi u cmd :/
Evo kod:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void)
{
int num1;
int num2;
int start;
int choice;
int z;
int r;
int m;
int d;
printf("Mini-Digi v2.0 Beta by clzola\n");
start:
printf("\n1 = Sabiranje\n2 = Oduzimanje\n3 = Mnozenje\n4 = Dijeljenje\n5 = Exit\n\n");
printf("Unesite broj: ");
scanf("%d", &choice);
switch(choice)
{
case 1:
system("CLS");
printf("Izabrali ste sabiranje\n");
printf("Unesite prvi broj: ");
scanf("%d", &num1);
printf("Unesite drugi broj: ");
scanf("%d", &num2);
z = num1 + num2;
printf("\n");
printf("Zbir = %d", z);
printf("\n\n=========================================================");
goto start;
break;
case 2:
system("CLS");
printf("Izabrali ste oduzimanje\n");
printf("Unesite prvi broj: ");
scanf("%d", &num1);
printf("Unesite drugi broj: ");
scanf("%d", &num2);
r = num1 - num2;
printf("\n");
printf("Razlika = %d", r);
printf("\n\n=========================================================");
goto start;
break;
case 3:
system("CLS");
printf("Izabrali ste mnozenje\n");
printf("Unesite prvi broj: ");
scanf("%d", &num1);
printf("Unesite drugi broj: ");
scanf("%d", &num2);
m = num1 * num2;
printf("\n");
printf("Proizvod = %d", m);
printf("\n\n=========================================================");
goto start;
break;
case 4:
system("CLS");
printf("Izabrali ste dijeljenje\n");
printf("Unesite prvi broj: ");
scanf("%d", &num1);
printf("Unesite drugi broj: ");
scanf("%d", &num2);
d = num1 / num2;
printf("\n");
printf("Kolicnik = %d", d);
printf("\n\n=========================================================");
goto start;
break;
case 5:
exit(0);
break;
default:
system("CLS");
printf("Unijeli ste pogresan broj\n\n");
goto start;
break;
}
}
S obzirom da mi je prvi 'ozbiljan' program za neko moje znanje, nadam se da je dobar
Iznesite svoje misljenje svaka kritika je dobrodosla, u toku sledecih dana videcu da ubacim da moze da radi sa vise brojeva, pa cu polako za par meseci da predjem na graficko okruzenje sa ovim digitronom
Evo Download:
[Link mogu videti samo ulogovani korisnici]
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 16 Sep 2010 22:07
|
offline
- N1k0l4

- Prijatelj foruma
- Pridružio: 06 Sep 2005
- Poruke: 3800
- Gde živiš: Beograd
|
Ajd, ja cu da budem "dzangrizalo"
Saveti
int num1;
int num2;
int start;
int choice;
int z;
int r;
int m;
int d;
Nije ti potrebno ovoliko promenljivih Naravno , to nije nikakav problem kad je program ovako mali, ali ako bi radio veci program moras i o tome da razmisljas.
U ovom trenutku ti nije potrebno da cuvas sve ove vrednosti, recimo, za choice ,z,r,m,d mozes da imas jednu promenljivu, na primer "priv" jer ti nije bitno toliko koja je njena vrednost za kasnija izracunavanja, koristi se samo u datom trenutku.
Dalje, opet savet za buduce kad budes radio nesto vece, recimo, kao sto rekoh, zbir i ostalo racunas samo jednom i to ti posle ne treba, pa mozes da razmisljas da ustedis operacije:
z = num1 + num2;
printf("\n");
printf("Zbir = %d", z)
da bi se prvi red izvrsio, treba da se saberu dve vrednosti, da se dodele trecoj promenljivoj.... Efikasnije bi bilo da si stavio
printf("\n");
printf("Zbir = %d", num1 + num2);
Ponavljam, ovde se ne primecuje razlika, ali ako nekad budes nesto veliko pravio gde imas mnogo izracunavanja, svaki detalj je bitan
Trece, kod deljenja, koristi realne brojeve, nemoj celobrojne...
Eto toliko za pocetak
Sad napravi da se ne ucitava: Unesite 1 za sabiranje , 2 oduzimanje, nego stavis : unesite izraz , pa kad se unese 3+2 on izbaci 5 .....
Pozdrav
|
|
|
|
Poslao: 17 Sep 2010 20:29
|
offline
- clzola

- Građanin
- Pridružio: 10 Mar 2009
- Poruke: 101
- Gde živiš: Podgorica
|
Hvala, shvatam da je sve to sto sam ja kucao nije mnogo za ovaj kod, ali za ostale ce biti.. ali jbg tek sam uzeo da ucim... ovo 3+2 stvarno ne znam kako
gledao sam to bude nesto ovako ali ne radi
int znak
int num1
int num2
int r
int start
start:
printf("Unesi izraz: ");
scanf("%d%d%d", &num1, &znak, &num2);
if(znak=='+')
{
r = num1 + num2;
printf("Rezultat = %d", r);
goto start;
}
if(znak=='-')
{
r = num1 - num2;
printf("Rezultat = %d", r);
goto start;
}
radim preko Dev-C++. pritisnem compile on sve odradi, pokrenem program normalno i kad kucam vrijednos 2+2 nekad izbaci da je to -232543425 nekad ne izbaci nista, neka da je to 0.. totalno ludo radi xD
Gdje grijesim
i jos jedno: Kako da koristim Realne brojeve ??
|
|
|
|
Poslao: 17 Sep 2010 22:13
|
offline
- N1k0l4

- Prijatelj foruma
- Pridružio: 06 Sep 2005
- Poruke: 3800
- Gde živiš: Beograd
|
Sto se tice 3+2 ne radi ti jer ides scanf %d%d%d , a znak + nije %d nego %c odnosno karakter a ne broj
[Link mogu videti samo ulogovani korisnici]
Imas tipove podataka
Koristi float za realne brojeve
|
|
|
|
Poslao: 17 Sep 2010 22:14
|
offline
- Dr SiGn

- Stručni saradnik
Windows
- Pridružio: 11 Jul 2005
- Poruke: 1149
- Gde živiš: Beograd
|
Prvo,ne treba ti promenljiva start.Drugo,promenljiva znak treba da ti bude tipa char,znaci :
char znak;
Onda,kod scanf treba da ti stoji ovako:
scanf("%d%c%d", &num1, &znak, &num2);
Jer na drugom mestu unosis znak(char),a ne celobrojni broj(int)
Za realne brojeve koristi tip float ili double,razlika je u preciznosti,vidi o tome na googlu...
Jos nesto,vidim da koristis goto,to se u principu ne preporucuje jer kasnije u kompleksnom kodu izaziva konfuziju.Za ovo sto ti hoces trebalo bi da koristis petlje,ali za sada dok ne naucis mozes da se igras sa goto
pozdrav,dr sign...
|
|
|
|
Poslao: 17 Sep 2010 22:29
|
offline
- clzola

- Građanin
- Pridružio: 10 Mar 2009
- Poruke: 101
- Gde živiš: Podgorica
|
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(void)
{
char znak;
float num1;
float num2;
int start;
start:
printf("Unesite izraz: ");
scanf("%d %c %d", &num1, &znak, &num2);
if (znak=='+')
{
printf("Rezultat = %d\n", num1 + num2);
goto start;
}
if (znak=='-')
{
printf("Rezultat = %d\n", num1 - num2);
goto start;
}
if (znak=='*')
{
printf("Rezultat = %d\n", num1 * num2);
goto start;
}
if (znak=='/')
{
printf("Rezultat = %d\n", num1 / num2);
goto start;
}
}
Ako stavim int sve radi normalno sem sto kod dijeljenja normalno dijeli 6/2 22/2 10/2 i to a ako stavim 5/2 rezultat je 2, 9/2 = 4
A ako stavim float za sve operacije mi je uvijek 0.
A ako probam na primer 4 + 7.1 onda mi se bez prekida ispusuje "Rezultat = 0", samo se ispisuje po ekranu :/
Gdje sam sad pogrijesio...
Nikola je li imas jos nekih sajtova sa komandama i tipovima i tako to za C..
|
|
|
|
Poslao: 17 Sep 2010 22:59
|
offline
- N1k0l4

- Prijatelj foruma
- Pridružio: 06 Sep 2005
- Poruke: 3800
- Gde živiš: Beograd
|
if (znak=='/')
{
printf("Rezultat = %d\n", num1 / num2);
goto start;
}
stampas %d sto je opet ceo broj, a treba %f
|
|
|
|
Poslao: 18 Sep 2010 00:08
|
offline
- clzola

- Građanin
- Pridružio: 10 Mar 2009
- Poruke: 101
- Gde živiš: Podgorica
|
da, da, da.. hvala
prepravio sam sada kod
stoji float
i svugde gde je bilo %d sad sam stavio %f i sve radi odlicno
Edit:
Trazio sam na netu da vidim kako su drugi pravili digitron i vidio sam jedan digitron koji radi tako sto uneses prvo znak (+ - * /) pa onda broj i onda on izracuna.. rezultat pamti i mozes da nastavis.. Bio je u C++ jeziku... pa je mene inspirisalo da ga napisem u C jeziku i evo kako sam ja to napisao
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int r;
int newEntry;
char sym;
r = 0.0;
printf("\nUpisi znak/operator: ");
scanf("%c", &sym);
while (sym != 'Q' || sym != 'q') (ovu lajnu sam prepisao iz koda tacno jer bez nje nije htio da nastavlja da racuna.. pa me isto zanima sta ona radi)
{
switch(sym)
{
case 'c':
case 'C':
r = 0.0;
case '+':
printf("Upisi broj: ");
scanf("%d", &newEntry);
r = r + newEntry;
break;
case '-':
printf("Upisi broj: ");
scanf("%d", &newEntry);
r = r - newEntry;
break;
case '*':
printf("Upisi broj: ");
scanf("%d", &newEntry);
r = r * newEntry;
break;
case '/':
printf("Upisi broj: ");
scanf("%d", &newEntry);
if (newEntry == 0)
{
printf("\nNe mozete dijeliti sa nulom.");
newEntry = 1;
}
r = r / newEntry;
break;
default:
printf("\nUpisali ste pogresan znak");
break;
}
printf("\nRezultat = %d", r);
printf("\nUpisi znak/operator: ");
scanf("%c", &sym);
}
}
On racuna sve kako treba samo ima jedna greska koja ne smeta radu.. evo je na slici >>
on ispisuje i po nesto sto ne bi trebalo... (to treba da ispise samo ako unemsem pogresan znak)
|
|
|
|
Poslao: 18 Sep 2010 22:12
|
offline
- N1k0l4

- Prijatelj foruma
- Pridružio: 06 Sep 2005
- Poruke: 3800
- Gde živiš: Beograd
|
Pogledacu kasnije kad stignem detaljnije.
Jedan savet za tebe, posto si nov na forumu. Nemoj menjati sadrzaj poruke jer onda mi ne vidimo to. Odnosno, to se ne vodi kao nova poruka, i onda svi koji su vec videli staru(koju si izmenio) ne mogu da vide novu. Nego samo odgovori na tu novu i one ce se spojiti....
Drugo, zapade mi odmah za oci:
int r;
int newEntry;
char sym;
r = 0.0;
ako ga vec koristis kao float, definisi ga kao float a ne kao integer.
Zasto ovo ne radi kako treba trenutno ne vidim, pogledacu kasnije, koliko vidim dva puta prolazi kroz petlju iz nekog razloga....
|
|
|
|
Poslao: 18 Sep 2010 23:50
|
offline
- clzola

- Građanin
- Pridružio: 10 Mar 2009
- Poruke: 101
- Gde živiš: Podgorica
|
Ma na drugim forumima zabranjeno da pises dva puta zbog spama, pa mi ostalo u navici da vrsim EDIT... OK kad stignes da pogledas javi... ja sam razbio glavu, mene to izgleda sve ok :/
|
|
|
|