prvi digitron :)

1

prvi digitron :)

offline
  • 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 Very Happy 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 Very Happy
Evo Download:
[Link mogu videti samo ulogovani korisnici]



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Ajd, ja cu da budem "dzangrizalo" Smile
Saveti
int num1;     int num2;     int start;     int choice;     int z;     int r;     int m;     int d;
Nije ti potrebno ovoliko promenljivih Smile 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 Smile

Trece, kod deljenja, koristi realne brojeve, nemoj celobrojne...

Eto toliko za pocetak Smile
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 ..... Smile

Pozdrav



offline
  • 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 Smile

i jos jedno: Kako da koristim Realne brojeve ??

offline
  • Software developer
  • 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 Smile
[Link mogu videti samo ulogovani korisnici]
Imas tipove podataka
Koristi float za realne brojeve

offline
  • Dr SiGn  Male
  • 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 Smile

pozdrav,dr sign...

offline
  • 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..

offline
  • Software developer
  • 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

offline
  • 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)

offline
  • Software developer
  • 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....

offline
  • 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 :/

Ko je trenutno na forumu
 

Ukupno su 995 korisnika na forumu :: 65 registrovanih, 7 sakrivenih i 923 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Alibaba1981, amstel2, babaroga, bojan581, BraneS, brkan1, brundo65, ccoogg123, colji, DejanSt, Dimitrije Paunovic, Dimitrise93, DonRumataEstorski, DPera, E_Kurir, EXIT78, flash12, Frunze, g_g, HogarStrashni, Inner-Cell, istina, jalos, Japidson, jarovitt, Karaula, kljift, Kobrim, lacko, lavi, luka35, m0nstrum_, mercedesamg, mile09, milenko crazy north, Milos ZA, moldway, Momir117, N.e.m.a.nj.a., Nele79, nick79, Nikoladoktor, opt1, Pavle29L, pavle_pzs, Prašinar, Profesor_018, redstar72, rikirubio, rovac, Sančo, Siti2, UAV operator, ulogovan, User98, Username1000, Viktor Petrenko, virked, vlad the impaler, Wrangler, zastavnik, zlaya011, zoran77, zorzpapadubi, Zukov