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 15. 02. 2012 14:54

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Hledání půlením intervalu

Ahoj, nějak jsem se zamotal do následujícího příkladu:
je to rekurzivní hledání

Code:

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

int puleniIntervalu(int cisla[], int a, int b, int hledane) {
    if(hledane < cisla[(a + b) / 2])
        puleni(cisla, a, (a + b) / 2, hledane);
    if(hledane > cisla[(a + b) / 2])
        puleni(cisla, (a + b) / 2, b, hledane);
    if(a == b)
        return b;
}

int main(){
   int p[11];
   int i;

   for (i=0; i<11; i++)
      p[i] = i*i;

   for (i=0; i<11; i++)
      printf("Cislo %i se nachazi na indexu: %i\n", i*i, puleniIntervalu(p,0,10, i*i));

   return 0;
}

je to jednoduchý příklad, porovnávám hledané číslo s prostředkem pole, dokud mi v poli nezůstane jen ten jeden hledaný prvek (lim. podmínka), pokud je číslo menší než střed tak hledám v intervalu od 0 do středu a opačně, ale nějak to blbne, určitě to bude nějaká hloupá chyba

Díky moc


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

  • (téma jako vyřešené označil(a) gladiator01)

#2 15. 02. 2012 15:14

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Re: Hledání půlením intervalu

tak jsem to částečně vyřešil:

Code:

int puleniIntervalu(int cisla[], int a, int b, int hledane) {
    if(hledane < cisla[(a + b) / 2])
        return puleni(cisla, a, (a + b) / 2, hledane);
    if(hledane > cisla[(a + b) / 2])
        return puleni(cisla, (a + b) / 2, b, hledane);
    if(hledane == cisla[(a + b) / 2])
        return (a + b) / 2;
}

to je upravená funkce puleniIntervalu, která už dělá co má, ale nechce mi to "najít" i poslední prvek, vypíše všechny až na poslední a pak program přestane reagovat, nevíte někdo co s tím


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

 

#3 15. 02. 2012 18:04 — Editoval gladiator01 (15. 02. 2012 18:06)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Hledání půlením intervalu

Kdyby jsi to zkoušel ladit, tak by jsi zjistil, že to píše chyba segmentace (zápis/čtení z nepovolené části paměti)

printf("Cislo %i se nachazi na indexu: %i\n", i*i, puleniIntervalu(p,0,11, i*i));


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#4 15. 02. 2012 18:28

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Re: Hledání půlením intervalu

↑ gladiator01:díky moc, zase jsi mi pomohla :)


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson