aurel Opublikowano 8 Września 2007 Zgłoś Opublikowano 8 Września 2007 (edytowane) treść zadania: https://www.spoj.pl/LP2007/problems/NL01WF/ program, który napisałam opiera się o przepisanie formuły na odwróconą notację polską, następnie prostym algorytmem jest obliczana wartość. działa dla wszystkich testów jakie udostępnił wykładowca, działa dla wszystkich, które jestem w stanie wymyśleć. byłabym niezmiernie wdzięczna, gdyby ktoś znalazł chociaż jakiś źle obliczany test... #include <cstdlib>#include <iostream>using namespace std;char negacja(char a);char koniunkcja(char a, char b);char alternatywa(char a, char b);char implikacja(char a, char b);char rownowaznosc(char a, char b);int main(int argc, char *argv[]){ int c, i, j, w, s, l1, l2, l3, l4, l, wmax, kropka; char a, b, wejscie[100001], wejsc[100001], formula[100001], stos[100001], dane[40001]; while ((c=getchar())!=EOF) { ungetc(c, stdin); i=0; j=0; scanf("%s", &dane); scanf("%s", &wejsc); for (w=0; wejsc[w]!=NULL; w++) if (wejsc[w]>=48 && wejsc[w]<=57) if (wejsc[w+1]>=48 && wejsc[w+1]<=57) if (wejsc[w+2]>=48 && wejsc[w+2]<=57) if (wejsc[w+3]>=48 && wejsc[w+3]<=57) { l1=wejsc[w]-48; l2=wejsc[w+1]-48; l3=wejsc[w+2]-48; l4=wejsc[w+3]-48; l=1000*l1+100*l2+10*l3+l4; wejsc[w]='.'; wejsc[w+1]='.'; wejsc[w+2]='.'; w=w+3; wejsc[w]=dane[l]; } else { l1=wejsc[w]-48; l2=wejsc[w+1]-48; l3=wejsc[w+2]-48; l=100*l1+10*l2+l3; wejsc[w]='.'; wejsc[w+1]='.'; w=w+2; wejsc[w]=dane[l]; } else { l1=wejsc[w]-48; l2=wejsc[w+1]-48; l=10*l1+l2; wejsc[w]='.'; w++; wejsc[w]=dane[l]; } else { l=wejsc[w]-48; wejsc[w]=dane[l]; } wmax=w; w=0; kropka=0; for (s=0; s!=wmax; s++) { if (wejsc[s]!='.') { wejscie[w]=wejsc[s]; w++; } else kropka++; } wmax=wmax-kropka; for (kropka=wmax+kropka; kropka!=-1; kropka--) wejsc[kropka]=NULL; for (w=0; w!=wmax; w++) { if (wejscie[w]=='0' || wejscie[w]=='1') { formula[i]=wejscie[w]; i++; } else { if (wejscie[w]=='n') { stos[j]=wejscie[w]; j++; } if (wejscie[w]=='a') if (stos[j-1]!='n') { stos[j]=wejscie[w]; j++; } else { j--; while (stos[j]=='n') { formula[i]=stos[j]; i++; j--; } j++; stos[j]=wejscie[w]; j++; } if (wejscie[w]=='o') if (stos[j-1]!='n' && stos[j-1]!='a') { stos[j]='o'; j++; } else { j--; while (stos[j]=='n' || stos[j]=='a') { formula[i]=stos[j]; i++; j--; } j++; stos[j]=wejscie[w]; j++; } if (wejscie[w]=='e' || wejscie[w]=='i') if (stos[j-1]!='n' && stos[j-1]!='a' && stos[j-1]!='o') { stos[j]=wejscie[w]; j++; } else { j--; while (stos[j]=='n' || stos[j]=='a' || stos[j]=='o') { formula[i]=stos[j]; i++; j--; } j++; stos[j]=wejscie[w]; j++; } if (wejscie[w]=='(') { stos[j]=wejscie[w]; j++; } if (wejscie[w]==')') { j--; while (stos[j]!='(') { formula[i]=stos[j]; i++; j--; } } } } j--; while (j>=0) { if (stos[j]!='(') { formula[i]=stos[j]; i++; } j--; } j=0; for (s=0; s!=i; s++) { if (formula[s]=='0' || formula[s]=='1') { stos[j]=formula[s]; j++; } else { if (formula[s]=='n') { j--; a=stos[j]; stos[j]=negacja(a); } else { j--; b=stos[j]; j--; a=stos[j]; if (formula[s]=='a') stos[j]=koniunkcja(a,b); if (formula[s]=='o') stos[j]=alternatywa(a,b); if (formula[s]=='i') stos[j]=implikacja(a,b); if (formula[s]=='e') stos[j]=rownowaznosc(a,b); } j++; } } j--; cout << stos[j] << "\n"; } return 0;}char negacja(char a){ if (a=='1') a='0'; else a='1'; return a;}char koniunkcja(char a, char b){ if (a=='1' && b=='1') a='1'; else a='0'; return a;} char alternatywa(char a, char b){ if (a=='1' || b=='1') a='1'; else a='0'; return a;} char implikacja(char a, char b){ if (b=='1') a='1'; else if (a=='0') a='1'; else a='0'; return a;}char rownowaznosc(char a, char b){ if (a==b) a='1'; else a='0'; return a;} Edytowane 8 Września 2007 przez aurel Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mystery Opublikowano 9 Września 2007 Zgłoś Opublikowano 9 Września 2007 masz kontest z litma w plecy na pg? ;) nie mam jak sprawdzić twojego programu, pamiętam jak sam męczyłem się z onp na 1 roku, ale na szczeście zrobiłem z nim wszystkie projekty, także ten. wiesz, jedno z rzeczy jakich nas uczą na tej uczelni to pisanie komentarzy. powinnaś też to robić, bo to bardzo ułatwia pracę nie tylko Tobie, ale również ludziom którym pokazujesz kod... w razie czego odezwij sie na gg (profil) pozdrawiam m Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 10 Września 2007 Zgłoś Opublikowano 10 Września 2007 gdzie tu jest ta obiektowość dobrego poczciwego C++ :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mystery Opublikowano 10 Września 2007 Zgłoś Opublikowano 10 Września 2007 bo to nie c++ tylko miało byc czyste c Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...