Puchacz1 Opublikowano 16 Marca 2009 Zgłoś Opublikowano 16 Marca 2009 (edytowane) Witam, postanowiłem napisać problem do automatycznego ustalania współczynników w równaniach chemicznych. Jednak metoda która zacząłem budować program jest... bardzo sztywna i przez to pojawiają się problemy z warunkami które mnożą się a których nie potrafię rozwiązać. Kod wygląda tak: #include <sstream>#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;int main(){ char strNapis; cout << "Podaj Pierwszy Znak : "; cin >> strNapis; int liczba; cout << "Podaj wartosc : "; cin >> liczba; char strNapis_2; cout << "Podaj drugi Znak : "; cin >> strNapis_2; int liczba_2; cout << "Podaj wartosc : "; cin >> liczba_2; char strNapis_3; cout << "Podaj trzeci Znak : "; cin >> strNapis_3; int liczba_3; cout << "Podaj wartosc : "; cin >> liczba_3; char strNapis_4; cout << "Podaj czwarty Znak : "; cin >> strNapis_4; int liczba_4; cout << "Podaj wartosc : "; cin >> liczba_4; char strNapis_5; cout << "Podaj Pierwszy Znak Drugiej Grupy : "; cin >> strNapis_5; int liczba_5; cout << "Podaj wartosc : "; cin >> liczba_5;// druga grupa char strNapis_6; cout << "Podaj Pierwszy Znak : "; cin >> strNapis_6; int liczba_6; cout << "Podaj wartosc : "; cin >> liczba_6; char strNapis_7; cout << "Podaj drugi Znak : "; cin >> strNapis_7; int liczba_7; cout << "Podaj wartosc : "; cin >> liczba_7; char strNapis_8; cout << "Podaj trzeci Znak : "; cin >> strNapis_8; int liczba_8; cout << "Podaj wartosc : "; cin >> liczba_8; char strNapis_9; cout << "Podaj czwarty Znak : "; cin >> strNapis_9; int liczba_9; cout << "Podaj wartosc : "; cin >> liczba_9; //suma kontrolna cout << strNapis << ( ( liczba == 1 ) ? 0x32 : liczba ) << strNapis_2 << ( ( liczba_2 == 1 ) ? 0x32 : liczba_2 ) << strNapis_3 << ( ( liczba_3 == 1 ) ? 0x32 : liczba_3 ) << strNapis_4 << ( ( liczba_4 == 1 ) ? 0x32 : liczba_4 ) << " + " << strNapis_5 << ( ( liczba_5 == 1 ) ? 0x32 : liczba_5 ) << " ------> " << strNapis_6 << ( ( liczba_6 == 1 ) ? 0x32 : liczba_6 ) << strNapis_7 << ( ( liczba_7 == 1 ) ? 0x32 : liczba_7 ) << " + " << strNapis_8 << ( ( liczba_8 == 1 ) ? 0x32 : liczba_8 ) << strNapis_9 << ( ( liczba_9 == 1 ) ? 0x32 : liczba_9 ) << "\n"; //porownanie stringow, instrukcje warunkowe, dodawanie wartosci podstawnikow if(strNapis==strNapis_5) { int dodawanie_liczb = liczba + liczba_5; cout << strNapis << dodawanie_liczb << endl; } if(strNapis_2==strNapis_5) { int dodawanie_liczb_2 = liczba_2 + liczba_5; cout << strNapis_2 << dodawanie_liczb_2 << endl; } if(strNapis_3==strNapis_5) { int dodawanie_liczb_3 = liczba_3 + liczba_5; cout << strNapis_3 << dodawanie_liczb_3 << endl; } if(strNapis_4==strNapis_5) { int dodawanie_liczb_4 = liczba_4 + liczba_5; cout << strNapis_4 << dodawanie_liczb_4 << endl; }// instrukcje porownujace 1 znak :)// instrukcje porownujace 2 znak :) if(strNapis_2==strNapis) { int dodawanie_liczb_8 = liczba_2 + liczba; cout << "wyswietlam wynik dodawania4 : " << strNapis_2 << dodawanie_liczb_8 << endl; } if(strNapis_2==strNapis_4) { int dodawanie_liczb_10 = liczba_2 + liczba_4; cout << "wyswietlam wynik dodawania6 : " << strNapis_2 << dodawanie_liczb_10 << endl; }// instrukcje porownujace 3 znak :) if(strNapis_3==strNapis) { int dodawanie_liczb_11 = liczba_3 + liczba; cout << "wyswietlam wynik dodawania7 : " << strNapis_3 << dodawanie_liczb_11 << endl; } if(strNapis_3==strNapis_2) { int dodawanie_liczb_12 = liczba_3 + liczba_2; cout << "wyswietlam wynik dodawania8 : " << strNapis_3 << dodawanie_liczb_12 << endl; } // instrukcje porownujace 4 znak :) if(strNapis_4==strNapis) { int dodawanie_liczb_14 = liczba_4 + liczba; cout << "wyswietlam wynik dodawania10 : " << strNapis_4 << dodawanie_liczb_14 << endl; } if(strNapis_4==strNapis_3) { int dodawanie_liczb_16 = liczba_4 + liczba_3; cout << "wyswietlam wynik dodawania12 : " << strNapis_4 << dodawanie_liczb_16 << endl; } if (strNapis_6==strNapis_8) { int dodawanie_liczb_17 = liczba_6 + liczba_8; cout << "wyswietlam wynik dodawania : " << strNapis_6 << dodawanie_liczb_17 << endl; } if (strNapis_6==strNapis_9) { int dodawanie_liczb_18 = liczba_6 + liczba_9; cout << "wyswietlam wynik dodawania : " << strNapis_6 << dodawanie_liczb_18 << endl; } if (strNapis_7==strNapis_8) { int dodawanie_liczb_19 = liczba_7 + liczba_8; cout << "wyswietlam wynik dodawania : " << strNapis_7 << dodawanie_liczb_19 << endl; } if (strNapis_7==strNapis_9) { int dodawanie_liczb_20 = liczba_7 + liczba_9; cout << "wyswietlam wynik dodawania : " << strNapis_7 << dodawanie_liczb_20 << endl; } cout << "wyswietl"<< dodawanie_liczb_20 << "\n"; } jak już wspomniałem to rozwiązanie jest bardzo sztywne ponieważ umożliwia zawsze tą samą liczbę współczynników do wpisania. Czy istnieje możliwość dynamicznego tworzenia zmiennych wg. pewnego wzoru ?. Czy może jest możliwość deklarowania np. 20 zmiennych ale w trakcie użytkowania programu wybrać aby były używane tylko kilka początkowych. Co właściwie powinienem zrobić ( z czego skorzystać aby skrócić kod i pozbyć się tak wielu warunków do spełnienia ) jakie daje mi sprawdzenie każdego znaku po kolei. Po sprawdzeniu każdego z nich musiałbym zapisać stos nowych warunków (!) do każdego z nich a zajęło by to wieki. Na pewno jest jakiś sposób obejścia tego. Możecie mi coś podpowiedzieć ?. Program oczywiście jest nie skończony z braku wiedzy jak zapisać taki stos warunków :). Ale chcę się dowiedzieć i poprawić to co spartoliłem :). Edytowane 16 Marca 2009 przez Puchacz1 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 16 Marca 2009 Zgłoś Opublikowano 16 Marca 2009 Hint: używaj tablic i pętli, a kod stanie się bardziej zwięzły i przejrzysty. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...