Witam, jestem licealistą i przygotowuję się do pisania w tym roku matury z informatyki. W tym celu rozwiązuję arkusze z zeszłych lat i ostatnio zagięło mnie pewne zadanie, a dokładniej, wspomniane w tytule, "Liczby inaczej" z roku 2011. W kodzie nie udało mi się znaleźć błędu, jednak jako początkujący podejrzewam, że coś pominąłem.
Zadaniem tego kodu ma być wczytanie 1000 liczb zapisanych w systemie binarnym w pliku liczby.txt, a następnie wykonanie na nim paru operacji, tj. policzenia liczb parzystych i policzenie liczb posiadających dokładnie 9 znaków. I tu się pojawił problem, ponieważ gdy poprawna odpowiedź na pytanie o liczby parzyste wynosi 497, a na drugie zadanie 101, to w wyniku niestety zwykle dostaję liczbę różniącą się (całkowicie losowo) o około 2, jednak czasem zdarza się i większa różnica.
Nie jestem w stanie sam określić na czym polega problem i jak go rozwiązać. Będę wdzięczny za wszystkie sensowne sugestie.
Do prawidłowego działania wymagany jest plik liczby.txt (załącznik), a generowany jest plik Zadanie6.txt, który w teorii ma zawierać odpowiedzi na wszystkie pytania.
Kod (C++):
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char** argv) {
////////////////////////////// Wgranie do tablicy 1-wymiarowej
int i=0;
char Plik[16000];
ifstream liczby;
ofstream odpowiedz;
odpowiedz.open("zadanie6.txt");
liczby.open("liczby.txt");
while(!liczby.eof()){
liczby.get(Plik[i]);
i++;
}
liczby.close();
////////////////////////////// Wgranie do tablicy 2-wymiarowej
char Tablica[16][1000];
int x=0,y=0;
for (i=0;i<strlen(Plik);i++){
if(Plik[i]=='0'||Plik[i]=='1'){
Tablica[x][y]=Plik[i];
x++;
}
else{
y++;
x=0;
}
}
////////////////////////////// Dopisuje zera na początku każdego wiersza - tj. 1101 ----- 00001101
for(y=0;y<1000;y++){
while(Tablica[15][y]!='0'&&Tablica[15][y]!='1'){
for(x=15;x>=0;x--){
Tablica[x][y]=Tablica[x-1][y];
}
Tablica[0][y]='0';
}
}
////////////////////////////// a) - Liczby parzyste
int s=0;
for (i=0;i<1000;i++){
if (Tablica[15][i]=='0'){
s++;
}
}
cout<<"Liczb parzystych w pliku jest: "<<s<<endl;
odpowiedz<<"a) "<<s<<endl;
////////////////////////////// Wgranie liczby w dziesiętnym do tablicy jendo wymiarowej
int Dzies[1000];
int a=0;
for(y=0;y<1000;y++){
s=0;
if(Tablica[15][y]=='1')
s=s+1;
if(Tablica[14][y]=='1')
s=s+2;
if(Tablica[13][y]=='1')
s=s+4;
if(Tablica[12][y]=='1')
s=s+8;
if(Tablica[11][y]=='1')
s=s+16;
if(Tablica[10][y]=='1')
s=s+32;
if(Tablica[9][y]=='1')
s=s+64;
if(Tablica[8][y]=='1')
s=s+64*2;
if(Tablica[7][y]=='1')
s=s+64*4;
if(Tablica[6][y]=='1')
s=s+64*8;
if(Tablica[5][y]=='1')
s=s+64*16;
if(Tablica[4][y]=='1')
s=s+64*32;
if(Tablica[3][y]=='1')
s=s+64*64;
if(Tablica[2][y]=='1')
s=s+64*64*2;
if(Tablica[1][y]=='1')
s=s+64*64*4;
if(Tablica[0][y]=='1')
s=s+64*64*8;
Dzies[y]=s;
}
////////////////////////////// b) - Znalezienie najwiekszej liczby
s=0;
for (i=0;i<1000;i++){
if(Dzies[i]>s){
s=Dzies[i];
y=i;
}
}
cout<<"Najwieksza liczba, to:\n"<<s<<" w systemie dziesietnym."<<endl;
odpowiedz<<"b) "<<s<<endl;
for (i=0;i<16;i++){
cout<<Tablica[i][y];
odpowiedz<<Tablica[i][y];
}
odpowiedz<<endl;
cout<<" w systemie binarnym."<<endl;
//////////////////////////////
s=0;
a=0;
for (i=0;i<1000;i++){
if(Tablica[0][i]=='0'&&Tablica[1][i]=='0'&&Tablica[2][i]=='0'&&Tablica[3][i]=='0'&&Tablica[4][i]=='0'&&Tablica[5][i]=='0'&&Tablica[6][i]=='0'&&Tablica[7][i]=='1'){
a++;
s=s+Dzies[i];
}
}
cout<<"Liczb skladajacych sie z 9 cyfr jest: "<<a<<endl<<"Ich suma, to:"<<endl<<s<<" w systemie dziesietnym."<<endl;
odpowiedz.close();
return 0;
}