Forum Apl Inf
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Procvičení učiva 1

2 posters

Goto down

Procvičení učiva 1 Empty Procvičení učiva 1

Příspěvek pro Labonek Karel 15/12/2014, 19:12

Nazdar borci, už jsem se dlouho neozval že? Hele dostal jsem za odměnu 1 úkol na víc z těch procvičení učiva. Nemáte nějakej něgdo hotovej já nestíhám chci se konečně věnovat SCHEME , a nemůžu stihnout vše :-) .

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 15/12/2014, 19:16

Hele zkouším ten "Počet výskytů řetězce v řetězci" :-( . Hele jak nato porovnávat už umím "snad :-) " ale co mi počítá ten výskyt shodných řetězců ???

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro adam.korinek 15/12/2014, 20:34

Tady mam akorat ukol 11.2

Jinak co se tyce te cetnosti to je celkem jednoduche...nebo jako v ramci moznosti jednoduche....Smile

kód:

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

int chance(unsigned int input, unsigned int** coins);

int main(int argc, char** argv)
{
    printf("Exercise 11.2\n");
    unsigned int amount;
    unsigned int* currency = NULL;
    int coins, i;
    printf("Enter a amount: ");
    scanf("%d", &amount);
    coins = chance(amount, &currency);
    printf("Used coins: ");
    for(i = 0; i < coins; i++) {
       if(i != 0) printf(", ");
       printf("%d", currency[i]);
   }
   free(currency);
   currency = NULL;
    return 0;
}

int chance(unsigned int input, unsigned int** currency)
{
    int coins[] = { 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 };
    int size = sizeof(coins) / sizeof(int);
    int i, j = 0;
    for(i = 0; i < size; i++) {
       while(input >= coins[i]) {
          input -= coins[i];
          if(!*currency)
         {
             *currency = (unsigned int*)malloc((j + 1) * sizeof(int));
             *(*currency + j) = coins[i];
         }
          else
         {
             *currency = (unsigned int*)realloc(*currency, (j + 1) * sizeof(int));
             *(*currency + j) = coins[i];
         }
          j++;
      }
   }
    return j;
}


adam.korinek

Poèet pøíspìvkù : 25
Join date : 18. 11. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 16/12/2014, 10:33

Nazdar, nemáš čas mi trochu pomoc s "Počet výskytů řetězce v řetězci" výš za prve musíš... a za druhé .... :-) tlačí mě čas dík.

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro adam.korinek 16/12/2014, 11:37

Tady mas ty vyskyty
Snad to funguje tak jak chteli oni, pac ja se ted nemuzu dostat na to pdf zadani
Kdyztak si z toho neco vem, mas tam i komenty...
PS. Tohle sice neni idealni postup ale je nejjednodussi ale celkem i efektivni....ale ne na pamet:-)

kód:

#include <stdio.h>
#include <string.h> //kvuli strlen

#define BUFFER_SIZE 1024
#define CHARS_SIZE 255
int main(int argc, char **argv)
{
   char buffer[BUFFER_SIZE] = {0};
   char chars[CHARS_SIZE] = {0}; //char ma velikost 255, proto v C nemuzes zadat jiny znak nez char, tedy do velikost 255
   int lenght = 0,i = 0;
   printf("Histogram\n");
   printf("Enter some string: ");
   fgets(buffer,BUFFER_SIZE,stdin);
   lenght = strlen(buffer);
   buffer[lenght- 1] = '\0'; // ukoncovaci znak
   for(; i < lenght; i++) {
      
      //(int)buffer[i] - index pole chars, a zaroven je to char jakozto znak v vstupu, ale kazdy je vlastne asci hodnota 0-255
      //pod indexem (int)buffer[i] navysim pocet vyskytu
      // HOTOVO
      chars[(int)buffer[i]]++;
   }
   for(i = 0; i < CHARS_SIZE ; i++)
   {
      if(chars[i]) printf("Char %c: %d\n",i,chars[i]);
   }
   getchar();
   return 0;
}


adam.korinek

Poèet pøíspìvkù : 25
Join date : 18. 11. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 16/12/2014, 14:16

Znovu mockrát dík !!! mrknu nato :-) .

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 15/1/2015, 15:14

