Anonymní profil Siggi – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Siggi – Programujte.comAnonymní profil Siggi – Programujte.com

 

Příspěvky odeslané z IP adresy 147.251.213.–

C / C++ › Zásobník
22. 4. 2015   #201644

Ok děkuji za rady, ale na příspěvek č.7 bych sám asi nikdy nepřišel.

C / C++ › Zásobník
21. 4. 2015   #201632

#2 ondrej39
Díky moc za video, jsem nečekal, že si dáš tu práci a nahraješ rovnou video :).

Siggi
C / C++ › Práce se soubory v C
15. 12. 2014   #197292

Tak učitel odvolal psání toho největšího znaku, takže už to nemusím dělat, nicméně stejnak jsem nebyl schopen to udělat. Kdyby byl někdo hodný a ukázal mi ten kód měl vypadat; byl by moc hodný.

Dneska jsem odeslal ten úkol učiteli, tak uvidím.

Siggi
C / C++ › Práce se soubory v C
11. 12. 2014   #197201

#13 Michal 

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

int main(void)
{
    int kontrolaPismen;
    char pismenoAbecedy;

    printf("3.domaci ukol\nKolik chcete pismen z abecedy? (4-7): ");

    while((kontrolaPismen < 4) || (kontrolaPismen > 7)){
        scanf("%d", &kontrolaPismen);
    }
    char znaky[kontrolaPismen];

    printf("Ted zadejte %d znaku: ", kontrolaPismen);

    for(int i = 0; i < kontrolaPismen; i++){
        do{
            scanf("%c", &pismenoAbecedy);
            while((pismenoAbecedy < 'a') || (pismenoAbecedy > 'z')){
                scanf("%c", &pismenoAbecedy);
            }
        }while(NULL != strchr(znaky,pismenoAbecedy));
        znaky[i] = pismenoAbecedy;
    }

    FILE *eng;
    eng = fopen("eng.txt", "r");

    if(eng == NULL){
        printf("Error: Zadany soubor neexistuje.");
        return 1;
    }

    char slovaVSouboru[25], pozpatku[25], opakujiciPismeno;
    int shodaPismene = 0;
    printf("\nSlovo -> Pocet pismen -> Odzadu -> Nejvic se opakujici pismeno\n\n");

    do{
        fscanf(eng, "%s", slovaVSouboru);
        for(int i = 0; i < kontrolaPismen; i++){
            if(strchr(slovaVSouboru,znaky[i]) != NULL)
                shodaPismene++;
        }

        if(shodaPismene == kontrolaPismen){
            int pocetPismen = strlen(slovaVSouboru);
            for(int i = 0; i < pocetPismen; i++){
                pozpatku[i] = slovaVSouboru[pocetPismen-i-1];
            }
            pozpatku[pocetPismen] = '\0';

            printf("%20s -> %2d -> %20s -> %c\n", slovaVSouboru, pocetPismen, pozpatku, opakujiciPismeno);
        }

        shodaPismene = 0;
    }while(feof(eng) == NULL);

    fclose(eng);

    puts("");
    return 0;
}

Ten feof budu muset změnit na eof, bo tam mám warning.

Siggi
C / C++ › Práce se soubory v C
11. 12. 2014   #197176

Tak jsem zjistil, že fgets bere i bílý znak do paměti, nebo-li u mě enter, ale místo toho fscanf pracuje stejně, ale bílý znak neuchovává. Takže už mi to vypisuje krásně na řádek.

Teď se poprat s posledním a to spočítat a vyhodnotit nejvíc opakující se písmeno. Kdyby to bylo číslo, tak je
to mnohem jednodušší.
Nějaký nápad, jak na to?

Siggi
C / C++ › Práce se soubory v C
11. 12. 2014   #197161

Nene já vím proč anglická abeceda, to už jsem jen ukazoval na fakt, že to správně pracuje.
Díky za vysvětlení těch dvou řádků, ale víc mě trápí ten příspěvek č. 7.

Siggi
C / C++ › Práce se soubory v C
10. 12. 2014   #197154

   

    FILE *eng;
    eng = fopen("eng.txt", "r");

    if(eng == NULL){
        printf("Error: Zadany soubor neexistuje.");
        return 1;
    }
    char slovaVSouboru[25], pozpatku[25], opakujiciPismeno;
    int shodaPismene = 0;
    puts("");
    do{
        fgets(slovaVSouboru,25,eng);
        for(int i = 0; i < kontrolaPismen; i++){
            if(strchr(slovaVSouboru,znaky[i]) != NULL)
                shodaPismene++;
        }

        if(shodaPismene == kontrolaPismen){
            int pocetPismen = strlen(slovaVSouboru);
            for(int i = 0; i < pocetPismen; i++){
                pozpatku[i] = slovaVSouboru[pocetPismen-i-1];
            }
            pozpatku[pocetPismen] = '\0';

            printf("Slovo: %s, ma %d pismen, odzadu %s, nejvic opakujici pismeno %c\n", slovaVSouboru, pocetPismen,
                    pozpatku, opakujiciPismeno);
        }
        shodaPismene = 0;
    }while(feof(eng) == NULL); //TADY MAM WARNING (comparison between pointer and 	integer [enabled by default])

    fclose(eng);

Připojen obrázek.

