Nerozumím programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nerozumím programu – C / C++ – Fórum – Programujte.comNerozumím programu – C / C++ – Fórum – Programujte.com

 

Momok0
Duch
14. 11. 2016   #1
-
0
-

Dobrý den,

mohl by mi někdo přeložit, co který příkaz v tomto programu dělá, prosím?

Předem děkuji za jakoukoliv odpověď.

#include <stdio.h>

#define MAX 1000000

int main(void)
{
    int cit, jmen, j, i = 0, zac = 0;
    int zb[MAX] = {0};
    char vysl[MAX];
    FILE *fin, *fout;
    fin = fopen("zlomky.in", "r");
    fscanf(fin, "%d %d\n", &cit, &jmen);
    fout = fopen("vysledek.out", "w");

    if (cit >= jmen) {
        zac = cit/jmen;
        cit %= jmen;
    }

    fprintf(fout, "%d.", zac);
    if (!cit)
        fprintf(fout, "0");

    while (cit)
    {
        zb[cit] = i+1;
        cit *= 10;
        vysl[i] = cit / jmen + '0';
        i++;
        cit %= jmen;
        if (zb[cit])
            break;
    }
    if (cit)
    {
        j = vysl[zb[cit] - 1];
        vysl[zb[cit] - 1] = 0;
    }
    vysl[i] = 0;
    fprintf(fout, "%s", vysl);
    if (cit)
    {
        fprintf(fout, "(");
        vysl[zb[cit] - 1] = j;
        vysl[i++] = ')';
        vysl[i] = 0;
        fprintf(fout, "%s", vysl + zb[cit] - 1);
    }
    return 0;
}

Nahlásit jako SPAM
IP: 109.73.208.–
14. 11. 2016   #2
-
0
-

Co třeba zkusit krokovat v debuggeru?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
BezMozek0
Newbie
25. 11. 2016   #3
-
0
-

#1 Momok
A k čemu to vlastně potřebuješ? 

Nahlásit jako SPAM
IP: 77.48.243.–
BDS+3
Věrný člen
25. 11. 2016   #4
-
0
-

#1 Momok
pokud ti jde o vysvětlení: 

int main(void)
{
	int cit, jmen, j, i = 0, zac = 0;
	int zb[MAX] = { 0 };
	char vysl[MAX];
	FILE *fin, *fout;

	fin = fopen("zlomky.in", "r"); //načte soubor pro čtení
	fscanf(fin, "%d %d\n", &cit, &jmen); //ze souboru fin získá hodnoty do cit a jmen
	fout = fopen("vysledek.out", "w"); //otevře soubor pro zápis a zkrátí na nulovou délku

	if (cit >= jmen) {//pokud je cit větší nebo rovno jmem
		zac = cit / jmen;//vydělí cit jmen
		cit %= jmen; //do cit vloží zbytek po celočíselném dělení cit:jmen
	}

	fprintf(fout, "%d.", zac); //zapíše do souboru hodnotu zac
	if (!cit)//když cit je nula
		fprintf(fout, "0");//zapíše do souboru 0

	while (cit)//smyčka (to mezi závorkami) se bude opakovat dokud cit nebude 0
	{
		zb[cit] = i + 1; //zapíše do pole zb na pozici cit hodnotu o jednu větší než i
		cit *= 10; //vynásobí cit deseti
		vysl[i] = cit / jmen + '0'; //do výsledku na pozici i vloží cit:jmen + 48 (48 je hodnota znaku 0)
		i++; //navýší i o jedna
		cit %= jmen; //do cit vloží zbytek po celočíselném dělení cit:jmen
		if (zb[cit]) break; //když zb[cit] není nula ukončí smyčku
	}

	if (cit)//když cit není nula
	{
		//do j vloží hodnotu z pole vysl a to z pozice uložené v poli zb na pozici cit (ale o jednu nižší)
		//(tohle se krkolomně popisuje)
                 j = vysl[zb[cit] - 1];
		// a na tu pozici hodí nulu
		vysl[zb[cit] - 1] = 0;
	}
	vysl[i] = 0; //do vysl na pozici i vloží nulu
	fprintf(fout, "%s", vysl); //zapíše do souboru znaky z pole vysl, bude zapisovat dokud nenarazí na nulu
	if (cit)//když cit není nula
	{
		fprintf(fout, "("); //zapíše do souboru závorku
		vysl[zb[cit] - 1] = j; //na toto umístění vloží j
		vysl[i++] = ')'; //do vysl na pozici i vloží závorku a pak i navýší o jedna
		vysl[i] = 0; //do vysl na pozici i vloží nulu
		fprintf(fout, "%s", vysl + zb[cit] - 1); //zapíše do souboru znaky z pole vysl od pozice dle výpočtu
	}
	return 0;//vrátí 0
}

zkoumat smysl programu se mě nechce, ale každopádně chybí tam ošetření chyb

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Výjimky a DLL, nerozumím — založil Aigor

Chyba v programu — založil choice_

Krach programu — založil oxidián

Padanie programu v C — založil Erik12345

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý