liczby binarne
Ostatnio zmodyfikowano 2017-05-17 19:23
Usurper Temat założony przez niniejszego użytkownika |
liczby binarne » 2017-05-16 22:59:02 Siemka,mam problem z jednym z podpunktów W pliku binarne.txt znajduje się 500 napisów złożonych wyłącznie z zer i jedynek. W każdym wierszu umieszczony jest jeden napis. Każdy napis ma długość podzielną przez 4. Napisz program (lub programy), który da odpowiedzi do poniższych zadań Napisy z pliku binarne.txt traktujemy jako binarne zapisy liczb dziesiętnych, w których każdy segment złożony z 4 znaków jest reprezentacją binarnego zapisu jednej cyfry (zapis taki nazywany jest kodem BCD). Napis uznajemy za niepoprawny, gdy któryś z segmentów ma wartość większą niż 9 (czyli nie jest zapisem cyfry dziesiętnej). Przykład: Napis 10010111 jest poprawny i reprezentuje liczbę 97, natomiast napis 11010000 nie jest poprawny, gdyż jego pierwszy segment (1101) reprezentuje w zapisie binarnym większą od 9 liczbę 13. Podobnie nie jest poprawny napis 1110, ponieważ reprezentuje w zapisie binarnym liczbę 14. Podaj liczbę niepoprawnych napisów z pliku binarne.txt oraz najmniejszą długość niepoprawnego napisu. oto mój kod:
#include <iostream> #include <fstream> #include<cstdlib> using namespace std; int z2na10(string s) { int dziesietna=strtol(s.c_str(),NULL,2); return dziesietna; } string z10na2(int s) { char binarna[255]; itoa(s,binarna,2); return (string)binarna; } int main() { string s; int suma=0; int ile=0; ifstream we("binarne.txt"); for(int i=0;i<500;i++) { we>>s; for(int j=0;j<s.size();j++) { for(int k=0;k<4;k++) { z2na10(s[k]); suma+=s[k]; if(suma>9)ile++; suma=0; } }
} cout<<ile<<endl;
return 0; } niestety ale nie działa :(,liczę na pomoc,gdyż nwm gdzie robię błąd :( |
|
mateczek |
» 2017-05-17 19:23:53 nie analizuje całości ale luknąłem na to: for( int k = 0; k < 4; k++ ) { z2na10( s[ k ] ); suma += s[ k ]; if( suma > 9 ) ile++; suma = 0; }
Ten kod jest do napisania na nowo. i algorytmy do przemyślenia |
|
« 1 » |