Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 13. 12. 2008 18:53

Shaker
Zelenáč
Příspěvky: 16
Reputace:   
 

4 ukoly v c

1) 6 druhů třídění - rychlosti, nalezení nejrychlejšího, vkládání čísel, rozhození čísel, autom. generování čísel

2) Strom (každý uzel konečný počet větví), náhodné generování čísel, odebírání, přídávání

3) Nechá generovat čísla (zadá) a zadáme kolik chceme najít maxim

4) Obousměrný seznam - vkládání, odebirání, přehazování prvků


Pomohl by někdo prosím jak by to mělo být naprogramované v C jazyku?Děkuji...

Offline

 

#2 13. 12. 2008 19:04

Lishaak
Veterán
Místo: Praha
Příspěvky: 763
Reputace:   
Web
 

Re: 4 ukoly v c

Prepokladam, ze toto je asi nejaky rozsahlejsi domaci ukol. Neveril bych tomu, ze nekdo bude ochoten to sem cele naprogramvat. Zkus se zeptat na nejakou konkretni cast, ktere nerozumis, nebo nevis, jak by se mela naprogramovat.


Nothing in the world that's worth having comes easy.
Always do what you are most afraid of.

Offline

 

#3 13. 12. 2008 19:12

Shaker
Zelenáč
Příspěvky: 16
Reputace:   
 

Re: 4 ukoly v c

Stačilo by mi ukázat jak udělat tu 3, tu bych mohl pak nějak spatlat.A potřeboval bych ještě jeden ale u ostatních si nejsem vůbec jistej jak na to...

Offline

 

#4 13. 12. 2008 19:21 — Editoval Lishaak (13. 12. 2008 19:21)

Lishaak
Veterán
Místo: Praha
Příspěvky: 763
Reputace:   
Web
 

Re: 4 ukoly v c

Ta trojka je dost nejasne napsana. Je to mysleno tak, ze uzivatel zada programu, kolik ma vygenerovat nahodnych cisel a pak zada pocet maxim, ktere chce vratit? Kdyz se rekne, ze chci 'k' maxim, tak se mysli 'k' nejvetsich prvku, je to tak? Jestlize ano, jsou v podstate dve moznost.

Bud to pole k-krat projdu s tim, ze pri kazdem pruchodu z nej vyhodim aktualni maximum, a nebo to cele sestupne setridim a vratim 'k' prvnich prvku.


Nothing in the world that's worth having comes easy.
Always do what you are most afraid of.

Offline

 

#5 13. 12. 2008 19:52

Lukee
Administrátor
Místo: Opava
Příspěvky: 1850
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: 4 ukoly v c

↑ Shaker:
Konderla?

1) http://blog.codebeach.com/2008/09/sorti … -in-c.html

2) Prostuduj tohle http://en.wikipedia.org/wiki/Binary_search_tree nebo podobný příklad

3) Nejjednodušší postup je seřadit pole podle nějakého algoritmu a vypsat prvních n čísel.

4) Jednosměrný seznam: http://www.linuxsoft.cz/article.php?id_article=868  Obousměrný si buď vygoogli nebo napiš podle tohoto, princip je stejný.


2+2=4

Offline

 

#6 20. 12. 2008 17:38

Shaker
Zelenáč
Příspěvky: 16
Reputace:   
 

Re: 4 ukoly v c

Ano Konderla potreboval bych pomoct s tim prvnim nevim vubec jak by to melo vypadat.

Program na sest druhu trideni
-menu    -
    -projdou vsechny 6 trideni,zmeri casy a zjisti ktere bylo nejrychlejsi
    -zadavani pole-muze uzivatel zadat nebo automaticky
    -odebirani-totez....
    -rozhazeni pole

s timhle bych potrebovla pomoct

Offline

 

#7 21. 12. 2008 16:36

Shaker
Zelenáč
Příspěvky: 16
Reputace:   
 

Re: 4 ukoly v c

Pleas helpne mi s tim nekdo?

Offline

 

#8 21. 12. 2008 17:26

Lukee
Administrátor
Místo: Opava
Příspěvky: 1850
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: 4 ukoly v c

↑ Shaker:
A s kterou konkrétní částí programu máš problém? Pochybuji, že ti tady někdo bude psát celý program… Takže co konkrétně ti nejde? Co už jsi zkusil naprogramovat a jak to dopadlo?


2+2=4

Offline

 

#9 21. 12. 2008 18:29 — Editoval Shaker (21. 12. 2008 18:30)

Shaker
Zelenáč
Příspěvky: 16
Reputace:   
 

Re: 4 ukoly v c

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


void BubbleSort(int a[], int array_size)
{
     int i, j, temp;
     for (i = 0; i < (array_size - 1); ++i)
     {
          for (j = 0; j < array_size - 1 - i; ++j )
          {
               if (a[j] > a[j+1])
               {
                    temp = a[j+1];
                    a[j+1] = a[j];
                    a[j] = temp;
               }
          }
     }
}

void SelectionSort(int a[], int array_size)
{
     int i;
     for (i = 0; i < array_size - 1; ++i)
     {
          int j, min, temp;
          min = i;
          for (j = i+1; j < array_size; ++j)
          {
               if (a[j] < a[min])
                    min = j;
          }

          temp = a[i];
          a[i] = a[min];
          a[min] = temp;
     }
}

void InsertionSort(int a[], int array_size)
{
     int i, j, index;
     for (i = 1; i < array_size; ++i)
     {
          index = a[i];
          for (j = i; j > 0 && a[j-1] > index; j--)
               a[j] = a[j-1];

          a[j] = index;
     }
}

