• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana systemu dziesiętnego na binarny wierszy liczb wczytanych z pliku (folderu:"dane\\dane1.txt") do tablicy.

0 głosów
715 wizyt
pytanie zadane 6 stycznia 2020 w C i C++ przez Ad6559 Nowicjusz (120 p.)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <sstream>
#include <math.h>

using namespace std;

int main()
{

int tablica[500]={0};
int tmp=0;
ifstream liczby("dane\\dane1.txt");

if (!liczby)
{

    cout<<"error";
    getchar();
    return 1;

}

while(!liczby.eof())
{
      liczby>>tablica[tmp++];
}


 liczby.close();


  string wynik;

  for(int i=0;i<tmp;i++)
  {
  
      wynik.insert( wynik.begin(), tablica[i] % 2 + '0');

      tablica[i] /= 2 ;
      
      cout<<wynik<<endl;
       
      }
     

    return 0;

}

Po wczytaniu pliku z danymi do tablicy, próba zamiany systemu liczb w niej zapisanej poprzez sposób w powyższym programie kończy się wynikami różniącymi się od prawidłowych danych jakie powinny być po zastosowaniu zamiany, co widać w linkach poniżej:

Wynik w kompilatorze przez wykonany mój program: (piszę ręcznie przez słabą rozdzielczość screena)

0
10
010
0010
00010
000010

Bardzo chciałbym prosić o pomoc jak powinien wyglądać prawidłowy kod i w czym tkwi problem w moim.

Z góry dzięki za pomoc ;)

1 odpowiedź

+1 głos
odpowiedź 6 stycznia 2020 przez 12332112332121 Dyskutant (8,270 p.)

Najłatwiej stworzyć funkcję np. zamiana

void zamiana(int liczba)
{
	if(liczba>0)
	{
		dec_to_bin(liczba/2);
		cout<<liczba%2;
	}
}

I wywołaj tę funkcję dla poszczególnych liczb w pliku .txt.

komentarz 6 stycznia 2020 przez Ad6559 Nowicjusz (120 p.)

Dzięki wielkie, a masz może jakiś pomysł odnośnie tego, jak by wyglądał zapis wyników tej funkcji do np. folderu: "wynik\\wynik1.txt" ? Chodzi mi głównie o to w jaki sposób mogę otrzymane wyniki binarne liczb dziesiętnych(dzięki funkcji void) pobranych z pliku zapisać do folderu wynikowego. A oto kod który udało mi się na razie otrzymać (do momentu wyświetlenia danych na ekran):

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <sstream>
#include <time.h>
using namespace std;


void zamiana(int liczba)
{
	string wynik;

	
		while (liczba) {
			wynik = (liczba % 2 ? "1" : "0") + wynik;
			liczba /= 2;
		}
		cout << wynik << endl;
		
}



int main()
{
	string nazwa1;
	string nazwa2;
	string koniec = ".txt";	
	string plik1 = "dane\\dane";
	string wynik1 = "wynik\\wynik";
	
	
	int n;
	cout << "Podaj ile plikow wczytac z folderu: " << endl;
	cin >> n;
	
	for (int i = 1; i <= n; i++)
	{
		stringstream ss;
		
		ss << i;
		
		nazwa1 = plik1 + ss.str() + koniec;
		nazwa2 = wynik1 + ss.str() + koniec;
		
		cout << nazwa1 <<endl;
		cout << nazwa2 <<endl;
		
		fstream plik;
		int tablica[500] = { 0 };
		int tmp = 0;
		plik.open(nazwa1, ios::in);
		if (plik.good() == true)
		{
			while (!plik.eof())
			{

				plik >> tablica[tmp++];

		
			}
			//fstream plik2;
			//plik2.open(nazwa2);
			
			for (int i = 0; i < tmp-1; i++)
			{
				zamiana(tablica[i]);	
				
			}
			
			plik.close();
			//plik2.close(); 

		}

	

		system("pause");
	}
}

Z góry dzięki ;)

komentarz 12 stycznia 2020 przez 12332112332121 Dyskutant (8,270 p.)
Niestety, ale nie do końca rozumiem sposób odczytu i zapisu plików w c++, ale z tego co wiem to jest cały odcinek o tym na kanale pasja informatyki. Powodzenia.

Podobne pytania

+1 głos
2 odpowiedzi 1,159 wizyt
pytanie zadane 2 sierpnia 2020 w C i C++ przez RufinB Bywalec (2,020 p.)
0 głosów
2 odpowiedzi 388 wizyt
0 głosów
1 odpowiedź 1,352 wizyt
pytanie zadane 22 kwietnia 2020 w C i C++ przez Atman Użytkownik (810 p.)

93,773 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,377 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...