Chyba v zdrojovom kóde – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chyba v zdrojovom kóde – C / C++ – Fórum – Programujte.comChyba v zdrojovom kóde – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
26. 7. 2013   #1
-
0
-

Ahojte, potreboval by som pomôcť - nájsť chybu v kóde nakoľko po vstupe vypisuje nekonečné množstvo znakov a je ho potrebné nútene ukončiť. Podľa tohto zadania som zostrojil program:

V prvom riadku vstupu je buď celé kladné číslo N, alebo nula. Ak je tam kladné číslo, nasleduje N riadkov, v každom z nich je jedno celé číslo. Tieto čísla načítajte a v tom istom poradí ich vypíšte (každé na samostatný riadok). Ak je v prvom riadku nula, čítajte a vypisujte čísla (opäť každé na samostatný riadok), až kým znova nenačítate nulu. Túto nulu už nevypisujte. Môžete predpokladať, že vypísať budete musieť aspoň jedno a nanajvýš 12345 čísel. Všetky čísla na vstupe sú medzi 0 a 1 000 000 vrátane. Za údajmi, ktoré máte spracovať, môže na vstupe ešte nasledovať úplne hocičo. Tento zvyšok vstupu môžete ignorovať, netreba ho ani len prečítať.

Zdrojový kód:

#include <iostream>
using namespace std;
int main(void)
{
	int vstup;
	int i;
	int y;
	long int cislanula[12345];
	long int cnula = 12345;
	cin >> vstup;
	int* cisla = new int[vstup];
	bool jetonula = false;
	if (vstup == 0)
	{
		for (y=0; y<cnula; y++)
		{
			cin >> cislanula[y];
			if (cislanula[y] == 0)
			{
				jetonula = true;
				break;
			}
		}
	}
	else
	{
		for (i=0; i<vstup; i++)
		{
			cin >> cisla[i];
		}
	}
	
	if (jetonula == true)
	{
		for (int b=0; b<y; b++)
			cout << cislanula[b] << "\n";
	}
	else
	{
		for (int a=0; a<i; i++)
			cout << cisla[i] << "\n";
	}
	system("PAUSE");
	return 0;
}

Ďakujem.

Nahlásit jako SPAM
IP: 178.143.3.–
KIIV
~ Moderátor
+43
God of flame
26. 7. 2013   #2
-
0
-
Nerozhodně

jo a ta nejvetsi chyba je tam    i++  v tom druhem cyklu na vypis... 

Edit: coz by mozna nebylo tak kriticky kdybys tam nemel dve pole, a tak (pak se dela hromada chyb jen tim...)... (coz si povazoval za zbytecne abys o tom vedel)

taky
if (jetonula == true)
nebude v zivote fungovat pokud nactes maximalni pocet polozek 12345 !!!!!!!!  - budes najednou vypisovat to druhe pole s mozna i nedefinovanou hodnotou i - napriklad nahodnou;

a samozrejme neuvolnujes to druhe pole...

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
26. 7. 2013   #3
-
0
-

#2 KIIV
Ale ako vytvoriť spoločné pole ? alokovať ho musím a 0 ho nealokujem. A ako mám vyriešiť to s tou logickou operáciou ?

Nahlásit jako SPAM
IP: 178.143.3.–
KIIV
~ Moderátor
+43
God of flame
26. 7. 2013   #4
-
+1
-
Zajímavé

pole bych alokoval az po nacteni hodnoty vstup... pokud by byl vstup 0 tak se alokuje 12345 jinak se alokuje ten vstup... nacitani se da rozdelit jak mas... ikdyz zase tolik se toho neztrati pokud by tam byla podminka na tu nulu jeste s vyhodnocenim, jestli se ma zpracovat

jinak nejde ani tak o tu logickou operaci.. jde o ten pripad, kdy dojdes na maximalni pocet cisel.. pak nebude nastaveno  "jetonula" na true a spadne to do tohe druhe casti, co vypisuje uplne jiny pole a tak...

ta zakladni chyba u vypisu je ten copy paste a ze si ne vsude nahradil  "i" za "a"... 

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
26. 7. 2013   #5
-
0
-

#4 KIIV
Áno, zabudol som nahradiť "i" za "a" a po zmene online kompilátor program vyhodnotil ako úspešný - splnil podmienky autora. Ďakujem.

Nahlásit jako SPAM
IP: 178.143.3.–
KIIV
~ Moderátor
+43
God of flame
26. 7. 2013   #6
-
0
-

 A takhle by to mohlo vypadat trosku zjednoduseneji:

#include <iostream>

using namespace std;

int main(void)
{
    int pocet, max_pole;
    int max = 12345;

    cin >> pocet;
    max_pole = pocet>0 ? pocet : max;    

    int* cisla = new int[max_pole];
    
    int i = 0;
    for (; i<max_pole; i++)
    {
        cin >> cisla[i];
        if ((pocet == 0) && (cisla[i] == 0))
        {
            break;
        }
    }

    for (int a=0; a < i; ++a)
    {
        cout << cisla[a] << "\n";
    }

    delete [] cisla;
    return 0;
}
Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
26. 7. 2013   #7
-
0
-

#6 KIIV
Toto mi príde zložitejšie ale každý v tom má svoj vlastný systém a spôsob písania...ale inak ďakujem :)

Nahlásit jako SPAM
IP: 178.143.3.–
KIIV
~ Moderátor
+43
God of flame
26. 7. 2013   #8
-
+1
-
Zajímavé

na druhou stranu je pak min mist, kde se da udelat chyba... :D

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 64 hostů

Podobná vlákna

Chyba v kode, neviem si rady — založil Rastislav

Pachy v kode — založil sn3d

Pomoc v kode python — založil Priwi

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ý