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

Program přestane reagovat – C / C++ – Fórum – Programujte.comProgram přestane reagovat – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Řešení
10. 12. 2015   #1
-
0
-
Vyřešeno Nejlepší odpověď

Zdravím, jsem začínající "programátor" a potřeboval bych pomoc s vyřešením jedné úlohy, konkrétně této.

Můj program vypadá takto 

#include <stdio.h>

int zjisti_pocet_kroku(int j){
    int marker=0;
    do
    {
        marker++;
        if(j%2==0) j=j/2;
        else j=j*3+1;
    }
    while(j!=1);
    
    return marker;
}

    
int main(void)
{
    FILE*input;
    FILE*output;
    
    input=fopen("vstup.txt","r");
    output=fopen("vystup.txt","a");
    
    int pocet,i,j;
    
    fscanf(input,"%d",&pocet);
    
    char dolni[pocet];
    char horni[pocet];
    char maximalni_pocet_kroku[pocet];
    char nejvyssi_cislo[pocet];
	
	for(i=1;i<=pocet;i++)
	{
    	fscanf(input,"%d",&dolni[i]);
		fscanf(input,"%d",&horni[i]);  
		for(j=dolni[i];j<=horni[i];j++)
		{
			if(zjisti_pocet_kroku(j) > maximalni_pocet_kroku[i])
            {
                                     maximalni_pocet_kroku[i]=zjisti_pocet_kroku(j);
                                     nejvyssi_cislo[i]=j;
            }
		}
		fprintf(output,"%d %d\n",maximalni_pocet_kroku[i],nejvyssi_cislo[i]);
	}	
}

Pokud je v souboru 10 intervalů, program funguje bez problémů a můj výstup se označí jako správné řešení.

Druhý vstup obsahuje 100 intervalů a když spustím program, přestane reagovat a do souboru vystup.txt se zapíší pouze čísla -3 -3. Kde je chyba ? Jsem začátečník, tudíž o samotném jazyku C moc nevím a pokouším se programovat metodou pokus-omyl.

Děkuji

Nahlásit jako SPAM
IP: 89.103.235.–
KIIV
~ Moderátor
+43
God of flame
10. 12. 2015   #2
-
0
-

Na prvni pohled napriklad nezaviras soubory. U vystupniho pak prijdes o vse, co je v bufferu, ale ne na disku.

Kod jsem jinak nezkoumal, muze toho byt mnohem vic

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
BDS+3
Věrný člen
10. 12. 2015   #3
-
+1
-
Zajímavé

#1 Speedding
nechce se mi celý tvůj kód snažit pochopit, ale chybu máš například tady: 

char dolni[pocet];
char horni[pocet];
char maximalni_pocet_kroku[pocet];
char nejvyssi_cislo[pocet];

tady musíš použít dynamické pole.

A tady:

char nejvyssi_cislo[pocet];
	
	for(i=1;i<=pocet;i++)

k prvkům pole lze přistupovat v rozmezí 0 až pocet-1 !!!

Nahlásit jako SPAM
IP: 185.69.69.–
W10 :)
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, 29 hostů

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ý