Nazdar kluci, poslední tejden jsem strávil s učebnici jazyka C. A bláhovje si myslel že mám jasno. No tet jsem zkoušel řešit úkol co mám dělat na víc, no a zjistil jsem že mi stále a stále a.... unikaj nějaké souvislosti Shocked   no kdyby jste si někdo našel čas a znovu mi s tím pomohl tak budu moc rád. Jedná se o "procvičení učiva 1"

Procvičované učivo: dynamická alokace paměti, práce s textem, funkce, pole, cykly

Napište v jazyku C funkci int *cetnost(char *text), která určí počet výskytů jednotlivých znaků ve vstupním textovém řetězci text. Funkce pak vrací pole četností znaků, kde i-tý prvek pole odpovídá počtu výskytů i-tého znaku ASCII tabulky. Funkce musí rozpoznávat všechny znaky ASCII tabulky, tedy 256 znaků. Ve funkci main vytvořenou funkci otestujte.

no jestli má někdo čas tak se ozvěte dík !!! Sad

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro adam.korinek 15/1/2015, 15:24

Zdar, mas to ten kod na kousek nad tim co jsi napsal. Akorat jestli chce vsech 256 znaku tak to char pole musi byt unsigned a vsechny chary unsigned...jinak pokud chces, tak ti snad muzu zavolat pres skype jestli to chces vytvetlit nejak lepe...jinak sorry ten program nad tim ma vse. pozna vsech 256 znaku...ozvi se kdyztak

adam.korinek

Poèet pøíspìvkù : 25
Join date : 18. 11. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 15/1/2015, 15:29

hele moc děkuju, skype jsem nepouzíval, ale tet jsem ho nainstaloval jak te najdu Adamů Kořínků je tam víc Smile

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 15/1/2015, 20:27

snad jsem to pochopil Smile takhle jsem to sesmolil:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VEL_ZAD 1024
#define VEL_ASCII 256

int *cetnost(char *text);
char cetnost_c[VEL_ASCII] = {0};

int main()
{
int i, y;
char *x;
char text[MAX_VEL_ZAD] = {0};
printf("zadej retezec ");
fgets(text,MAX_VEL_ZAD,stdin);

x = cetnost(text);

y = strlen(x);
x[y - 1] = '\0';

for (i = 0; i < VEL_ASCII; i++)
if (x[i])
printf("znak: %c zadan: %d-krat\n", i, x[i]);

return 0;
}


int *cetnost(char *text)
{
int velikost = 0;
int i;

velikost = strlen(text);
text[velikost - 1] = '\0';

for (i = 0; i < velikost; i++){
cetnost_c[(int)text[i]]++;

}
return (int)cetnost_c;
}


Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro adam.korinek 15/1/2015, 23:44

Cau
Evaluace tveho kodu...

kód:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VEL_ZAD 1024
#define VEL_ASCII 256

int *cetnost(char *text);
char cetnost_c[VEL_ASCII] = {0};

