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

Problém s funkciou – C / C++ – Fórum – Programujte.comProblém s funkciou – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Kent0
Stálý člen
20. 10. 2013   #1
-
0
-

Dobrý deň,

mám za úlohu spraviť jeden program a neviem si s tým rady. Niečo som napísal ale nechce mi to fungovať tak by som poprosil o nejakú radu. Nechcem aby ste mi tu napísali rovno zdrojový kód ale len nejakú ideu ako na to :). Hlavne ako zapísať tie funkcie. Ďakujem

Zadanie:

Napíšte program, ktorý skontroluje sumu čísel zapísaných v súbore SUMA.TXT , pri čom prvé číslo v súbore reprezentuje sumu, ktorej sa má rovnať súčet všetkých nasledujúcich čísel v súbore. Súbor obsahuje reálne čísla, každé vždy v zvlášť riadku, pri čom aj posledný riadok je ukončený znakom konca riadku. V prípade, že prvé číslo predstavuje súčet ostatných čísel v súbore vypíše program správu "Suma je správna"v opačnom prípade vypíše "Suma je nesprávna" , v oboch prípadoch je správa nasledovaná koncom riadku. V programe použite funkciu FILE * otvor_subor() na otvorenie súboru, funkciu void zatvor_subor(FILE *f) na zatvorenie súboru a funkciu void skontroluj(FILE*f) na samotnú kontrolu a výpis správy. Nezabudnite na ošetrenia pri otváraní a zatváraní súborov. Ak sa nepodarí súbor otvori ť alebo zatvori ť môžete na ukon čenie programu použi ť funkciu exit(1) . Nenulová hodnota parametra (1) vyjadruje, že program kon čí s chybou. Funkcia exit je definovaná v knižnici stdlib. Definujte dva ladiace módy – LADENIE_ZAKLADNE a LADENIE_PODROBNE . Ďalej vytvorte ladiace výpisy na začiatok každej funkcie pre základné ladenie v tvare Začiatok funkcie x . Pre podrobné ladenie sa k výpisom na začiatku pridajú aj ladiace výpisy na konci každej funkcie v tvare Koniec funkcie x , kde x je názov funkcie a aj výpisy súčtu po každom pripočítaní čísla do súčtu v tvare Sucet: nasledovaný medzerou a súčtom. Každá ladiaca správa je ukončená znakom konca riadku. 

Môj zdrojový kód:

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

FILE*otvor_subor()
{
    FILE*f;
    f=fopen("SUMA.TXT","r");
    if(f==NULL)
    {
        printf("Subor neexistuje.\n");
        exit(1);
    }
}
void zatvor_subor(FILE*f)
{
    fclose(f);
    if(fclose(f)==EOF)
    printf("Subor sa nepodarilo zatvorit.\n");
}
void skontroluj(FILE*f)
{
    int sucet,spolu,a;            //sucet-cislom, ktore ma byt suctom ostatnych
    sucet=getc(f);
    putchar(sucet);
            

}
int main()
{
    FILE*f;
    otvor_subor();
    skontroluj(f);
    getchar();
    return 0;
}

Výpočet tých súčtov to si spravím ale neviem ako mám spraviť tie funkcie.

Ešte raz vopred ďakujem za rady.

Nahlásit jako SPAM
IP: 178.253.136.–
Reklama
Reklama
KIIV+42
God of flame
20. 10. 2013   #2
-
0
-

uf tam je chyb.. snad na nic nezapomenu:

nevracis hodnotu z otvor_subor a i tak ji ani nepriradis do f v mainu...

v zatvor_subor volas fclose 2x - bude to pak vzdy hlasit chybu (ale zatim to stejne nevolas...)

suma by mela nacist prvni cislo samostatne a pak postupne dalsi cisla az do konce souboru a ty scitat v nejake dalsi promenne (hlavne si ji neprepisovat nicim)...

a pak ti tam uplne chybi ty logovani

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
20. 10. 2013   #3
-
0
-

#2 KIIV

Skúsil som to prerobiť

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

