[C++] Strumień wejścia, string, zadanie maturalne
Ostatnio zmodyfikowano 2016-04-15 01:20
Prefectus Temat założony przez niniejszego użytkownika |
[C++] Strumień wejścia, string, zadanie maturalne » 2016-04-14 23:09:47 Cześć jestem bardzo początkowym adeptem C++. Program musi odczytać 200 "obrazków" zrobionych z 1 i 0 zapisanych w pliku. Każdy obrazek ma rozmiar 20x20, gdy 1 jest więcej niż 0 w obrazku wtedy nazywa się on rewersem. Zadaniem programu jest wypisanie ile rewersów znajduje się w pliku i w którym obrazku jest nawięcej 1. Próbowałem z odczytywaniem pojedynczo znaków i porównywaniu ich z 1 i 0 ale zmienna przechowująca wypisuje błędy. |
|
michal11 |
» 2016-04-14 23:18:12 Pokaż co już masz.
Jak oddzielone są od siebie obrazki w pliku ? Najlepiej wklej fragment tego pliku. |
|
Prefectus Temat założony przez niniejszego użytkownika |
» 2016-04-14 23:25:33 #include <iostream> #include <fstream> #include <string>
using namespace std; int main(){ int j=0,i=0,rewers=0,k=0,jeden=0,zero=0; char pom[1]; ifstream plik("dane_obrazki.txt"); if(plik.good()){ while(!plik.eof()){ for(k=0;k<200;k++){ for(j=0;j<20;j++){ for(i=0;i<20;i++){ plik >> pom; if(pom=="0"){ zero++;} if(pom=="1"){ jeden++;} } plik>>pom; j++; } for(i=0;i<20;i++){ plik>>pom; } if(zero<jeden) { rewers++;} } } } plik.close(); cout << "Zad. 61.1 Jest " << rewers << " rewersow" << endl; system("pause"); } |
|
Prefectus Temat założony przez niniejszego użytkownika |
» 2016-04-14 23:26:37 Plik tekstowy wygląda tak: a całość zadania http://www.oke.waw.pl/new/download/files/File/CKE/2016/mat/Matura_Zbi%C3%B3r_zada%C5%84_Informatyka.pdf zad. 64
000000000000000000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 001000000000001000000 000100000000010000000 000011111111100000001 000000000000000000000 000000000000000000000 00111111111111100000
000000000000000000000 000111111100011111110 000100000000010000000 000100000000010000000 000100000000010000000 000100000000010000000 000100000000010000000 000100000000010000000 000111111100011111110 000100000000010000000 000110000000011000000 000101000000010100000 000100100000010010000 000100010000010001000 000100001000010000100 000100000100010000010 000100000000010000000 000100000000010000000 000100000000010000000 000000000000000000000 00001111110000111111
|
|
michal11 |
» 2016-04-14 23:54:13 Kod wstawiaj w znaczniki. szybciej będzie jak ci po prostu pokażę co ja napisałem zamiast wyjaśniać problemu w twoim kodzie: int main() { std::ifstream file( "plik.txt" ); std::string line; int imageOnes[ 200 ] { 0 }; int imageSize[ 200 ] { 0 }; int imageNum = 0; while( std::getline( file, line ) ) { imageOnes[ imageNum ] += std::count( line.begin(), line.end(), '1' ); imageSize[ imageNum ] += line.size(); if( line == "" || file.eof() ) { ++imageNum; } } }
|
|
Prefectus Temat założony przez niniejszego użytkownika |
» 2016-04-15 00:09:05 Próbowałem kompilować to w Dev'ie ale pojawia się błąd: [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11 tak samo w Visual'u. |
|
michal11 |
» 2016-04-15 00:34:31 W devie ustaw kompilację dla iso c++11, narzędzia>>ustawienia kompilatora>>wytwarzanie/optymalizacja kodu>>wytwarzanie kodu>>Language standard.
Która wersja visual studio ? |
|
carlosmay |
» 2016-04-15 00:35:25 W którym Visualu? int imageOnes[ 200 ] { 0 }; Inicjalizacja elementów tablicy w ten sposób dostępna jest od standardu C++11. Masz ją wyłączoną lub niedostępną. Poszukaj jak w twoim środowisku ją włączyć. |
|
« 1 » 2 |