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

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
Kj (dyskusja | edycje)
Nie podano opisu zmian
GDR! (dyskusja | edycje)
Linia 57: Linia 57:


=== Zamiana liczb dziesiętnych na liczby w systemie dwójkowym ===
=== 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 będzie działa poprawnie dla liczb w zakresie od 0 do 65535, jednak radzę popróbować z innymi liczbami.
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 będzie działa poprawnie dla liczb w zakresie od 0 do 65535 (2<sup>16</sup> - 1), jednak radzę popróbować z innymi liczbami.


<pre>
<pre>
#include <stdio.h>
#include <stdio.h>


unsigned short a; /* 16-bitowa zmienna */
void dectobin (unsigned short a)

void dectobin ()
{
{
int licznik = 15;
int licznik = 15;
Linia 75: Linia 73:
int main ()
int main ()
{
{
unsigned short a; /* 16-bitowa zmienna */

printf ("Podaj liczbę: ");
printf ("Podaj liczbę: ");
scanf ("%d", &a);
scanf ("%d", &a);
printf ("%d(10) = ", a);
printf ("%d(10) = ", a);
dectobin();
dectobin(a);
printf ("\n");
printf ("\n");
return 0;
return 0;
Linia 84: Linia 84:


</pre>
</pre>

Funkcję <code>dectobin()</code> można zmodyfikować tak, aby działała na zmiennych całkowitych o dowolnej długości poprzez zmianę typu danych <code>unsigned short</code> na inny oraz zamianę linii

int licznik = 15;

na

int licznik = 8 * sizeof(a) - 1;




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

Wersja z 16:26, 17 wrz 2006

< Programowanie:C

Losowe liczby zespolone

Poniższy program generuje wiersz po wierszu macierz o określonych przez użytkownika wymiarach, zawierającą losowe liczby zespolone. 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, im;
   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;
       im = ((rand() % 200)-100)/ 10.0;
       fprintf(fp,"%.1f %.1f", re, im );
       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 będzie działa poprawnie dla liczb w zakresie od 0 do 65535 (216 - 1), jednak radzę popróbować z innymi liczbami.

#include <stdio.h>

void dectobin (unsigned short a)
{
  int licznik = 15;
  for (;licznik>=0;licznik--) {
   if ((a>>licznik)&1) printf ("1");
   else printf ("0");
   }
}

int main ()
{
  unsigned short a; /* 16-bitowa zmienna */

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

Funkcję dectobin() można zmodyfikować tak, aby działała na zmiennych całkowitych o dowolnej długości poprzez zmianę typu danych unsigned short na inny oraz zamianę linii

int licznik = 15;

na

int licznik = 8 * sizeof(a) - 1;


< Programowanie:C