FILE*otvor_subor()
{
    FILE*f;
    f=fopen("SUMA.TXT","r");
    if(f==NULL)
    {
        printf("Subor neexistuje.\n");
        exit(1);
    }
    return f;
}
void zatvor_subor(FILE*f)
{
    if(fclose(f)==EOF)
    printf("Subor sa nepodarilo zatvorit.\n");
}
void skontroluj(FILE*f)
{
    int sucet,spolu,a;            //sucet-cislom, ktore ma byt suctom ostatnych
    sucet=getc(f);
    while(feof(f)==0)
    {
        a=getc(f);
        spolu=spolu+a;
    }
    
}
int main()
{
    FILE*f;
    otvor_subor();
    getchar();
    skontroluj(f);
    getchar();
    zatvor_subor(f);
    getchar();
    return 0;
}

používať funkcie celkom viem ale čo sa týka funkcií, ktoré pracujú so súbormi tak v tom mám dosť chaos, že ako ich volať, aké parametre tam dať atď..

Nahlásit jako SPAM
IP: 178.253.136.–
KIIV+42
God of flame
20. 10. 2013   #4
-
0
-

#3 Kent
no stale nemas inicializovane to f v main funkci...

"spolu" muze mit pri startu libovolnou hodnotu, tim jak ji nijak neinicializujes

mas pouzivat realna cisla ne integery -  a i kdybys mel pouzit integer, tak pomoci getc() nactes leda jeden znak

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
20. 10. 2013   #5
-
0
-

#4 KIIV

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

FILE*otvor_subor()
{
    FILE*f;
    f=fopen("SUMA.TXT","r");
    if(f==NULL)
    {
        printf("Subor neexistuje.\n");
        exit(1);
    }
    return f;
}
void zatvor_subor(FILE*f)
{
    if(fclose(f)==EOF)
    printf("Subor sa nepodarilo zatvorit.\n");
}
void skontroluj(FILE*f)
{
    double sucet,spolu=0.0,a;
    fscanf(f,"%lf",&sucet);
    while(feof(f)==0)
    {
        fscanf(f,"%lf",&a);
        spolu=spolu+a;
    }
    if(sucet==spolu)
    printf("Suma je spravna\n");
    else
    printf("Suma je nespravna\n");    
}
int main()
{
    FILE*f;
    f=fopen("SUMA.TXT","r");
    otvor_subor();
    skontroluj(f);
    zatvor_subor(f);
    getchar();
    return 0;
}

takto by to mohlo byť? 

Nahlásit jako SPAM
IP: 178.253.136.–
KIIV+42
God of flame
20. 10. 2013   #6
-
0
-

ani ne... ted otevres soubor bez jakejkoliv kontrol, pak ho oviras zase uvnitr funkce i s kontrolama, ale prozmenu ho nepouzijes (a ani nikdy nezavres)...

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
20. 10. 2013   #7
-
0
-

#6 KIIV
tak ja som potom jeleň z toho..neviem ako to spraviť..určite je to jednoduché len mne to nedôjde 

Nahlásit jako SPAM
IP: 178.253.136.–
KIIV+42
God of flame
20. 10. 2013   #8
-
0
-

   

    FILE*f;
    f=fopen("SUMA.TXT","r");
    otvor_subor();

// zmen na:

    FILE* f = otvor_subor();

otevres to ve funkci, z funkce to vracis - ale musis si to taky nekam ulozit

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV+42
God of flame
20. 10. 2013   #9
-
0
-

a pak jeste pravdepodobe narazis na jeden limit realnych cisel.... ikdyz tam budes mit sumu presne stejnou, tak pomoci vypoctu a ruznejch reprezentacnich chyb, se ti muze stat, ze cisla budou jen lehce rozdilne a nedostanes tudiz spravnej vysledek... realne cisla se musi obvykle srovnavat s nejakym rozsahem ... treba ze je cislo v rozsahu sucet-0.00001 a sucet+0.00001 ... u floatu bys na to mozna narazil i pri  2.0 == (1.999+0.001) a podobne

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
20. 10. 2013   #10
-
0
-

#8 KIIV
jasné, že to bolo jednoduché..aký som ja tupý..Ďakujem :)

Nahlásit jako SPAM
IP: 178.253.136.–
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, 63 hostů

Podobná vlákna

Problem s funkciou execve — založil Payne

Problem s VS C# — založil Mrakoplas

Moderátoři diskuze

 

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