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
Stránky: 1
Ahoj, nějak jsem se zamotal do následujícího příkladu:
je to rekurzivní hledání
#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
Offline
tak jsem to částečně vyřešil:
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
Offline

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));
Offline
↑ gladiator01:díky moc, zase jsi mi pomohla :)
Offline
Stránky: 1