void HeapSort(int a[], int root, int bottom)
{
     int maxchild, temp, child;
     while (root*2 < bottom)
     {
          child = root * 2 + 1;
          if (child == bottom)
          {
               maxchild = child;
          }
          else
          {
               if (a[child] > a[child + 1])
                    maxchild = child;
               else
                    maxchild = child + 1;
          }

          if (a[root] < a[maxchild])
          {
               temp = a[root];
               a[root] = a[maxchild];
               a[maxchild] = temp;
          }
          else return;

          root = maxchild;
     }
}






1) 6 druhů třídění (dalsi dve nevim...) - mam urcit(s cim si take nevim rady jak by to melo byt naspsano) :

- projdou vsechna trideni, zmeri cas a zjisti ktere bylo nejrychlejsi
-zadavani pole-muze uzivatel zadat nebo automaticky (to mozna jeste nejak dam dohromady)
-odebirani....
-rozhazeni pole

Offline

 

#10 21. 12. 2008 22:04 — Editoval Lishaak (21. 12. 2008 22:04)

Lishaak
Veterán
Místo: Praha
Příspěvky: 763
Reputace:   
Web
 

Re: 4 ukoly v c

Nejobvyklejsi algoritmy, kere doplni tvoji sestici budou nejspis quicksort a mergesort. Dokonce i ceska wikipedie ma o techto algoritmech solidni informace


Nothing in the world that's worth having comes easy.
Always do what you are most afraid of.

Offline

 

#11 25. 12. 2008 19:01 — Editoval wizpal (25. 12. 2008 19:29)

wizpal
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: 4 ukoly v c

1) 6 druhů třídění (dalsi dve nevim...) - mam urcit(s cim si take nevim rady jak by to melo byt naspsano) :

- projdou vsechna trideni, zmeri cas a zjisti ktere bylo nejrychlejsi
-zadavani pole-muze uzivatel zadat nebo automaticky (to mozna jeste nejak dam dohromady)
-odebirani....
-rozhazeni pole


QuickSort:

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

void quickSort(int[], int, int);
int partition(int[], int, int);


int main()
{
    int a[10];
    double start, end;
   
    for(int i = 0; i < 10; i++)
    {
            a[i] = rand() % 9 + 1;           
    }
    putchar('\n');
    putchar('\n');

    start = clock();
    quickSort( a, 0, 10);
    end = clock();

    for(int i = 0; i < 10; i++)
    {           
            printf("%d ", a[i]);
    }   
   
    printf("\n\nDoba behu programu: %lf sec", (end - start) / CLOCKS_PER_SEC);
       
    getchar();
    getchar();

}



void quickSort(int a[], int l, int r)
{
   int j;

   if(l < r)
   {      
       j = partition(a, l, r);
       quickSort(a, l, j - 1);
       quickSort(a, j + 1, r);
   }   
}



int partition(int a[], int l, int r)
{
   int pivot = a[l], t;   
   int i = l;
   int j = r + 1;
       
   while(1)
   {
       do ++i; while(a[i] <= pivot && i <= r);
       do --j; while(a[j] > pivot);
      
       if(i >= j) break;
       t = a[i]; a[i] = a[j]; a[j] = t;
   }
   
   t = a[l]; a[l] = a[j]; a[j] = t;   
   return j;
}


Na měření času máš v C knihovnu time.h, tak se do ní podívej. Jinak takto malé časové intervaly jdou změřit např. makrem CLOCKS_PER_SEC - takže máš nějaký počáteční čas start a koncový end, uděláš rozdíl těchto časů (samozřejmě end - start) a vydělíš to tím makrem. Výše u QuickSortu to měření používám. Ale setřídění 10-ti prvkového pole tímto nezměříš, to je moc rychlé...pak jedině sáhnout po nějaké externí knihovně - na unixových systémech nejspíše gettimeofday.

Zadávání pole - tím myslíš co? Že uživatel zadá délku pole? Nebo že zadá jednotlivé hodnoty? Nebo obojí?

Odebírání pole - opět trochu upřesni, nevím přesně co tím myslíš a nerad bych se rozepisoval o něčem jiném.

Rozházení pole: já bych to realizoval takto (všímej si hlavně fce rozhod):

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

#define MAX 10

#define cisti() while(getchar() != '\n')

void napln_setrid(int *);
void rozhod(int *);

int main()
{
    int pole[10]; 
   
    napln_setrid(pole); 
    rozhod(pole);   
   
    cisti();
    getchar();
    return 0;
}

void napln_setrid(int *pole)
{
    int help, j;
     
    for(int i = 0; i < MAX; i++)
    {
            pole[i] = rand() % 9;           
    }
   
    for(int i = 0; i < MAX - 1; i++)
    {             
           if(pole[i] < pole[i + 1])
           {
                    help = pole[i];
                    pole[i] = pole[i + 1];
                    pole[i + 1] = help;
                   
                    j = i;
                   
                    while(pole[j] > pole[j - 1])
                    {
                                  help = pole[j];
                                  pole[j] = pole[j - 1];
                                  pole[j - 1] = help;
                                 
                                  j--;
                    }                                                                     
           }
    } 
}

void rozhod(int *pole)
{
     int first, second, temp, j = 0;
     
     while(j != 10)
     {
              first = rand() % 9;
              second = rand() %9;
              j++;
             
              temp = pole[first];
              pole[first] = pole[second];
              pole[second] = temp;                         
     }   
}

EDIT: pokud ještě nemáš obousměrně zřetězený seznam (není můj), tak tady: http://paul27.ic.cz/programming/c/spojovy_seznam_2.txt akorát já bych to udělal do fcí a ne takhle prasácky všechno do main, ale vyčíst se to z toho dá, je tam i jakýsi komentář

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson