Algorytm dodawania zrealizowany w C++. Wartości do dodawania przechowywane są w plikach tekstowych. Wynik wyświetlany na ekranie.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> using namespace std; int getSize(ifstream&); int main(){ ifstream a,b; a.open( "a.txt" );//otwieram plik z 1 liczba b.open( "b.txt" );//otwieram plik z 2 liczba int a_size = getSize(a)-1; //ucinam dlugosc o 1 (indeksacja od 0) int b_size = getSize(b)-1; //jw int max = a_size; if(max<b_size) max= b_size; //wybralem dluzsza char* aa = new char[a_size+1]; char* bb = new char[b_size+1];//alokuje pamiec aa[0]='\0'; bb[0]='\0'; a.read(aa, a_size+1);//czytam pliki b.read(bb, b_size+1); char* wynik = new char[max+2];//alokacja pamieci dla wynik wynik[0]='\0'; int prop=0;//flaga propagacji while(max+1){ if(a_size<0){//jesli jedna z liczb jest krotsza od drugiej wynik[max]=bb[b_size]; max--; b_size--; continue; } if(b_size < 0){//jw wynik[max]=aa[a_size]; max--; a_size--; continue; } if((aa[a_size]-'0')+(bb[b_size]-'0')+prop>9)//jesli bedzie propagacja { if(prop)//jesli byla z poprzedniej operacji wynik[max] = ((aa[a_size]-'0')+(bb[b_size]-'0'+1)-10)+'0'; else//jesli nie wynik[max] = ((aa[a_size]-'0')+(bb[b_size]-'0')-10)+'0'; } else//jeslinie bedzie propagacji { if(prop)//jesli byla z poprzedniej operacji wynik[max] = ((aa[a_size]-'0')+(bb[b_size]-'0'+1)+'0'); else//jesli nie wynik[max] = ((aa[a_size]-'0')+(bb[b_size]-'0')+'0'); } if((aa[a_size]-'0')+(bb[b_size]-'0')+prop>9)//jesli jest propagacja w tym kroku to ja ustawiam prop=1; else prop=0; a_size--;//zmiejszam, czyli przechodze do kolejnej cyfry b_size--; max--; if((max==0) and prop==1){//obsluga przeniesienia jesli jest na najstaszej pozycji wynik[max] ='0'+1; } if((max==0) and prop==0){ wynik[max] =32; } } cout<<aa<<" + "<<bb<<" = "<<wynik<<endl;//pokazuje wynik delete [] wynik; delete [] aa; delete [] bb;//zwalniam pamiec return 0; } int getSize(ifstream& a){ a.seekg (0, ios::beg); int begin = a.tellg(); a.seekg (0, ios::end); int end = a.tellg(); int size = end-begin-1; a.seekg (0, ios::beg); return size; } |
Mateusz Mazurek