C/Przykłady z komentarzem
[edytuj] Liczby losowe
Poniższy program generuje wiersz po wierszu macierz o określonych przez użytkownika wymiarach, zawierającą losowo wybrane liczby. Każdy wygenerowany wiersz macierzy zapisywany jest w pliku tekstowym o wprowadzonej przez użytkownika nazwie. W pierwszym wierszu pliku wynikowego zapisano wymiary utworzonej macierzy. Program napisany i skompilowany został w środowisku GNU/Linux.
#include <stdio.h> #include <stdlib.h> /* dla funkcji rand() oraz srand() */ #include <time.h> /* dla funkcji time() */ main() { int i, j, n, m; float re; FILE *fp; char fileName[128]; printf("Wprowadz nazwe pliku wynikowego..\n"); scanf("%s",&fileName); printf("Wprowadz po sobie liczbe wierszy i kolumn macierzy oddzielone spacją..\n"); scanf("%d %d", &n, &m); /* jeżeli wystąpił błąd w otwieraniu pliku i go nie otwarto, wówczas funkcja fclose(fp) wywołana na końcu programu zgłosi błąd wykonania i wysypie nam program z działania, stąd musimy umieścić warunek, który w kontrolowany sposób zatrzyma program (funkcja exit;) */ if ( (fp = fopen(fileName, "w")) == NULL ) { puts("Otwarcie pliku nie jest mozliwe!"); exit; /* jeśli w procedurze glownej to piszemy bez nawiasow */ } else { puts("Plik otwarty prawidłowo.."); } fprintf(fp, "%d %d\n", n, m); /* w pierwszym wierszu umieszczono wymiary macierzy */ srand( (unsigned int) time(0) ); for (i=1; i<=n; ++i) { for (j=1; j<=m; ++j) { re = ((rand() % 200)-100)/ 10.0; fprintf(fp,"%.1f", re ); if (j!=m) fprintf(fp," "); } fprintf(fp,"\n"); } fclose(fp); return 0; }
[edytuj] Zamiana liczb dziesiętnych na liczby w systemie dwójkowym
Zajmijmy się teraz innym zagadnieniem. Wiemy, że komputer zapisuje wszystkie liczby w postaci binarnej (czyli za pomocą jedynek i zer). Spróbujmy zatem zamienić liczbę, zapisaną w "naszym" dziesiątkowym systemie na zapis binarny. Uwaga: Program działa jedynie dla liczb od 0 do maksymalnej wartości którą może przyjąć typ unsigned short int w twoim kompilatorze.
#include <stdio.h> #include <limits.h> void dectobin (unsigned short a) { int licznik; /* CHAR_BIT to liczba bitów w bajcie */ licznik = CHAR_BIT * sizeof(a); while (--licznik >= 0) { putchar(((a >> licznik) & 1)) ? '1' : '0'); } } int main () { unsigned short a; printf ("Podaj liczbę od 0 do %hd: ", USHRT_MAX); scanf ("%hd", &a); printf ("%hd(10) = ", a); dectobin(a); printf ("(2)\n"); return 0; }
[edytuj] Zalążek przeglądarki
Zajmiemy się tym razem inną kwestią, a mianowicie programowaniem sieci. Jest to zagadnienie bardzo ostatnio popularne. Nasz program będzie miał za zadanie połączyć się z serwerem, którego adres użytkownik będzie podawał jako pierwszy parametr programu, wysłać zapytanie (mysocket); /* zamykamy gniazdo */ return EXIT_SUCCESS; }
Powyższy przykład może być odrobinę niezrozumiały, dlatego przyda się kilka słów wyjaśnienia. Pliki nagłówkowe, które dołączamy zawierają deklarację nowych dla Ciebie funkcji - socket(), connect(), write() oraz read(). Oprócz tego spotkałeś się z nową strukturą - sockaddr_in. Wszystkie te obiekty są niezbędne do stworzenia połączenia. Aby dowiedzieć się więcej nt. wszystkich użytych tu funkcji i struktur musisz odwiedzić podręcznik o programowaniu w systemie UNIX.