da ali to radi ako uneseš broj ili znak i stisneš enter ali ako u jedan red upišeš cijeli niz i stisneš enter onda to nije to
ja i zaboravih za ovu temu..ugl super sam prosao pa eo postam kod...ono sa postivanjem operacija se moglo napravit bez stringova i ostalih fora..al mi se ne nije dalo backat oko toga.. eo koda
#include <stdio.h>
main()
{
//definisanje promenjivih
int operand=0, rez=0; //operand - predstavlja promenjivu drugog operanda, rez - predstavlja prvi operand a ujedno i rezultat
char operacija; //operacija - promenjiva za znak operacije (+ - / * )
printf("\n\tKALKULATOR ZA CELOBROJNE VREDNOSTI SA 4 OSNOVNE OPERACIJE [+ - * /] \n\n"); //STA PROGRAM RADI
printf("\n\t\t\t\tver 1.5 \n\n");
printf("\n\t\tKorisnik unosi izraz sve dok za operaciju ne unese [=] !!\n");
printf("\n\t\t\tUnesite operand : ");
scanf("%d", &rez); //unosenje prvog operanda u promenjivu rez
fflush(stdin); //ciscenje bufera
do{ //ulazenje u do/while petlju..koja omogucuje suksesivno unosenje brojeva
do{ //do/while petlja koja predstavlja zastitu od unosenja pogresnog znaka operacije
printf("\n\t\t\tUnesite operaciju [+ - * / =] :");
scanf("%c", &operacija); //unosenje znaka operacije
if(operacija!='+'&&operacija!='-'&&operacija!='*'&&operacija!='/'&&operacija!='=') //ako je znak operacije razlicit od predvidjenog stampa gresku
{
printf("\n\t\t\tMorate uneti jedan od ovih znakova [ + - * / =] !!!");
fflush(stdin);
}
}while(operacija!='+'&&operacija!='-'&&operacija!='*'&&operacija!='/'&&operacija!='='); //ako je znak operacije razlicit od predvidjenog vraca na ponovni unos operacije
switch(operacija) //switch - sluzi za grananje. Ako je operacija + prebacuje se na slucaja kada je plus i vrsi sabiranje dva broja
{
case '+':
printf("\n\t\t\tUnesite operand: ");
scanf("%d", &operand); //unosenje drugog operanda
rez+=operand; //rez ujedno predstavlja i prvi operand a i rezultat. rez+=operand je ekvivaletno rez=rez+operand
break; //zavrsava se switch ciklus za +
case '-':
printf("\n\t\t\tUnesite operand: ");
scanf("%d", &operand);
rez-=operand;
break;
case '*':
printf("\n\t\t\tUnesite operand: ");
scanf("%d", &operand);
rez*=operand;
break;
case '/':
printf("\n\t\t\tUnesite operand: ");
scanf("%d", &operand);
if(operand==0) //posto kod delenja je nedozvoljeno delenje sa nulom, zato imamo taj uslov. Ako se pojavi delenje sa nulom, program izbaci gresku o tome
{
printf("\n\t\t\tGRESKA : Ne moze se deliti sa nulom!!! \n");
break;
}else{ //ako nije delenje sa nulom program se redovno nastavlja
rez/=operand;
break;
}
}
fflush(stdin);
}while(operacija!='='); //do/while petlja se vrti sve dok je operacija razlicita od =
printf("\n\t\t\tRezultat je %d\n\n", rez); //stampanje konacnog rezultata
return 0;
}
ako nekome treba...
molio bih pomoc oko zadatka koji glasi :
napisati program i realizirati sklop kalkulatora koji izracunava izzraz od brojeva i operatora + - * / te ispisuje rezultat na ekranu.
npr za uneseno 7+3*5
ispisuje 7+3*5=22
ranije ste spomenuli da se izraz upise preko stringa i da se tako moze odrediti prioritet operatora. pa bih molio pomoc oko koda. u uto bih to trebao predati. fala unaprijed :)
molio bih pomoc oko zadatka koji glasi :
napisati program i realizirati sklop kalkulatora koji izracunava izzraz od brojeva i operatora + - * / te ispisuje rezultat na ekranu.
npr za uneseno 7+3*5
ispisuje 7+3*5=22
ranije ste spomenuli da se izraz upise preko stringa i da se tako moze odrediti prioritet operatora. pa bih molio pomoc oko koda. u uto bih to trebao predati. fala unaprijed :)
Ja ti garantiram da na ovom forumu neces samo tako dobiti gotov kod...
Mozes jedino dobiti pomoc oko svog koda i moze ti netko reci di radis gresku, al gotov kod neces dobiti ako se ne potrudis.
Inace gore imas vec skoro gotov program koji trebas samo malo promjeniti i to je to...
Pozdrav!
Imam zadatak napisati kod za kalkulator koji glasi:
Vaš program učitava string sa standard inputa koji se sastoji od cjelobrojnih brojeva i znakova matematičkih operacija. Vaš program mora pravilno prepoznati ulazne brojeve u učitanom stringu, pravilno izračunati i ispisati rješenje matematičkog izraza kojeg ulazni string predstavlja, pazeći pri tome na prednost određenih matematičkih operacija.
Napomena: Zabranjeno je korištenje biblioteka string.h i ctypes biblioteka. Svako prepoznavanje i parsiranje brojeva iz ulaznog stringa morate isprogramirati samostalno.
Napravila sam pomoću polja, ali ne izbacuje mi točan rezultat, jer nekako 3 mjesta moram prebaciti u 1, probala sam sa shiftanjem, ali ne radi :/
Ako netko može pomoći bila bih vrlo zahvalna.
#include <stdio.h>
#include <stdlib.h>
int main(){
char ulaz[20];
int rez=0;
printf("Unesite izraz koji treba izracunati: ");
fgets(ulaz,19,stdin);
for(int i=0;i<20;i++){
if(ulaz[i]=='*'){
rez+=(ulaz[i-1]-48)*(ulaz[i+1]-48);
ulaz[i]=rez;
for(int j=i-1;j<20;j++){
ulaz[j]=ulaz[j+1];
}
}
}
for(int i=0;i<20;i++){
if(ulaz[i]=='/'){
rez+=(ulaz[i-1]-48)/(ulaz[i+1]-48);
for(int j=i-1;j<20;j++){
ulaz[j]=ulaz[j+1];
}
}
}
for(int i=0;i<20;i++){
if(ulaz[i]=='+'){
rez+=(ulaz[i-1]-48)+(ulaz[i+1]-48);
for(int j=i-1;j<20;j++){
ulaz[j]=ulaz[j+1];
}
}
}
for(int i=0;i<20;i++){
if(ulaz[i]=='-'){
rez+=(ulaz[i-1]-48)-(ulaz[i+1]-48);
for(int j=i-1;j<20;j++){
ulaz[j]=ulaz[j+1];
}
}
}
printf("Rezultat je : %d",rez);
system("pause");
return 0;
}
Krivo gledas zadatak, ovdje ti trebaju funkcije pise ti lijepo znakova matematičkih operacija, a to nisu samo + - etc. i sto si vec napisala, treba ti biblioteka #include <math.h>
http://www.cs.cf.ac.uk/Dave/C/node17.html
napocetku neki define napravi lakse ce ti biti:
#define
onda moras ici rucno po stringu jer nesmijes string.h korisiti, pocetni string, zavrsni string i rucno pretrazivati po njemu sa nekom for petljom koja je duljine ulaznog stringa...
Zadatak jako tezak, po meni :P, mozda netko od kolega zna bolje objasniti :)), ja sam ti dao viziju da to nije tako jednostavno kao u tvom primjeru.
Matematicke operaciju nisu +,-,*,/... sto ako ti profesor kaze daj mi logaritam broja 10 :))
Krivo gledas zadatak, ovdje ti trebaju funkcije pise ti lijepo znakova matematičkih operacija, a to nisu samo + - etc. i sto si vec napisala, treba ti biblioteka #include <math.h>
http://www.cs.cf.ac.uk/Dave/C/node17.html
napocetku neki define napravi lakse ce ti biti:
#define
onda moras ici rucno po stringu jer nesmijes string.h korisiti, pocetni string, zavrsni string i rucno pretrazivati po njemu sa nekom for petljom koja je duljine ulaznog stringa...
Zadatak jako tezak, po meni :P, mozda netko od kolega zna bolje objasniti :)), ja sam ti dao viziju da to nije tako jednostavno kao u tvom primjeru.
Matematicke operaciju nisu +,-,*,/... sto ako ti profesor kaze daj mi logaritam broja 10 :))
Vjerojatno se misli na osnovni skup operacija, ovo što si ti spomenuo je definitivno teško te bi trebalo parsiranjem graditi stablo izraza pa probati sa različitim obilascima doći nekako do rješenja.
Nije valjda da se traži da implementiraju nešto poput ovoga?
Inače, poslao sam joj neko svoje rješenje na PM. Nije bogzna što, ali računa osnovne operacije i to samo nad cijelim brojevima, naravno.
Krivo gledas zadatak, ovdje ti trebaju funkcije pise ti lijepo znakova matematičkih operacija, a to nisu samo + - etc. i sto si vec napisala, treba ti biblioteka #include <math.h>
http://www.cs.cf.ac.uk/Dave/C/node17.html
napocetku neki define napravi lakse ce ti biti:
#define
onda moras ici rucno po stringu jer nesmijes string.h korisiti, pocetni string, zavrsni string i rucno pretrazivati po njemu sa nekom for petljom koja je duljine ulaznog stringa...
Zadatak jako tezak, po meni :P, mozda netko od kolega zna bolje objasniti :)), ja sam ti dao viziju da to nije tako jednostavno kao u tvom primjeru.
Matematicke operaciju nisu +,-,*,/... sto ako ti profesor kaze daj mi logaritam broja 10 :))
Vjerojatno se misli na osnovni skup operacija, ovo što si ti spomenuo je definitivno teško te bi trebalo parsiranjem graditi stablo izraza pa probati sa različitim obilascima doći nekako do rješenja.
Nije valjda da se traži da implementiraju nešto poput ovoga?
Inače, poslao sam joj neko svoje rješenje na PM. Nije bogzna što, ali računa osnovne operacije i to samo nad cijelim brojevima, naravno.
Moze biti :O, cesto ovi koji drze lab vjezbe na fakultetima ili profesori sto tko joj je vec zadao zadatak copy paste rade, ali stvarno napraviti ovo sve bez koristenja stringa, pa rucno ici po njemu 1 po jedan char, nema smisla O_O, ali ako su u pitanju obicne operacije onda moze rijestiti zadatak na puno nacina, brze i "bezbolnije"!
Ovaj zadatak sam već dosta puta vidio da se traži. Jedno od rješenja (iako ne najsretnije organizirano) je sljedeće:
#include <stdio.h>
#include <stdlib.h>
const char * expressionToParse = "3*2+4*1+(4+9)*6";
char peek(){
return *expressionToParse;
}
char get(){
return *expressionToParse++;
}
int expression();
int number(){
int result = get() - '0';
while (peek() >= '0' && peek() <= '9')
{
result = 10 * result + get() - '0';
}
return result;
}
int factor(){
if (peek() >= '0' && peek() <= '9')
return number();
else if (peek() == '(')
{
get(); // '('
int result = expression();
get(); // ')'
return result;
}
else if (peek() == '-')
{
get();
return -factor();
}
return 0; // error
}
int term(){
int result = factor();
while (peek() == '*' || peek() == '/')
if (get() == '*')
result *= factor();
else
result /= factor();
return result;
}
int expression(){
int result = term();
while (peek() == '+' || peek() == '-')
if (get() == '+')
result += term();
else
result -= term();
return result;
}
int main(){
int result = expression();
printf("%d", result);
return 0;
}
A sad si ti prepravi da možeš unijeti matematički izraz po želji, pa ga preko parametara prosljediti gore funkcijama.
Tvoje rješenje podržava i zagrade te je definitivno bolje od mojega, šteta što se kolegica vjerojatno više neće pojaviti u temi.