C/Przykłady z komentarzem: Różnice pomiędzy wersjami
< C
Usunięta treść Dodana treść
poprawki |
→Zamiana liczb dziesiętnych na liczby w systemie dwójkowym: optymalizacja |
||
Linia 62: | Linia 62: | ||
int licznik; |
int licznik; |
||
/* |
/* czwarta potęga dwójki to 8 */ |
||
licznik = |
licznik = 4 << sizeof a; |
||
while (--licznik >= 0) { |
while (--licznik >= 0) { |
||
putchar(((a >> licznik) & 1)) ? '1' : '0'); |
putchar(((a >> licznik) & 1)) ? '1' : '0'); |
Wersja z 07:36, 2 gru 2011
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.
#include <stdio.h>
#include <stdlib.h> /* dla funkcji rand oraz srand */
#include <time.h> /* dla funkcji time */
int main()
{
int i, j, n, m;
float re;
FILE *fp;
char fileName[128];
puts("Wprowadz nazwe pliku wynikowego..");
scanf("%127s",fileName);
puts("Wprowadz po sobie liczbe wierszy i kolumn macierzy oddzielone spacją..");
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(0);
}
else { puts("Plik otwarty prawidłowo.."); }
fprintf(fp, "%d %d\n", n, m);
/* w pierwszym wierszu umieszczono wymiary macierzy */
srand( 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," ");
}
fputc(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;
/* czwarta potęga dwójki to 8 */
licznik = 4 << sizeof a;
while (--licznik >= 0) {
putchar(((a >> licznik) & 1)) ? '1' : '0');
}
}
int main (void)
{
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;
}