NOTacja Polska problem z algorytmem czesc 2

0

Algorytm działa tylko wyskakuje ze trzeba zamienic int na double...;/ Co z tym zrobic?

#include<iostream>
#include<stdlib.h>
#include <math.h>

using namespace std;

char napis[200];
int stos[200];
int ascii[200];
int wyniki[100];
int liczba,a,j,dlugosc,wynik,pom,kolejna,w;
int cyfra(char napis)

{
if (napis=='0') return 0;
if (napis=='1') return 1;
if (napis=='2') return 2;
if (napis=='3') return 3;
if (napis=='4') return 4;
if (napis=='5') return 5;
if (napis=='6') return 6;
if (napis=='7') return 7;
if (napis=='8') return 8;
if (napis=='9') return 9;
}

int main ()
{
cin>>liczba;

for (a=1;a<=199;a++) stos[a]=0;

cin.getline(napis,1);

w=0;
for (a=1;a<=liczba;a++)
{
cin.getline(napis,200);
for (j=0;j<=200;j++)
{
dlugosc=j;
ascii[j]=static_cast<int>(napis[j]);
if (napis[j]=='\0') break;
}

pom=0;
kolejna=0;
wynik=0;
for (j=dlugosc-1;j>=0;j=j-1)
{
if (ascii[j]<=57 && ascii[j]>=48)
{

 wynik=wynik+cyfra(napis[j])*pow(10,pom);
pom=pom+1;

if (ascii[j-1]>57 || ascii[j-1]<48 || j-1<0)
{
stos[kolejna]=wynik;
kolejna=kolejna+1;
wynik=0;
pom=0;
}

}

if (ascii[j]==42)
{
wynik=stos[kolejna-1]*stos[kolejna-2];
stos[kolejna-1]=0;
stos[kolejna-2]=wynik;
kolejna=kolejna-1;
wynik=0;
}

if (ascii[j]==43)
{
wynik=stos[kolejna-1]+stos[kolejna-2];
stos[kolejna-1]=0;
stos[kolejna-2]=wynik;
kolejna=kolejna-1;
wynik=0;
}

if (ascii[j]==45)
{
wynik=stos[kolejna-1]-stos[kolejna-2];
stos[kolejna-1]=0;
stos[kolejna-2]=wynik;
kolejna=kolejna-1;
wynik=0;
}

if (ascii[j]==47)
{
wynik=stos[kolejna-1]/stos[kolejna-2];
stos[kolejna-1]=0;
stos[kolejna-2]=wynik;
kolejna=kolejna-1;
wynik=0;
}


}

wyniki[a]=stos[0];


}

for (a=1;a<=liczba;a++) cout<<wyniki[a]<<endl;
system("pause");
return 0;
}
0

int cyfra(char napis) { return napis-'0'; }
for (a=1;a<=199;a++) stos[a]=0; // indeksacja w C/C++ jest od zera
można to zastąpić na: memset(a,0,200*sizeof(int)); // ale i tak nie potrzebne
Też NIE MA sensu konwertować to do tablicy ascii[].
Znacznie czytelniejsze: if (napis[j]=='/') niż if (ascii[j]==47)
Po kiego robić: stos[kolejna-1]=0; jeżeli za chwilę masz: kolejna=kolejna-1;
Zamiast if (ascii[j-1]>57 || ascii[j-1]<48 || j-1<0) wystarczy: if(!j) ponieważ jest to wewnątrz if (ascii[j]<=57 && ascii[j]>=48)
Zaś zamiast: if (ascii[j]<=57 && ascii[j]>=48) lepiej użyć: if(isdigit(napis[j])) lub if('0'<=napis[j] && napis[j]<='9')

Może poczytaj o podstawach C/C++ zanim weźmiesz się za taki projekt.

0

nadal jest cos nie tak

1 użytkowników online, w tym zalogowanych: 0, gości: 1