C/Przykłady z komentarzem: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
m Programowanie:C:Przykłady z komentarzem przeniesiono do C/Przykłady z komentarzem: zmiana konwencji nazewnictwa
m poprawa linków
Linia 1: Linia 1:
<noinclude><small>< [[Programowanie:C]]</small></noinclude>
<noinclude><small>< [[C]]</small></noinclude>


=== Liczby losowe ===
=== Liczby losowe ===
Linia 6: Linia 6:


#include <[[Programowanie:C:Biblioteka standardowa:Indeks tematyczny#stdio.h|stdio.h]]>
#include <[[Programowanie:C:Biblioteka standardowa:Indeks tematyczny#stdio.h|stdio.h]]>
#include <[[Programowanie:C:Biblioteka standardowa:Indeks tematyczny#stdlib.h|stdlib.h]]> /* dla funkcji [[Programowanie:C:rand|rand()]] oraz [[Programowanie:C:srand|srand()]] */
#include <[[Programowanie:C:Biblioteka standardowa:Indeks tematyczny#stdlib.h|stdlib.h]]> /* dla funkcji [[C/rand|rand()]] oraz [[C/srand|srand()]] */
#include <[[Programowanie:C:Biblioteka standardowa:Indeks tematyczny#time.h|time.h]]> /* dla funkcji [[Programowanie:C:time|time()]] */
#include <[[Programowanie:C:Biblioteka standardowa:Indeks tematyczny#time.h|time.h]]> /* dla funkcji [[C/time|time()]] */
main()
main()
Linia 16: Linia 16:
char fileName[128];
char fileName[128];
[[Programowanie:C:printf|printf]]("Wprowadz nazwe pliku wynikowego..\n");
[[C/printf|printf]]("Wprowadz nazwe pliku wynikowego..\n");
[[Programowanie:C:scanf|scanf]]("%s",&fileName);
[[C/scanf|scanf]]("%s",&fileName);
printf("Wprowadz po sobie liczbe wierszy i kolumn macierzy oddzielone spacją..\n");
printf("Wprowadz po sobie liczbe wierszy i kolumn macierzy oddzielone spacją..\n");
Linia 27: Linia 27:
warunek, który w kontrolowany sposób zatrzyma program (funkcja exit;)
warunek, który w kontrolowany sposób zatrzyma program (funkcja exit;)
*/
*/
if ( (fp = [[Programowanie:C:fopen|fopen]](fileName, "w")) == NULL )
if ( (fp = [[C/fopen|fopen]](fileName, "w")) == NULL )
{
{
[[Programowanie:C:puts|puts]]("Otwarcie pliku nie jest mozliwe!");
[[C/puts|puts]]("Otwarcie pliku nie jest mozliwe!");
exit; /* jeśli w procedurze glownej
exit; /* jeśli w procedurze glownej
to piszemy bez nawiasow */
to piszemy bez nawiasow */
Linia 39: Linia 39:
/* w pierwszym wierszu umieszczono wymiary macierzy */
/* w pierwszym wierszu umieszczono wymiary macierzy */
[[Programowanie:C:srand|srand]]( (unsigned int) [[Programowanie:C:time|time]](0) );
[[C/srand|srand]]( (unsigned int) [[C/time|time]](0) );
for (i=1; i<=n; i++)
for (i=1; i<=n; i++)
{
{
Linia 50: Linia 50:
fprintf(fp,"\n");
fprintf(fp,"\n");
}
}
[[Programowanie:C:fclose|fclose]](fp);
[[C/fclose|fclose]](fp);
return 0;
return 0;
}
}
Linia 88: Linia 88:
}
}


<noinclude><small>< [[Programowanie:C]]</small></noinclude>
<noinclude><small>< [[C]]</small></noinclude>

Wersja z 17:28, 18 paź 2006

< C

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);

           /* jezeli byl blad 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;
}

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;      

  /* 8 to ilość bitów w bajcie */
  licznik = 8 * sizeof(a);
  while(--licznik >= 0)
  {
   if ((a >> licznik) & 1) 
    printf ("1");
   else 
    printf ("0");
   }
}

int main ()
{
 unsigned short a;

  printf ("Podaj liczbę od 0 do %d: ", USHRT_MAX);
  scanf ("%d", &a);
  printf ("%d(10) = ", a);
  dectobin(a);
  printf ("\n");

  return 0;
}

< C