int main()
{
int i, y;
char *x;
char text[MAX_VEL_ZAD] = {0};
printf("zadej retezec ");
fgets(text,MAX_VEL_ZAD,stdin);

int velikost = strlen(text);
text[velikost - 1] = '\0'; [color=#FF0000]//tady to ma byt[/color]

x = cetnost(text);

y = strlen(x);  [color=#FF0000]//nema to tu co delat[/color]
x[y - 1] = '\0';  [color=#FF0000]//nema to tu co delat[/color]

for (i = 0; i < VEL_ASCII; i++)
if (x[i]) [color=#FF0000] //tohle neni nute, navic kdyz dodjed na 0 znak tak ti ho podminka nevypise[/color]
printf("znak: %c zadan: %d-krat\n", i, x[i]);

return 0;
}


int *cetnost(char *text) [color=#FF0000]//funkce muze byt void, nemusi nic vracet[/color]
{
int velikost = 0;
int i;

velikost = strlen(text);
text[velikost - 1] = '\0'; [color=#FF0000]//tohle nedelej tady ale v main predtim nez posles ten retezec do fce[/color]

for (i = 0; i < velikost; i++){
cetnost_c[(int)text[i]]++;

}
return (int)cetnost_c;  [color=#FF0000]//tohle tu nema byt a stejne mas chybu v pretipovani, nemuzes do navratove hodnoty kterou mas ukazatel na int posilat jenom int...ale jak rikam staci fuknce void[/color]
}


adam.korinek

Poèet pøíspìvkù : 25
Join date : 18. 11. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro adam.korinek 15/1/2015, 23:44

Cau
Evaluace tveho kodu...druhy poksu cervene

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VEL_ZAD 1024
#define VEL_ASCII 256

int *cetnost(char *text);
char cetnost_c[VEL_ASCII] = {0};

int main()
{
int i, y;
char *x;
char text[MAX_VEL_ZAD] = {0};
printf("zadej retezec ");
fgets(text,MAX_VEL_ZAD,stdin);

int velikost = strlen(text);
text[velikost - 1] = '\0'; //tady to ma byt

x = cetnost(text);

y = strlen(x); //nema to tu co delat
x[y - 1] = '\0'; //nema to tu co delat

for (i = 0; i < VEL_ASCII; i++)
if (x[i]) //tohle neni nute, navic kdyz dodjed na 0 znak tak ti ho podminka nevypise
printf("znak: %c zadan: %d-krat\n", i, x[i]);

return 0;
}


int *cetnost(char *text) //funkce muze byt void, nemusi nic vracet
{
int velikost = 0;
int i;

velikost = strlen(text);
text[velikost - 1] = '\0'; //tohle nedelej tady ale v main predtim nez posles ten retezec do fce

for (i = 0; i < velikost; i++){
cetnost_c[(int)text[i]]++;

}
return (int)cetnost_c; //tohle tu nema byt a stejne mas chybu v pretipovani, nemuzes do navratove hodnoty kterou mas ukazatel na int posilat jenom int...ale jak rikam staci fuknce void
}

adam.korinek

Poèet pøíspìvkù : 25
Join date : 18. 11. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 16/1/2015, 11:49

Nazdar děkuji za tvůj čas. Mám pár otázek:

1)Když nebudu měřit velikost textu ve fun. int*cetnost(char*text) tak jak zadám konec při výpočtu četnosti znaků for (i=0;i<než co;i++){.....

2)funkce musi byt *int je to v zadani Shocked
tak jak nato ?

3)podmínka pro tisk (nedavat if (x[i]) )jakou dat aby se tiskly cetnost jen tech zadanejch ??

Dík za vysvětlení a tvůj čas !!!

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Labonek Karel 16/1/2015, 16:18

Nazdar,
trochu opravenej kod co takhle je to lepší ?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VEL_ZAD 1024
#define VEL_ASCII    256

int *cetnost(char *text);


int main()
{
 int i;
 int *x;
 char text[MAX_VEL_ZAD] = {0};
 printf("zadej retezec  ");
 fgets(text,MAX_VEL_ZAD,stdin);

 x = cetnost(text);



 for (i = 0; i < VEL_ASCII; i++)
   if (x[i])
     printf("znak: %c        zadan: %d-krat\n", i, x[i]);

 return 0;
}


int *cetnost(char *text)
{
 int velikost;
 int i;
 int *cetnost_c;


 velikost = strlen(text);   /*zmeri velikost*/
 text[velikost - 1] = '\0'; /*odstrani '\n' a nahradi ho '\0'*/



 cetnost_c = (int *) calloc(velikost, sizeof(int)); /*dynamicke prideleni pameti (+nulovani) s testem neuspechu*/
 if (cetnost_c == NULL){                            /*nulovani mi nefunguje*/
   printf("Malo pameti\n");
   exit(1);
 }

 for (i = 0; i < VEL_ASCII; i++) /*nulovani pameti*/
   cetnost_c[i] = 0;


 for (i = 0; i < velikost - 1; i++){ /*soucet vyskytu*/
   cetnost_c[(int)text[i]]++;

 }

 return cetnost_c;
}


ještě jednou dík že strácíš svuj čas na odpovědi pro mě dík!!!! Smile

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Procvičení učiva 1 Empty Re: Procvičení učiva 1

Příspěvek pro Sponsored content


Sponsored content


Návrat nahoru Goto down

Návrat nahoru


 
Povolení tohoto fóra:
Nemůžete odpovídat na témata v tomto fóru