binaeres teilen (funktions-schreibweise)
-
Hallo erstmal! Hab da ein Problem, da ich ein Programm schreiben soll aber nicht dahinter komme, wie
!
Wertebereich eingeben -> Eingabe von n
Wertebereich=pow(2,n);gesuchte Zahl eingeben:
Ausgabe nach jeder "Teilung", ob gefunden oder nicht!
Bsp: gesuchteZahl=5;
n=4 -> 2^n=16 (=Wertebereich)Programm soll folgendes machen:
gesuchteZahl überprüfun ob größer oder kleiner als 16/2;
(im Fall gesuchte Zahl=5):
16/2 - 16/4
printf("Zahl 0 mal gefunden");
16/2 - 16/4 + 16/8 - 16/16
-> = 5
printf("Zahl 1 mal gefunden");Also verallgemeinert: Die Zahl wird geteilt, dann überprüft ob die gesuchteZahl größer, kleiner oder gleich der Zahl enstpricht (bei gleich = Ausgabe bzw. Ergebnis). Falls die Zahl>gesuchteZahl -> Zahl wird nochmals addiert und hinzugezählt.
Das klingt jetzt alles sehr verwirrend:
Schema:16 ->(16/2) 8
-> größer: 8 + 4 (=12)
größer: 8 + 4 + 2 (=14)
größer: 8+4+2+1 (=15)
kleiner:8+4+2-1 (=13)kleiner:8 + 4 - 2 (=10)
größer: 8+4-2+1 (=11)
kleiner:8+4-2-1 (=9)-> kleiner: 8 - 4 (4)
größer: 8 - 4 + 2 (=6)
größer: 8-4+2+1 (=7)
kleiner:8-4+2-1 (=5)kleiner:8 - 4 - 2 (=2)
größer: 8-4-2+1 (=3)
kleiner:8-4-2-1 (=1)Das ganze soll in Form einer Funktion geschrieben werden und genau da habe ich dsa Problem! Für jeden Tip, jede noch so kleine Hilfe wäre ich sehr dankbar!
brni
-
sorry, aber nach 2maligen durchlesen des textes weis ich immernoch nicht, was du machen willst^^
//edit grammatikalischer Sargnagel entfernt
-
@otze
sorry
also nochmal:
(Erklärung anhand eines Beispiels):
ich gebe Wert für "n" ein ->
Wertebereich=pow(2,n); // Wertebereich=2^n
ich gebe eine Zahl ein, die gesucht werden muss: (zb)5folgender Lösungsweg soll sein:
Der Wertebereich wird durch 2 geteilt und dann überprüft, ob er (16/2) größer/kleiner als die zu suchende Zahl ist! Ist sie größer/kleiner, so wird nochmals die Hälfte (16/4)addiert/subtrahiert.
<- also wird bei jedem Schritt der Nenner mit 2 multipliziert (nächster Wert, der addiert/bzw abgezogen wurde wäre dann 16/8 - weiter 16/16...)... bis die Zahl gefunden wurde! - > Dann Ausgabe!
vielleicht so
?
-
Hallo,
du meinst nicht zufällig 'binary sort' ?
http://www.wachtler.de/informatik_2/node53.html#SECTION00822200000000000000MfG
-
EdiRitter schrieb:
du meinst nicht zufällig 'binary sort' ?
doch ... danke für den Link
-
Danke für die bisherige Hilfe!
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>// Verlinkung zu "teilen"-Funktion
int teilen();// Hauptprogramm
void main()
{
clrscr();
int iGesucht;
int iWertebereich;
int iStart;
int iEnde;
int iX;
int iN;printf("n eingeben: ");
scanf("%d",&iN);
randomize();
iWertebereich=pow(2,iN);
printf("\nDer Wertebereich ist %d groá!", iWertebereich);iGesucht=random(iWertebereich);
printf("\ngesuchte Zahl: %d", iGesucht);iX=iWertebereich/2; // iX=2^n/2 -> n= "iN"
iStart=iWertebereich-iX;iEnde=teilen(int iGesucht,int iStart,int iX);
printf("...: %d", iEnde);
printf("Startwert: %d", iStart);getch();
}// Funktion "teilen"
int teilen(int iGesucht,int iStart,int iX)
{
int iAktuell;
iAktuell=iStart;for(;iAktuell!=iGesucht;)
{
printf("Ueberpruefung: iAktuell = %d", iAktuell) ;
iX=iX/2;if(iAktuell<iGesucht)
{
iAktuell=iAktuell+iX;
}
if(iAktuell>iGesucht)
{
iAktuell=iAktuell-iX;
}}
return(iAktuell);}
Fehler: Expression Syntaxin der Hauptfunktion bei "iEnde=teilen(....);"! arg ich komm nicht drauf
-
1. benutz bitte bitte die c++ streams.
2.
// Verlinkung zu "teilen"-Funktion
int teilen();
iEnde=teilen(int iGesucht,int iStart,int iX)wo ist der fehler?^^
//edit
3. die ungarische notation is zwar schön und gut, aber nichtmehr wirklich hilfreich
-
1. hä :D?
2. ajo ... nach nem kurzen Spaziergang, wurden mir die Augen geöffnet, Danke
3. ich bin eben noch von der alten Schule </ausredeaus>
-
brni schrieb:
1. hä :D?
bei dir steht das:
printf("n eingeben: "); scanf("%d",&iN); randomize(); iWertebereich=pow(2,iN); printf("\nDer Wertebereich ist %d groá!", iWertebereich); iGesucht=random(iWertebereich); printf("\ngesuchte Zahl: %d", iGesucht); iX=iWertebereich/2; // iX=2^n/2 -> n= "iN" iStart=iWertebereich-iX; iEnde=teilen(int iGesucht,int iStart,int iX); printf("...: %d", iEnde); printf("Startwert: %d", iStart);
bei mir würde das stehen:
cout<<"n eingeben"; cin>>iN; iWertebereich=iN*iN;//pow is hier echt die kanone auf den spatzen cout<<endl<<"der wertebereich ist "<<iWertebereich<<" groß!"<<endl; randomize();//hier ist randomize übersichtlicher iGesucht=random(iWertebereich); cout<<"gesuchte Zahl:"<<iGesucht<<endl; iStart=iWertebereich-iWertebereich/2;//ix kann man sich sparen cout<<"...:"<<teilen(iGesucht,iStart,iWertebereich/2) <<endl<<"Startwert:"<<iStart<<endl;
-
@brni
Zudem solltest du die richtigen Header verwenden, also cmath statt math.h etc.