kejkun Temat założony przez niniejszego użytkownika |
[C++] Zadanie z matury rozszerzonej 2011 » 2013-04-27 21:57:09 Witam, znalazlem na stronie kod, ktory probowalem popawic , aby dzialal, niestety nadal nie dziala wywala blad " out of range" po wlaczeniu, jak go naprawic ? o to kod : #include <iostream> #include <conio.h> #include <fstream> #include <sstream>
using namespace std;
int main() { fstream plik, plik2, plik3; ofstream zapis, wpisz1; int dlugosc, parzyste = 0; string napis; plik.open( " e:/liczby.txt", ios::in ); zapis.open( " e:/zadanie6.txt", ios::out ); for( int i = 0; i < 1000; i++ ) { getline( plik, napis ); dlugosc = napis.length(); if( napis.substr( dlugosc - 1, 1 ) == "0" ) parzyste++; } zapis << "a) " << parzyste << "\n"; plik.close(); plik2.open( " c:/liczby.txt", ios::in ); dlugosc = 0; string najwieksza; bool wieksza = true; for( int i = 0; i < 1000; i++ ) { getline( plik2, napis ); if( napis.length() > dlugosc ) { najwieksza = napis; dlugosc = napis.length(); } else if( napis.length() == dlugosc ) { wieksza = true; for( int j = 0; j < dlugosc; j++ ) { if( najwieksza[ j ] < napis[ j ] ) break; else if( najwieksza[ j ] > napis[ j ] ) { wieksza = false; break; } } if( wieksza ) { dlugosc = napis.length(); najwieksza = napis; } } } int wartosc = 0; int potega = 1; for( int i = 0; i < dlugosc; i++ ) { if( najwieksza.substr( dlugosc - i - 1, 1 ) == "1" ) wartosc += potega; potega *= 2; } zapis << "b)" << najwieksza << " " << wartosc << "\n"; plik2.close(); plik3.open( " c:/liczby.txt", ios::in ); int ilosc = 0; wartosc = 0; for( int i = 0; i < 1000; i++ ) { getline( plik3, napis ); if( napis.length() == 9 ) { ilosc++; potega = 1; for( int j = 0; j < dlugosc; j++ ) { if( najwieksza.substr( dlugosc - j - 1, 1 ) == "1" ) wartosc += potega; potega *= 2; } } } zapis << "c) " << "\n"; int i = 0; int tablica[ 100 ]; while( wartosc != 0 ) { if( wartosc % 2 == 0 ) { tablica[ i ] = 0; wartosc = wartosc / 2; } else { tablica[ i ] = 1; wartosc = wartosc / 2; } i++; } while( i > 0 ) { i--; zapis << tablica[ i ]; } plik3.close(); zapis.close(); getch(); }
tu mozna pobrac plik : http://maturzysta.dlastudenta.pl/artykul /Egzamin_maturalny_informatyka,6986.html |
|
Monika90 |
» 2013-04-28 07:06:07 plik.open( " e:/liczby.txt", ios::in ); zapis.open( " e:/zadanie6.txt", ios::out );
|
Tak się nie da otworzyć plików, bo masz dwie spacje na początku nazwy. Poza tym, okropnie wygląda ten Twój program, podziel go na funkcje, a komentarze takie jak "//otwieram plik", albo "//wczytuję linie" są bez sensu. |
|
kejkun Temat założony przez niniejszego użytkownika |
» 2013-04-28 10:18:02 faktycnie wystarczylo to , aby program zadziałał , lecz nadal nie dziala podpunkt c) w sensie nic nie zapisuje do pliku, pomysl czemu ?? |
|
pekfos |
» 2013-04-28 11:52:45 A ścieżka jest poprawna? |
|
kejkun Temat założony przez niniejszego użytkownika |
» 2013-04-28 12:00:52 dzieki wielkie ! ślepy chyba jestem :P Przy okazji: mamy czesc kodu : else if( napis.length() == dlugosc ) { wieksza = true; for( int j = 0; j < dlugosc; j++ ) { if( najwieksza[ j ] < napis[ j ] ) break; else if( najwieksza[ j ] > napis[ j ] ) { wieksza = false; break; } } if( wieksza ) { dlugosc = napis.length(); najwieksza = napis; } }
program działa poprawnie bez niej, i srednio ogarniam ten zapis szczerze mowiac, ale sadze , ze chodzi o to, ze jak program znajdzie np. 3 liczby o dlugosci 9 , to porownuje ich wspolczynniki( kolejne cyfry ) ? bo tutaj to srednio to widzę . |
|
pekfos |
» 2013-04-28 12:08:14 Ten kod sprawdza, czy jeden tekst jest większy od aktualnie największego (o takiej samej długości). Bez sensu jest tu przypisanie dlugosc = napis.length();
Skoro ten kod jest w warunku if( napis.length() == dlugosc )
. Coś za dużo czasu jest na tej maturze, wystarczyło użyć std::lexicographical_compare <> . ;) |
|
« 1 » |