Přitom to má být vše na jednom řádku: slovo, počet, odzadu a opak. písmeno
    strlen mi taky počítá o znak navíc až u toho poslední, tam počítá správně

A stím počítáním nejvíc opakujícího písmene zatím taky nějak nevím.

Jinak pokud by šel ten kód nějak z jednodušit, jestli to nemám nějak moc krkolomně složité.

Siggi
C / C++ › Práce se soubory v C
10. 12. 2014   #197125

Tak to ověření mám, jen by mě zajímalo načpak tam jsou dva řádky:

znaky[0] = 0x00; a znaky[i+1] = 0;   ==  když jsem je zkoušel zakomentovat, fungovalo mi to stejně.

Bralo mi to jen první znak, který nebyl daný + ignorovalo všechny znaky krom anglické abecedy.

    int kontrolaPismen;
    char pismenoAbecedy;

    printf("3.domaci ukol\nKolik chcete pismen z abecedy? (4-7): ");

    while((kontrolaPismen < 4) || (kontrolaPismen > 7)){
        scanf("%d", &kontrolaPismen);
    }
    char znaky[kontrolaPismen];
    //znaky[0] = 0x00;
    printf("Ted zadejte %d znaku: ", kontrolaPismen);

    for(int i = 0; i < kontrolaPismen; i++){
        do{
            scanf("%c", &pismenoAbecedy);
            while((pismenoAbecedy < 'a') || (pismenoAbecedy > 'z')){
                scanf("%c", &pismenoAbecedy);
            }
        }while(NULL != strchr(znaky,pismenoAbecedy));
        znaky[i] = pismenoAbecedy;
       // znaky[i+1] = 0;
    }
Siggi
C / C++ › Práce se soubory v C
10. 12. 2014   #197116

   

for(int i = 0; i < kontrolaPismen; i++){
	for(int j = 0; j < i; j++){
		if(pismeno[i] != pismeno[j]){
			scanf("%c", &pismeno[i]);
     			while((pismeno[i] < 'a') || (pismeno[i] > 'z')){
     				scanf("%c", &pismeno[i]);
			}
		}
     	}
}

Zkoušel jsem něco takového, ale to pak mi nebere první znak, protože tam je ta podmínka a když dám for j = 1, tak to hází náhodný znak, protože ho ještě nevím.

Těch cyklů je tam tolik, že se v tom pomalu ztrácím. A ukládám to jako znaky a ne řetězec.

Siggi
C / C++ › Práce se soubory v C
10. 12. 2014   #197111

V texťáku to je oddělené jen entrem bez teček nebo čárek. Takže ty slova jsou pod sebou.

Mohl bys uvést malý příklad jakto myslíš? 

Siggi
C / C++ › Práce se soubory v C
9. 12. 2014   #197104

Zdravím, mám úkol do prog. v jazyce C a tentokrát jsem totálně beznadějný.

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

int main(void)
{
    int kontrolaPismen;

    printf("3.domaci ukol\nKolik chcete pismen z abecedy? (4-7): ");

    while((kontrolaPismen < 4) || (kontrolaPismen > 7)){
        scanf("%d", &kontrolaPismen);
    }
    char pismeno[kontrolaPismen];

    for(int i = 0; i < kontrolaPismen; i++){
        scanf("%c", &pismeno[i]);
        while((pismeno[i] < 'a') || (pismeno[i] > 'z')){
            scanf("%c", &pismeno[i]);
        }
    }

    FILE *eng;
    eng = fopen("eng.txt", "r");

    if(eng == NULL){
        printf("Error: Zadany soubor neexistuje.");
        return 1;
    }
    char slovaVSouboru[50];

    while(fscanf(eng,"%49s", slovaVSouboru) != EOF){
        printf("%s ", slovaVSouboru);

    }

    fclose(eng);


    puts("");
    return 0;
}

Uživatel zadá 4 - 7 pismen abecedy, to mám. Ale za prvé nevím jak to kontrolovat, aby se neopakovali.

Zkoušel jsem to přes 2cykly for, ale bohužel jsem se s tím nepopral. To není ten hlavní problém.

Hlavní je, že mám otevřít soubor(mám) a v tom jsou slova a jsou jich tam stovky slov. 

Problém začíná, kdy po mně chtějí, abych bral slovo po slově a kontroloval, jestli obsahuje všechny písmena, které jsme zadali na začátku. Pak s těma slovy, mám dělat další hokusy pokusy, ale to bych snad zvládl už sám.

Abych to zhrnul. Nevím jak vzít to slovo a rozsekat ho na písmena a kontrolovat ty písmena, či obsahuje.

Někdo radil přes dynamické pole. Koukal jsem na net, ale nic moc.

Pokud vám to není jasné, tak tu je zadání: 

Užívateľ zadá na štandardný vstup 4 až 7 rôznych písmen abecedy. Program testuje ich počet aj rôznosť.

Následne program určí všetky slová zo súboru, ktoré obsahujú všetky zadané písmena. Pre každé takéto slovo vypíše:

slovo

počet písmen slova

slovo odzadu

písmeno, ktoré je v slove obsiahnuté najviackrát (ak je takýchto písmen viac, vypíše ľubovoľné z nich)

---------------> nechci, abyste to za mě dělali, ale chci nakopnout, jak na to. Děkuji za váš čas.

 

 

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