Wytłumaczenie kodu do zadania

0

ZADANIE
Obliczyć wartość funkcji jednoargumentowej. Z wartości y wybieramy dwie (trzy) cyfry i wyświetlamy wynik w systemach dwójkowym i szesnastkowym.

funkcja: y = =7/(5.7+3*x), x=5.2

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

double x=5.2,y,a;

void to_every(int x,int mod)

{
	char znaki [16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
printf("\nliczba %d(10)=",x);
int everyNumber[100],i=1,j;
	while(x!=0)
	 {
         everyNumber[i++]= x % mod;
         x = x / mod;
    }

    for(j= i -1; j>0;j--)
	     printf("%c",znaki[everyNumber[j]]);

    printf("(%d)\n",mod);
}
int main(int argc, char *argv[])
{
	printf("obliczanie wyniku funcji y= 7/5.7+3*x dla x = 5.2\n");
	y= (7/(5.7+3*x));
	printf("x=%.2f y=%f\n", x, y);

	double a,b,c;x;

	a = y;
	c = modf (a , &b);
    printf ("liczba=%f\ncalosc=%f\ndziesietna=%f\n", a, b, c);

    int f;
	c=c*100000;
	f=c;
	to_every(f,2);
	to_every(f,16);

	printf("liczba %.5f(10)= %x(16)\n", a,f);
	printf("Wybieram 1 oraz 2 liczbe z wyniku po przecinku");
	double wynik= c/1000 ;
	printf("\nwynik = %f",c);
	wynik = floor(wynik);
	printf("\n%f",wynik);
	to_every(wynik,2);
	to_every(wynik,16);


	return 0;
}

prosze o pomoc w zrozumieniu tego kodu

0

Postarałem się wytłumaczyć praktycznie wszystko w tym kodzie, linijka po linijce praktycznie, a na temat systemów pozycyjnych odsyłam np do (rozwiązanie tam jest w C++, więc troszeczkę się różni, ale moim zdaniem jest troszeczkę czytelniejsze, nie to abym się czepiał):
http://www.algorytm.edu.pl/algorytmy-maturalne/pozycyjne-reprezentacje-liczb.html
Na przyszłość proszę używaj znacznika code

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

double x=5.2,y,a;

void to_every(int x,int mod)

{
    char znaki [16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //znaki potrzebne do zamiany
printf("\nliczba %d(10)=",x); //wyswietlasz zmienna w systemie (10)
int everyNumber[100],i=1,j;
    while(x!=0)
     {
         everyNumber[i++]= x % mod; //zapisujesz wartosc liczba % system pozycyjny po czym powiekszasz wartosc indexu o 1
         x = x / mod; // dzielisz liczbe przez system pozycyjny
    }

    for(j= i -1; j>0;j--)
         printf("%c",znaki[everyNumber[j]]); // wyswietlasz tablice od konca

    printf("(%d)\n",mod); //wyswietlasz system pozycyjny, na ktory zmieniasz dana zmienna
}
int main(int argc, char *argv[])
{
    printf("obliczanie wyniku funcji y= 7/5.7+3*x dla x = 5.2\n");
    y= (7/(5.7+3*x));
    printf("x=%.2f y=%f\n", x, y); //wyliczenie wartosci x i y w typie float

    double a,b,c;x;

    a = y;
    c = modf (a , &b); //odcinasz calosci od wartosci dziesietnych
    printf ("liczba=%f\ncalosc=%f\ndziesietna=%f\n", a, b, c);

    int f;
    c=c*100000; //wartosci dziesietne mnozysz przez ta wartosc
    f=c;
    to_every(f,2); //systemy pozycyjne system binarny
    to_every(f,16);//hexadecymalny

    printf("liczba %.5f(10)= %x(16)\n", a,f);
    printf("Wybieram 1 oraz 2 liczbe z wyniku po przecinku");
    double wynik= c/1000 ; //pomnozona wartosc dziesietna dzielisz przez 1000
    printf("\nwynik = %f",c); //tutaj wyswietlasz wartosc przed podzieleniem
    //printf("\n%f",wynik); - dla porownania
    wynik = floor(wynik); //zaokragolenie podzielonej liczby w dol
    printf("\n%f",wynik);
    to_every(wynik,2); //pozycyjny binarnie
    to_every(wynik,16);//pozycyjny hexadecymalnie


    return 0;
}
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1