Dodawanie liczb trójkowych

0

Witam, mam problem z wykonaniem tego zadania.

W pliku pary.txt znajduje się 50 par dodatnich liczb całkowitych zapisanych w systemie
trójkowym – w każdym wierszu jedna para liczb rozdzielonych znakiem odstępu. Każda
z liczb ma co najwyżej 9 cyfr.
Napisz program, który dla każdej pary liczb wczytanej z pliku pary.txt, obliczy ich sumę
i wynik zapisze w systemie trójkowym w pliku wynik5.txt. Liczba w i-tym wierszu pliku
wynik5.txt powinna być sumą liczb z i-tego wiersza pliku pary.txt.
Przykład
Gdyby plik pary.txt zawierał tylko 2 pary liczb:
12 1
22 10
to plik wynik5.txt miałby postać:
20
102

Napisałem taki program, ale po uruchomieniu zawiesza się i pojawia się okienko "Program przestał działać" i się wyłącza.

#include <iostream>
#include <cmath>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
int potega(int p,int w)
{if (w==0)
   return 1;
   else
   return potega(p,w-1)*p;
} 
int main()
{ int tab_a[20],tab_b[20],wynik[25],k,i;
 int a,b,raw,aa,bb,suma,liczba,liczba2,z,u,finish;
 ifstream wej("pary.txt");
 wej>>a>>b;
 if (a>b)liczba=a;
 else liczba=b;
 while(liczba!=0)
  {liczba=liczba/10;
   z++;}
 for(k=1;k<=z;k++)
  { tab_a[k]=(a%10)*potega(3,k);
    a=a/10;
    tab_b[k]=(b%10)*potega(3,k);
    b=b/10; }
  aa=0; 
  for(int n=1;n<=i;n++) aa=aa+tab_a[n];
  bb=0;
  for(int y=1;y<=i;y++) bb=bb+tab_b[y];
suma=aa+bb;
cout<<suma<<endl;
   liczba2=suma;
  while(liczba2!=0)
  {liczba2=liczba2/10;
    u++;}
 for(int y=1;y<=u;y++)
   { wynik[y]=suma%3;
     suma=suma/10; }

 ofstream wyj ("wynik5.txt", ios::app);
for(int r=1;r<=u;r++) cout<<wynik[r];
             
      
system("pause");
return 0;
}
 
0

Sprawdzałem z funkcją pow(), ale wyskakiwał błąd o konwersji na int i już mi się nie chciało bawić, więc skopiowałem zrobioną funkcję.

0

Strasznie namieszałeś ze zmiennymi.

 for(k=1;k<=z;k++)

Nie nadałeś 'z' żadnej wartości przed tą pętlą.

 
  aa=0; 
  for(int n=1;n<=i;n++) aa=aa+tab_a[n];
  bb=0;
  for(int y=1;y<=i;y++) bb=bb+tab_b[y];

Tutaj 'i' też nie ma żadnej wartości. Czy nie miało być 'i' zamiast 'k' tutaj?

 
  while(liczba2!=0)
  {liczba2=liczba2/10;
    u++;}

'u' też nie nadałeś wartości.

Nie wiem, czy poprawienie powyższych wystarczy, ale od tego zacznij.

0

Ok, zrobiłem :)
Oto kod, może się kiedyś komuś przyda.

#include <iostream>
#include <cmath>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
int potega(int p,int w)
{if (w==0)
   return 1;
   else
   return potega(p,w-1)*p;
} 
int main()
{ int tab_a[20],tab_b[20],wynik[25],k;
 int a,b,aa,bb,suma,liczba,liczba2,z,u;
 ifstream wej("pary.txt");
 
          for(int cale=1;cale<=50;cale++){
          
 wej>>a;
 wej>>b;
 if (a>b)liczba=a;
 else liczba=b;
 z=0;
 while(liczba!=0)
  {liczba=liczba/10;
   z++;}
 for(k=0;k<=z-1;k++)
  { tab_a[k]=(a%10)*potega(3,k);
    a=a/10;
    tab_b[k]=(b%10)*potega(3,k);
    b=b/10; }
  aa=0; 
  for(int n=0;n<=z-1;n++) aa=aa+tab_a[n];
  bb=0;
  for(int y=0;y<=z-1;y++) bb=bb+tab_b[y];
suma=aa+bb;
cout<<suma<<endl;
   liczba2=suma;
  u=0; 
 while(liczba2!=0)
 { wynik[u]=liczba2%3;
   u++;
   liczba2=liczba2/3; }

 ofstream wyj ("wynik5.txt", ios::app);
for(int r=u-1;r>=0;r--) wyj<<wynik[r];
wyj<<endl;             
}      
system("pause");
return 0;
}
 

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