Zapisanie wyniku pętli do tablicy.

0

witam może tak w sumie najpierw programik .

 #include<iostream>
#include<fstream>
#include<sstream>
using namespace std;
int main()
{
   
    string tabp[1000];
    int i=0,j=0,c;
    ifstream odczyt("liczby.txt");
             while(!odczyt.eof())
                {
                 odczyt>>tabp[i];
                 i++;
                }

                for(i=0;i<1000;i++)
                       {
                              c=tabp[i].length();
                              if(c==16)
                                  {    
                                       cout<<tabp[i]<<endl;
                                  }               
                       }               
                                   
    getchar();
    cin.ignore();
    return 0;    
}   

No i dobra mam sobie programik który pobiera liczby binarne sprawdza te które mają 16 cyfr i chciałbym żeby teraz zapisało mi to do tablicy najlepiej dwuwymiarowej. Czekam na pomoc :) Dołączam załącznik z pliczkiem liczby :)

0

może najlepiej bd zacytować treść zadania :

W pliku liczby.txt, w oddzielnych wierszach, znajduje się 1000 liczb zapisanych
w systemie dwójkowym o długościach zapisów od 2 do 16 cyfr (0 lub 1).
Napisz program, którego wykonanie da odpowiedzi do poniższych podpunktów.
Odpowiedzi zapisz w pliku zadanie6.txt, a każdą odpowiedź poprzedź literą
oznaczającą ten podpunkt.
a) Ile jest liczb parzystych w całym pliku?
b) Jaka jest największa liczba w tym pliku? Podaj jej wartość w dwóch systemach:
dwójkowym i dziesiętnym.

No i poczytałem troche o stringach i dowiedziałem się że ostatni znak z każdego wiersza mogę podzielić za pomocą MOD więc z ptk a) nie było problemu:

for(i=0;i<1000;i++)
                {
                 c=tabp[i].length();
                 d=c-1;
                 if(tabp[i].at(d)%2==0)
                 e++;
                 cout<<e<<endl;

I właśnie jak to możliwe że na tablicy string da się wykonywać działania tak tylko do tematu pytanko .?

Ale przejdźmy do setna sprawy , patrząc wcześniej na plik nie wiedziałem jak go zapisać do tablicy 2 wymiarowej pewnie dynamicznej bo ilość znaków w wierszu nie była sobie równa , ale jeśli chodzi nam o największą liczbę (16) znaków to mogłem wykonać prostą pętle for i wypisuje mi te wszystkie 80 liczb po 16 znaków teraz chciałbym je zapisać do właśnie tablicy 2 wymiarowej i później przeliczyć liczby na dziesiętne ale z tym już dalej sam bym chciał dalej dukać chodzi tylko mi o jakiś prosty zapis wyniku pętli for do tablicy :)

0
char tablica[X][16];

for(i = 0; liczba znakow-1)
  for(j = 0; 16)
    tablica[i][j] = ZNAK

Sa sprytniejsze rozwiazania ;>

0

Nadal nie rozumiem po co Ci tablica? Podpunkt a rozwiąrzesz wczytująć w pętli poszczególne liczby z pliku (możesz je wczytywać jako inty nawet) i badając wynik xor tej liczby z 0x1. Jeśli xor jest spełniony to inkrementujesz licznik liczb parzystych. Podpunkt b możesz rozwiązać np. konwertując wczytaną liczbę do podstawy dziesiętnej i sprawdzając czy jej wartość jest większa od aktualnego maxa.

0
satirev napisał(a):

Podpunkt b możesz rozwiązać np. konwertując wczytaną liczbę do podstawy dwójkowej i sprawdzając czy jej wartość jest większa od aktualnego maxa.

mógłbym prosić o fragment kodu ?

0

Sorry napisałem głupotę - miało być konwersja do postaci dziesiętnej. Jak zamienić bin na dec chyba wiesz.

0
int binToDec(string n){
    int suma=0;
    for(int i=n.size()-1;i>=0;i--){
        suma+=((n[i]-'0')*pow((double)2,(double)((n.size()-i))-1));
    }
    return suma;
}

Tylko teraz rodzi się pytanie, czy lepiej zapisać wyniki do drugiej tablicy(Nadal nie wiem po co Ci dwuwymiarowa), czy może lepiej wywoływać częściej funkcje..

0
kopernik napisał(a):
int binToDec(string n){
    int suma=0;
    for(int i=n.size()-1;i>=0;i--){
        suma+=((n[i]-'0')*pow((double)2,(double)((n.size()-i))-1));
    }
    return suma;
}

Tylko teraz rodzi się pytanie, czy lepiej zapisać wyniki do drugiej tablicy(Nadal nie wiem po co Ci dwuwymiarowa), czy może lepiej wywoływać częściej funkcje..

Jeśli już w taki sposób, to chyba lepiej tak:

 
for(int i=n.size()-1;i>=0;i--) {
        suma+= ((n[i]-'0')*(1 << ((n.size()-i))-1));
}

W tym zadaniu w ogóle nie potrzeba przechowywać danych w tablicy. Wraz z zczytaniem kolejnych wartości, konwertuje je do dec, następnie sprawdza czy dana wartość jest większa od dotychczasowego maxa (jeśli jest aktualizuje maxa).

0

okej zrozumiałem troszkę problem , macie racje zapis do tablicy jest zbędny. Dziękuje za rady spróbuje teraz poskładać to do kupy :)

0
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int binToDec(string n){
    int sum=0;
    for(int i=n.size()-1;i>=0;i--){
        sum+=((n[i]-'0')*pow((double)2,(double)((n.size()-i))-1));
    }
    return sum;
}
int main(){
    string n,sMax;
    int evenNumbers=0,max=0;
    ifstream in("liczby.txt");
    while(in>>n){
        int curr=binToDec(n);
        if(curr%2==0)
            evenNumbers++;
        if(max<curr){
            max=curr;
            sMax=n;
        }
    }
    in.close();
    ofstream out("zadanie6.txt");
    out<<"a) ilosc liczb parzystych : "<<evenNumbers<<"\n";
    out<<"b) najwieksza liczba w pliku:\ndec - "<<max<<"\nbin - "<<sMax;
    cout<<"a) ilosc liczb parzystych : "<<evenNumbers<<"\n";
    cout<<"b) najwieksza liczba w pliku:\ndec - "<<max<<"\nbin - "<<sMax;
    out.close();
    return 0;
}

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