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

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

 

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

Hanule
C / C++ › Načítání souboru do struktury
20. 12. 2013   #185501

#5 Hanule
Jak udělat uložení právě té části tokenu do struktury? takhle se mi to ukládá nějak chaoticky.

    char* str = (char *)malloc(sizeof(char)* 10);
    char* tok;
    while((c = fgetc(f)) !=  EOF)
    {
        fgets(str,"%s",f);      //nacte radek
        tok = strtok(str," ");  //rozdeli podle mezer
        for(int i = 0; i < MAX; i++)
        {
            while(tok != NULL)
            {
                printf("%s\n",tok);
                car[i].id = atoi(tok);
                strcpy(car[i].znacka,tok);
                strcpy(car[i].model,tok);
                strcpy(car[i].barva,tok);
                car[i].km = atoi(tok);
                car[i].objem = atoi(tok);
                car[i].cena = atoi(tok);


                tok = strtok(NULL," ");
            }
        }
    }
    puts("");
Hanule
C / C++ › Načítání souboru do struktury
20. 12. 2013   #185497

#4 hlucheucho
Tak mě se to pořád nedaří. Udělala jsem toto. Ale nedaří se mi uložit jednotlivé tokeny do položek struktury.

A nevím, co by měla být podmínka foru. :(

char* str = (char *)malloc(sizeof(char)* 10);	//alokace pameti
    char* tok;					//pomocny string
    while((c = fgetc(f)) !=  EOF)
    {
        fgets(str,"%s",f);      //nacte radek
        tok = strtok(str," ");  //rozdeli podle mezer
        for(int i = 0; i < ???; i++)
        {
            while(tok != NULL)
            {
               
                car[i].znacka = tok;		//???
                printf("%s",car[0].znacka);
                tok = strtok(NULL," ");
            }
        }
    }
Hanule
C / C++ › Načítání souboru do struktury
19. 12. 2013   #185487

#2 hlucheucho
A jak se tam potom udělá "přeskok" na další řádek?

Chápu dobře, že bych si udělala pole charů, do kterého bych uložila jeden řádek, ten potom zparsovala podle mezer a jednotlivé části iuložila do struktury. Ale co s dalšími řádky?

Hanule
C / C++ › Načítání souboru do struktury
19. 12. 2013   #185485

Dobrý den, načítán ze souboru txt, který má tuto strukturu, informace o jednotlivých autech jsou na řádních jednotlivých

<int - id><string - Znacka><string - Model><string - Barva><int - Pocet km><float-objem><int - cena>

např: 3 Fiat Panda ruzova 3454422 1,4 98765

Moje načítání ze souboru:

struktura je:

typedef struct autobazar    //struktura
{
    int id;
    char znacka[100];
    char model[100];
    char barva[100];
    int km;
    float objem;
    int cena;
} bazar;


a v mainu  vytvořené pole struktur:  

 bazar car[100];

 soubor je otevřen už otevřen a načítám takto:

int i = 0; 
while((c = fgetc(f)) !=  EOF)
    {
        while(fgetc(f)!='\n')
        {
            fscanf(f, "%d %99s %99s %99s %d %f %d", &car[i].id, &car[i].znacka, &car[i].model, &car[i].barva, &car[i].km,
                   &car[i].objem, &car[i].cena);
                  i++;
        }
    }

bohužel, při kontrolním výpisu potom např.

printf("%d",car[1].id)

to nevypisuje to co má, takže mám pravděpodobně někde chybu v samotném načítání. Bohužel nemohu přijít na to kde.

Děkuji za veškeré rady

Hanule
C / C++ › Dělení matice
6. 12. 2013   #184837

#2 paya
Má to vytvořit pole o velikosti n. Dynamická alokace mě nenapadla, já si ale myslím, že tam budu mít chybu někde v té rekurzivní funkci, respektive úplně špatně ten algoritmus.

Má to dělal toto:
Pre matice rozmeru 1 x 1 alebo 0 x 0: f(M) = 0

Pre matice romzeru 2 x 2: f(M) = M[0][0] * M[1][1] - M[0][1]*M[1][0], tj. nasobok prvkov na hlavnej diagonale minus nasobok prvkov na vedlajsej diagonale

Pre hocijaky iny rozmer: f(M) = sucet jednotlivych prvkov na hlavnej diagonale vynasobeny (kazdy jeden diagonalny prvok osobitne) hodnotou funkcie f pre stvorcovu maticu zo zvysnych prvkov napravo a dole (bez aktualneho riadku/stlpca matice) od daneho diagonalneho prvku
 

Hanule
C / C++ › Dělení matice
5. 12. 2013   #184831

Dobrý den,

mám vytvořit program, který bude pro matici


| 1 2 3 4 5 |

| 6 7 8 9 0 |

| 2 3 4 5 1 |

| 7 8 9 0 6 |

| 5 3 2 1 4 |

počítat její hodnotu a to takto:

f(M) = 1*f(M1) + 7*f(M2) + 4*f(M3) + 0*f(M4) + 4*f(M5)
 v případě, že matice bude 0x0, nebo 1x1 bude rekurze vracet 0, pokud 2x2, tak hodnotu prvků na hlavní-vedlejší diagonále.

Můj kód vypadá takto:

int main()
{
    int n;
    printf("Zadej rozmer matice:");
    scanf("%d",&n);
//osetreni vstupu
    if ( n < 0 )
    {
        printf("Spatne zadany rozmer.");
        return -1;
    }
    int mat[n][n];
    int p;

    nullMat(n,mat);	//nulovani matice	
    scanMat(n,mat);	//nacitani matice
    //print(n,mat);

    //volani rekurzivni funkce
    printf("Funkce ma hodnotu: %d\n",rekurze(n,mat));


    return 0;
}


Funkce pro 2x2:

int dvaMat(int n, int mat[n][n])
{
    int soucinh = 1;
    int soucinv = 1;
    for( int i = (n-2); i < n; i++)
    {
        for( int j = (n-2); j < n; j++)
        {

            if( i == j) soucinh *= mat[i][j];
            if( (i == 1 && j == 0) || (i == 0 && j == 1))soucinv *=mat[i][j];
        }
    }

    return (soucinh-soucinv);

}

A funkce rekurzivni:

int rekurze(int n, int mat[n][n])
{
    int soucin = 0;
    if( n <= 1) return 0;
    if( n == 2) return dvaMat(n,mat);

    for( int i = 0; i < n; i++)
    {
        int subMat[n-1][n-1];
        for(int k = 0; k < n; k++)
        {
            for(int j = 0; j < n; j++)
            {
                subMat[k][j] = mat[k+1][j+1];

            }
        }
        soucin += mat[i][i] * rekurze((n-k-1), subMat);

    }
    return soucin;
}

Bohužel mi tento algoritmus funguje pro matice 3x3, kdy je jen jedno "dělení" submatice, ale pro větší už nepočítá správně, nedaří se mi nějak uchovat výsledek rekurzivního součtu matice n-1.

Poradili byste? Děkuji

Hanule
Java › Problém se spuštěním přes cmd
10. 9. 2013   #181255

Už vyřešeno! Přehlédla jsem se a nedočetla jsem, že tam musí být java Hello pro spuštění. Omlouvám se...

Hanule
Java › Problém se spuštěním přes cmd
10. 9. 2013   #181254

Dobrý den, začínám s programováním v Javě a nainstalovala jsem si prostředí BlueJ. A chtěla bych soubory spouštět přes příkazovou řádku (pokud "klikám" v programu, tak to spustit jde).

Nastavila jsem si proměnnou PATH v proměnném prostředí.

a po příkazu v cmd javac C:\cesta_k_souboru\Hello.java

se mi neobjeví žádná chybová hláška, žádné hlášení, ale také se mi soubor nespustí.

Poradíte co by mohlo být špatně?

Hanule
C / C++ › Načítání ze souboru a ulozen…
15. 12. 2012   #168929

Ahoj, potřebovala bych načítat ze souboru a poté uložit do pole, bohužel mi to nějak nefunguje.


typedef struct Adresat
{
    char jmeno[30];
    char mesto[20];
    long int rcislo;
} Adresat;

typedef struct Darecky
{
   
    char nazev[20];
    unsigned int cena;
    char stav;
    Adresat informace;
} Darek;


int main()
{
    FILE* soubor1;
    soubor1=fopen(VSTUP,"r");
    if (soubor1==NULL)
    {
        fprintf(stderr,"chybny vystup\n");
        return 1;
    }
//program nacita ze souboru a ve formě struktur uloží do vhodného pole
char c;
int j=0;
int i=0;
//vytvoreni pole typu struktura Darek
Darek pole[i][j]
int p;
//zjistim pocet darku v souboru a ulozim do promenne p
for (int i=1; i!=2;i++)
{
    fscanf(soubor1, "%d", &p);
    printf("%d", p);
}
puts("");
j=p;
printf("%d", j);
//j=0, p=6;

//nacita ze souboru po znaku

while(!feof(soubor1))
 {
     fscanf(soubor1, "%c", &c);
     if(isspace(c)) puts("");
     else strcpy(pole,c);
  }


    return 0;
}

V souboru jsou ulozeny informace o darku vzdy oddelené mezerou. Takže jsem pole udelala tak, aby kazdý prvek struktury mel jeden radek. A vzdycky, kdyz narazi na mezeru, tak by skocil na dalsi radek. Ale někde mám v syntaxi asi chybu.

Děkuju za pomoc

Hanule
C / C++ › Bílé znaky v souboru
8. 12. 2012   #168409

#9 KIIV
jj to vím o isspace.

To vlákno, jsem ale nenašla...:(

Neporadil by jsi mi nějakej návod na to "nahrazeni posloupnosti" ?

Hanule
C / C++ › Bílé znaky v souboru
8. 12. 2012   #168405

#7 KIIV
Mno já teď zkouším něco s tím stavem. Ale moc mě nic nenapada...

Zkouším přidat funkci, která by měla vyhodnotit, jestli jde o bílý znak a pak to na to snad nějak navážu.

Proč to není dobrý nápad?

Hanule
C / C++ › Bílé znaky v souboru
8. 12. 2012   #168402

#4 KIIV
Aha...tak proto to padalo. Já už jsem z toho trošku zblblá. Mno ale stejně mi nějak nefunguje to "ignorování" posloupnosti bílých znaků...

Já jsem to chtěla udělat tak, že pokud narazí na bílý znak, tak ověří, jestli vedle něj je bílý znak a pokud ano, tak zapíše jenom jednu mezeru. ale nějak to nefunguje tento postup.

Hanule
C / C++ › Bílé znaky v souboru
8. 12. 2012   #168400

#2 KIIV
Mno já když jsem tam dala

fscanf(soubor1, "%c",c);
       fprintf(soubor2, "%c",c);

tak mě padal program, i když jsem měla podmínku feof. Tak jsem to zkoušel %1s.

Hm? A jak bych to měla srovnat? Mě jinej způsob nenapadl...

Hanule
C / C++ › Bílé znaky v souboru
8. 12. 2012   #168396

Ahoj, potřebuji udělat program, který načítá ze vstupního souboru (soubor1) znaky, které obsahují i posloupnosti bílých znaků. Program má načíst ze souboru1 a zapsat do vystupu (soubor2) text tak, že kde najde posloupnost bílých znaků, zapíše jenom jeden.

Příklad vstupu:                                                 Příklad výstupu:

Toto je                                                               Toto je prvni veta.
prvni  veta. A toto                                                 Toto je druha veta.
je
         druha
       veta.

Můj kód je takový (otevření a zavreni souboru funguje, ale část, která má zpracovat text už ne)

   char c[2];
    //nacte znak a zapise ho do druhoho souboru
    while (!feof(soubor1))
    {
        fscanf(soubor1, "%1s",c);
        //kdyz narazi na tecku, odradkuje
        if(c=='.') fprintf(soubor2,"\n");
        else fprintf(soubor2, "%s",c);
        if(c==' ')
        { //kdyz je nasledujici znak mezera, zapise jen jednu
            if((c+1)==' ') fprintf(soubor2, " ");
        }
        

Poradíte mi prosím proč nepracuje tak jak má?

Hanule
C / C++ › Rozdělení pole podle znaku
23. 11. 2012   #167453

Tady je kod:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int strChrPos(const char *cil, int c)
{
    char *p;

    p=strchr(cil,(char)c);
    if (p) return p-cil;
    else return -1;
}


int csvParse(const char str[], char delimiter, char vals[250][250])
{
    size_t pozice;
    int pocet;
    int i=0;

    char cil[250];
    //zkopiruje øetìzec aby s ním mohl pracovat
    strcpy(cil,str);

    //celkový poèet delimiterù
    int delka = strlen(cil);
    printf("Delka: %d",delka);
    puts("");

    //kolik delimiteru
    while (i<=delka)
    {
        i++;
        if (cil[i]==delimiter) pocet++;
    }
    printf("Celkem del: %d",pocet);
    puts("");
    char znak=';';
    //pozice prvního delimiteru
    pozice=strChrPos(cil,znak);
    printf("Prvni vyskyt znaku '%c' v retezci \"%s\" je na pozici %d\n\n",znak,cil,pozice);

   //val[0][0]
strcpy(vals,cil);
   char p;
   for (int i=0;i<delka;i++)
   {
       for(int j=0;j<delka;j++)
       {
          p=vals[i][j];
          //vkladej znaky do vals
          vals[i][j]=p;
          printf("%c",vals);

          //kdyz bude p=delimiter, odskoc na dalsi radek
          if(cil[i]==delimiter) {printf("\n");}
       }
   }

   return 0;

}

int main()
{   int i=250; int j=250;
    char values [250][250];
    int count = csvParse("10;ab;30",';',values);
    for (int i=0; i<count; i++)
    {
        printf("%s\n",values[i]);
    }
    return 0;

}

Hanule
C / C++ › Rozdělení pole podle znaku
23. 11. 2012   #167450

#14 KIIV
Aha...toho jsem si nevsimla...Mno ale stejně to nepomohlo.

Hanule
C / C++ › Prazdny radek a funkce pro r…
23. 11. 2012   #167439

Pardon, to mělo být do jiného vlákna, ale nevím jak příspěvek smazat...

Hanule
C / C++ › Rozdělení pole podle znaku
23. 11. 2012   #167438

Tak jsem se snažila to nějak splácat dohromady, ale moc se mi nedaří...Vytvořila jsem si pozici, na které se bude delimiter nacházet, delku retezce, který se má rozdělit a celkový počet delimiterů v řetězci. A teď mám naplnovat dvourozměrné pole těmi rozdělenými řetězci. Takže jestli jsem to dobe pochopila a "naplánovala", tak budu kopírovat znaky do výstupního Pole, a až narazí ten cyklus na delimiter, tak odřádkuje na další řádek.

A tím by se mi mělo vyplnit pole  a poté mi vrátí hodnotu, kolik "řádků" jsem zaplnila.

Teď mi ovšem nastává problém jak to udělat.

char p;
   for (int i=0;i<delka;i++)
   {
       for(int j=0;i<delka;j++)
       {
          p=cil[i];
          //vkladej znaky do vals
          vals[i][j]=p;
          printf("%c",vals);

          //kdyz bude p=delimiter, odskoc na dalsi radek
          if(cil[i]==delimiter) j++;
       }
   }

toto mi nefunguje...a nevím co s tím...zaprvé ten cyklus nekoncí, i když je delka=8; a pak to vypisuje uplně špatný znak pořád dokola.

Hanule
C / C++ › Prazdny radek a funkce pro r…
23. 11. 2012   #167437

Tak jsem se snažila to nějak splácat dohromady, ale moc se mi nedaří...Vytvořila jsem si pozici, na které se bude delimiter nacházet, delku retezce, který se má rozdělit a celkový počet delimiterů v řetězci. A teď mám naplnovat dvourozměrné pole těmi rozdělenými řetězci. Takže jestli jsem to dobe pochopila a "naplánovala", tak budu kopírovat znaky do výstupního Pole, a až narazí ten cyklus na delimiter, tak odřádkuje na další řádek.

A tím by se mi mělo vyplnit pole  a poté mi vrátí hodnotu, kolik "řádků" jsem zaplnila.

Teď mi ovšem nastává problém jak to udělat.

char p;
   for (int i=0;i<delka;i++)
   {
       for(int j=0;i<delka;j++)
       {
          p=cil[i];
          //vkladej znaky do vals
          vals[i][j]=p;
          printf("%c",vals);

          //kdyz bude p=delimiter, odskoc na dalsi radek
          if(cil[i]==delimiter) j++;
       }
   }

toto mi nefunguje...a nevím co s tím...zaprvé ten cyklus nekoncí, i když je delka=8; a pak to vypisuje uplně špatný znak pořád dokola.

 

 

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