Funktion schreiben < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:52 Sa 01.12.2012 | Autor: | Duckx |
Aufgabe | Schreiben Sie eine C-Funktion "divide" zur ganzzahligen Division ohne den / Operator zu verwenden. (durch wiederholte Subtraktion) |
Ich weiß ungefähr wie sich das realisieren lässt. Allerdings habe ich keine Ahnung wie ich soetwas in C schreiben soll.
int a;
int b;
i=0;
while a > b
a=a-b;
i=i+1
return i;
Ist das so richtig vom groben Aufbau?
Wie schreibt man soetwas nun in C?
|
|
|
|
Hallo Duckx,
> Schreiben Sie eine C-Funktion "divide" zur ganzzahligen
> Division ohne den / Operator zu verwenden. (durch
> wiederholte Subtraktion)
> Ich weiß ungefähr wie sich das realisieren lässt.
> Allerdings habe ich keine Ahnung wie ich soetwas in C
> schreiben soll.
>
> int a;
> int b;
> i=0;
> while a > b
> a=a-b;
> i=i+1
> return i;
>
>
> Ist das so richtig vom groben Aufbau?
Vom groben Aufbau her ist das richtig.
> Wie schreibt man soetwas nun in C?
Das kann man z.B. so realisieren:
1: |
| 2: | int divide()
| 3: | {
| 4: | int i=0;
| 5: | while a > b
| 6: | a=a-b;
| 7: | i=i+1
| 8: | return i;
| 9: | }
|
Wobei a,b globale Variablen sind.
Sollen der Funktion divide Parameter übergeben werden,
so sieht das etwas anders aus:
1: |
| 2: | int divide(int u,int v)
| 3: | {
| 4: | int a=u;
| 5: | int b=v;
| 6: | i=0;
| 7: | while a > b
| 8: | a=a-b;
| 9: | i=i+1
| 10: | return i;
| 11: | }
|
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:13 Sa 01.12.2012 | Autor: | Duckx |
Ok dankeschön :) Ich weiß nicht genau, was hier gefordert ist.
Aber ich soll als nächste Aufgabe die Funktion in ein Programm integrieren, dass 2 Zahlen einliest und dann die ganzzahlige Division berechnet und anschließend das ergebnis ausgibt.
Also denke ich eher die 2. variante?
|
|
|
|
|
Hallo Duckx,
> Ok dankeschön :) Ich weiß nicht genau, was hier gefordert
> ist.
> Aber ich soll als nächste Aufgabe die Funktion in ein
> Programm integrieren, dass 2 Zahlen einliest und dann die
> ganzzahlige Division berechnet und anschließend das
> ergebnis ausgibt.
> Also denke ich eher die 2. variante?
Ja, das ist dann die 2. Variante.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:40 Sa 01.12.2012 | Autor: | Duckx |
Und wie realisiere ich das ganze nun in einem richtigen programm? wie lasse ich die variable u und v einlesen?
|
|
|
|
|
> Und wie realisiere ich das ganze nun in einem richtigen
> programm? wie lasse ich die variable u und v einlesen?
Du kannst mit "scanf" die beiden Werte einlesen.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 22:02 Sa 01.12.2012 | Autor: | Duckx |
Ok danke
aber ich weiß nun nicht, wie ich das als Programm ausgeben soll:
ungefähr so?
int divide(int u,int v)
{
int a=u;
int b=v;
i=0;
while a > b
a=a-b;
i=i+1
return i;
}
int main ()
{
scanf ("%u%,&i);
scanf ("%v",&i);
printf (i);
return 0;
}
|
|
|
|
|
> Ok danke
> aber ich weiß nun nicht, wie ich das als Programm ausgeben
> soll:
> ungefähr so?
> int divide(int u,int v)
> {
> int a=u;
> int b=v;
> i=0;
> while a > b
> a=a-b;
> i=i+1
> return i;
> }
>
> int main ()
> {
> scanf ("%u%,&i);
> scanf ("%v",&i);
> printf (i);
> return 0;
> }
Nur mal zum allgemeinen Ablauf:
Du schreibst zuerst eine Funktion. Hier "divide". Um diese Funktion zu benutzen, musst du sie in der Main Funktion aufrufen. Deine Funktion hat zwei input parameter, u und v. Das heißt du musst die Funktion in der main auch mit zwei parametern aufrufen. Diese zwei parameter liest du ein über scanf. Das "int" vor "divide" sagt dir, dass die Funktion einen int Wert zurück liefert.
Was du da mit der scanf Funktion treibst, verstehe ich nicht.
Sieh bitte in deinem Skript nach (oder google's einfach) wie das funktioniert. Z.b hier wird ein für dich interessantes Beispiel erarbeitet:
scanf Funktionsweise
Valerie
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 00:44 So 02.12.2012 | Autor: | Duckx |
ok hier ein neuer Versuch:
ich hoffe ich habe es verstanden
#include <stdio.h>
int divide(int u,int v)
{
int a=u;
int b=v;
int i=0;
while (a >= b){
a=a-b;
i=i+1;}
return i;
}
int main() {
int h;
int u;
int v;
printf("Geben Sie einen Dividenden ein: [mm] \n");
[/mm]
scanf("%d",&u);
printf("Geben Sie einen Divisor ein: [mm] \n");
[/mm]
scanf("%d",&v);
h=divide(u,v);
printf("Der Quotient ist: [mm] %d\n",h); [/mm]
return 0;
}
Dieses Programm habe ich auch ausprobiert und es hat funktioniert. Allerdings weiß ich nicht, ob der Code so einwandfrei ist.
|
|
|
|
|
Nur am Rande: Die Variablen in der main Funktion müssen nicht den gleichen Namen tragen wie die Variablen, die du bei deiner Funktion deklariert hast. Du könntest die Variablen deiner main Funktion beliebige Namen geben.
Ich würde noch eine Abbruch bedingung mit einbauen, für den Fall dass jemand durch Null teilen würde.
Valerie
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:10 So 02.12.2012 | Autor: | Duckx |
Wie bringe ich das in die divide funktion ein?
wenn ich da ne if funktion einbaue wird es trotzdem nicht ausgegeben weil ich es in der main funktion nicht habe oder?
Kann mir jemand eine Möglichkeit geben?
|
|
|
|
|
> Wie bringe ich das in die divide funktion ein?
gar nicht.
> wenn ich da ne if funktion einbaue wird es trotzdem nicht
> ausgegeben weil ich es in der main funktion nicht habe
> oder?
Genau. Es muss also in die Main. Du musst das abfangen, bevor die eingelesenen Variablen in deine Funktion gelangen. Mit einer If else Bedingung kannst du es machen.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:27 So 02.12.2012 | Autor: | Duckx |
Ok danke.
Aber in der divide Funktion kann man es garnicht abfangen?
das wäre doch besser falls man öfter was mit der Funktion in einem Programm macht. dann müsste man das nicht immer wieder abfangen sondern hat es kompakt?
|
|
|
|
|
Hallo Duckx,
> Ok danke.
> Aber in der divide Funktion kann man es garnicht
> abfangen?
In der Funktion divide müßte dann der Fall abgefangen werden,
wenn b gleich Null ist. Dann ändert sich die Schleifenbedingung.
> das wäre doch besser falls man öfter was mit der
> Funktion in einem Programm macht. dann müsste man das
> nicht immer wieder abfangen sondern hat es kompakt?
Gruss
MathePower
|
|
|
|
|
Hallo!
Erstmal eine schelmische Frage: Was ist denn, wenn a und/oder b negativ ist?
Zu dem Problem der Division duch 0:
Im Prinzip ist es korrekt, das in der Funktion divide() selbst zu prüfen, sonst läuft das Dingen ja bis in alle Ewigkeit.
Das Problem ist, was dann? Einfach irgendeine Zahl zurück geben ist nicht gut, denn dann weiß z.B. deine main() nicht, daß da was schief gegangen ist.
Es gibt da einige Lösungsmöglichkeiten für, allerdings würde das hier wohl über das Ziel hinaus schießen.
|
|
|
|
|
Hi!
> Ok danke.
> Aber in der divide Funktion kann man es garnicht
> abfangen?
> das wäre doch besser falls man öfter was mit der
> Funktion in einem Programm macht. dann müsste man das
> nicht immer wieder abfangen sondern hat es kompakt?
Doch, natürlich geht das auch.
|
|
|
|