Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ^ [[zajecia:rpism:rpism|Start]] ^ [[zajecia:jpr2008_2:zajęcia1|Zajęcia 1]] ^ [[zajecia:jpr2008_2:zajęcia2|Zajęcia 2]] ^ [[zajecia:jpr2008_2:zajęcia3|Zajęcia 3]] ^ [[zajecia:jpr2008_2:zajęcia4|Zajęcia 4]] ^ [[zajecia:jpr2008_2:zajęcia5|Zajęcia 5]] ^ [[zajecia:jpr2008_2:zajęcia6|Zajęcia 6]] ^ [[zajecia:jpr2008_2:zajęcia7|Zajęcia 7]] ^ [[zajecia:jpr2008_2:zajęcia8|Zajęcia 8]] ^ [[zajecia:jpr2008_2:zajęcia9|Zajęcia 9]] ^ [[zajecia:jpr2008_2:zajęcia10|Zajęcia 10]] ^ [[zajecia:jpr2008_2:pliki|Pliki z zajęć]] ^ ====== Zajęcia 10 - Odczyt i zapis plików ===== ===== Deklaracje najważniejszych funkcji ===== **Biblioteka** #include <stdio.h> **Otwieranie i zamykanie pliku** FILE *fopen(const char *nazwapliku, const char *tryb); int fclose (FILE *plik); Tryb: "r" - odczyt, "w" - zapis, "a" - dopisanie na końcu, "rb", "wb" - odczyt i zapis pliku binarnego **Odczyt i zapis (plik tekstowy)** int fscanf(FILE *stream, const char *format, ...); int fprintf(FILE *plik, const char *format, ...); **Odczyt i zapis (plik binarny)** size_t fread(void *wsk, size_t rozmiar, size_t ilosc, FILE *plik); size_t fwrite(const void *wsk, size_t rozmiar, size_t ilosc, FILE *plik); **Wykrywanie błędów (koniec pliku)** int feof(FILE *plik); Więcej informacji o funkcjach biblioteki **[[http://pl.wikibooks.org/wiki/C/Biblioteka_standardowa/Indeks_tematyczny#stdio.h|stdio.h]]** ===== Operacje na plikach tekstowych ===== <code C> #include <stdio.h> int main() { FILE *plik; int liczba,i=0; plik = fopen("liczby.txt","r"); if (plik == NULL) { printf("Blad otwarcia pliku \"liczby.txt\"\n"); return 1; } printf("Ok. Zaczynam czytac plik:\n"); while(feof(plik) == 0) { fscanf(plik,"%d",&liczba); printf("%d => %d\n",i,liczba); i++; } fclose(plik); return 0; } </code> ** Ćwiczenia ** * Do programu z poprzednich zajęć (macierze) dodaj następujące funkcje: * ''**zapisz_macierz**'' - argumentami funkcji jest macierz i jej wymiary, oraz wskaźnik pliku tekstowego (do struktury ''FILE'') otworzonego w trybie umożliwiającym zapis. Funkcja najpierw umieszcza w pliku dwie liczby całkowite określające rozmiar macierzy a następnie wartości poszczególnych elementów macierzy * ''**odczytaj_macierz**'' - argumentami funkcji jest uchwyt do pliku (wskaźnik do struktury ''FILE'') oraz wskaźniki do dwóch zmiennych typu całkowitego, do których zostaną wczytane wymiary macierzy. Funkcja zwraca macierz (adres do dynamicznie za-alokowanej macierzy) wczytaną z pliku tekstowego lub ''NULL'' jeśli coś poszło nie tak jak powinno (brak pamięci, błąd odczytu pliku, itp.). * Korzystając z powyższych funkcji napisz program, który wczyta z pliku tekstowego dwie macierze liczb rzeczywistych a następnie zapisze do innego pliku tekstowego wynik dodawania dwóch macierzy. Nazwy plików powinien podać użytkownik w czasie działania programu, w tym celu można skorzystać z funkcji ''**czytajlinie**'' z jednych z poprzednich zajęć ===== Zadania domowe ===== - zmodyfikuj program ''**grep**'' (patrz zajęcia 7) tak aby przyjmował więcej niż jeden argument wejściowy. Pierwszym argumentem ma być szukany wzorzec a kolejnymi argumentami nazwy plików w których wzorzec będzie szukany. Program wyświetla linie z podanych plików w których pojawia się szukany wzorzec - zmodyfikuj program ''**baza_danych**'' (patrz zajęcia 8), tak aby na początku program wczytywał bazę danych z zapisanego wcześniej pliku tekstowego a na koniec program zapisywał do tego samego pliku aktualną zawartość bazy danych - napisz program który szyfruje dany plik tekstowy za pomocą szyfru Cezara. Szyfr ten polega na zastąpieniu każdej litery literą położoną o trzy pozycje dalej w alfabecie. Więc znak A zastępujemy znakiem D a znak Z znakiem C itd. Program powinien poprosić o podanie nazwy pliku do zaszyfrowania oraz nazwy pliku wynikowego w którym umieszczona zostanie zaszyfrowana wiadomość. Program też powinien umożliwiać odszyfrowanie wcześniejszej wiadomości.