Witam Mam Problem z zadaniem :
Napisać program, który:
a). Tworzy plik danych "dane.txt" zawierający liczby całkowite (dodatnie i ujemne) w wielu wierszach.
b). Odczytuje dane z pliku "dane.txt" i zapisuje w pliku wyniki.txt reprezentację U2 liczb z pliku dane.txt, które są liczbami z założenia n-bitowymi i kodowanymi w systemie U2. Liczba n powinna być zadawana i w konsekwencji plik wyniki.txt powinien zawierać tylko liczby spełniające kryterium możliwości kodowania na n-bitach w systemie U2.
UWAGA !
Plik wyniki.txt powinien zawierać 2 kolumny separowane spację. W pierwszej kolumnie reprezentacja U2 w drugiej liczba w postaci odczytywanej z pliku dane.txt.
Tutaj wszystko co napisalem :
#include <iostream>
#include <sstream>
#include <stack>
#include <cmath>
#include <fstream>
#include <ctime>
#include <cstdlib>
#define N 100
using namespace std;
string dec2bin(int liczba)
{ string w,cyfra;
if(liczba==0) return w; else
{stringstream s;
s<<liczba%2;
s>>cyfra;
return dec2bin(liczba/2)+cyfra;
}
}
stack <char> cyfry;
string d2b(int liczba, int n)
{
char cyfra; string w="";
while(liczba!=0)
{ stringstream s;
s<<liczba%2;
s>>cyfra;
cyfry.push(cyfra);
liczba/=2;
}
while(!cyfry.empty())
{
w=w+cyfry.top();
cyfry.pop();
}
while(w.length()<n) w="0"+w;
return w;
}
bool czyU2(int liczba, int n)
{
if(liczba >= -pow(2,n-1) && liczba <=pow(2,n-1)-1) return true; return false;
}
string toU2(int liczba, int n)
{
if(czyU2(liczba,n))
if(liczba<0) return dec2bin(pow(2,n)+liczba); else return d2b(liczba,n);
}
void dane()
{
srand(time(NULL));
ofstream dane; dane.open("dane.txt",ios::out);
for(int i=0;i<N;i++) dane<< 500-rand()%1000 <<endl;
}
void konwersjaU2(int n)
{
int tablica[100]={0};
int temp=0;
ifstream liczby("dane.txt");
while(!liczby.eof())
liczby>>tablica[temp++];
liczby.close();
ofstream zapis("wyniki.txt");
for(int i=0;i<temp;i++)
{
zapis<<toU2(tablica[i],n)<<" "<<tablica[i]<<endl;
}
zapis.close();
}
int main()
{
dane();
konwersjaU2(16);
}
Problem polega na tym że czasami pierwszym liczbom zapisanym w pliku wyniki, nie wyświetlają się ich odpowiedniki w systemie U2, czasami tych liczb jest kilka, czasem jedna, albo w ogóle tego problemu nie ma , natomiast zawsze w ostatnim lub przedostatnim wierszu pojawia się takie coś: jakaś liczba binarna i liczba 7274168 pierwsza liczba powinna być reprezentacja w U2 druga liczba to liczba losowa z zakresu od -500 do 500. ktoś pomoże mi to wyjaśnić dlaczego się tak dzieje, i czy można ten kod jeszcze jakoś usprawnić.
EDIT: z pierwszym problemem już się uporałem zmieniłem argument n w funkcji konwersja z 8 na 16, wcześniej tylko liczby z zakresu -256,256 byly poprwanie konwertowane został drugi problem, mianowicie jakaś kosmiczna liczba w ostatnim wierszu.