Atexor Temat założony przez niniejszego użytkownika |
Liczby w kodzie binarnym na dziesiętny » 2013-12-01 13:11:28 Witajcie, mam takie zadanie, aby liczby w kodzie binarnym zapisane w pewnym pliku zamieniło na kod dziesiętny (język C, nie C++). Miałem z tym problem więc zobaczyłem jak to powinno wyglądać i nie rozumiem kilku rzeczy tam, czy moglibyście mi je wyjaśnić? Przedstawię je jako komentarze: #include <stdio.h> #include <time.h> #include <stdlib.h>
int main() { char liczba[ 256 ]; int tab[ 2000 ]; int suma, i, n; FILE * plik; FILE * zapis; plik = fopen( "binarne.txt", "rt" ); zapis = fopen( "dziesietne.txt", "wt" ); while( fscanf( plik, "%s", & liczba ) == 1 ) { suma = 0; printf( "liczba = %s \n", liczba ); n = strlen( liczba ); for( i = 0; i < n; i++ ) { if( liczba[ i ] == '1' ) tab[ i ] = 1; else tab[ i ] = 0; } tab[ i + 1 ] = 2; for( i = 0; n != 0; i++ ) { suma = suma +( tab[ n - 1 ] * pow( 2, i ) ); n--; } fprintf( zapis, "%d\n", suma ); } close( plik ); system( "pause" ); return 0; }
Z góry dziękuję, pozdrawiam :) |
|
pekfos |
» 2013-12-01 13:38:34 1. To podstawy języka.. 2. Sprawdza każdy znak 3. To samo co w 1. 4. A jak działa bez tego? 5. Powinno być fclose(). 6. Pytaj autora programu. 7. Wyjście z programu przez wyjście z main(), lub wywołanie exit() zamyka wszystkie pliki. |
|
Atexor Temat założony przez niniejszego użytkownika |
» 2013-12-01 14:13:12 1. 2. 3. A, już rozumiem. Nie skojarzyłem, że odczytując dane z pliku traktuje je jako tekst, nie liczby i źle spojrzałem na deklarację tablicy (myślałem że także int). 4. Niby działa, ale wolę się spytać bo już kilka razy zdarzyło mi się, że jakiś program działał mimo że czegoś teoretycznie brakowało i w "szczególnych przypadkach przy konkretnych wartościach" bugował się. 5-7. Wnioskując, to operując na plikach w funkcji main() nie muszę zamykać plików, tylko kończąc ją exitem/getchar'em/system("pause")? Czyli nawet fclose w tym przypadku jest zbędne? |
|
pekfos |
» 2013-12-01 14:16:27 Te 2 mogło by służyć jako znak kończący. Nie ma tu jednak żadnego sprawdzania, za to jest używany rozmiar tablicy. Zresztą, cały ten program nie jest najlepiej napisany. tylko kończąc ją exitem/getchar'em/system("pause")? | getchar() i system() nie mają tu nic do rzeczy. Czyli nawet fclose w tym przypadku jest zbędne? |
Pliki powinno się zamykać, gdy nie są już potrzebne. |
|
Atexor Temat założony przez niniejszego użytkownika |
» 2013-12-01 14:38:01 Domyślam się, że na pewno da się to krócej i lepiej napisać przy użyciu bardziej zaawansowanych funkcji, jednak z racji iż dopiero zaczynam naukę w C to tego typu programy ćwiczeniowe powinny być zrobione bez użyciu bardziej zaawansowanych rzeczy.
Gdy zaczynałem pisać ten program to myślałem nad czymś w tym stylu (pętle i strlen). A da się to jakoś zoptymalizować i zrobić czytelniejsze używając właśnie podstaw (pętle/tablice/struktury itp.)?
Odnośnie kończenia funkcji, to chodzi o return(liczba)? Myślałem że on tylko "zwraca" liczbę, np. 0 systemowi gdy program wykonał się poprawnie. Poczytam może więcej o tym.
Zamykanie plików - dzięki, zapamiętam ;) |
|
« 1 » |