Programm < Sonstige < Schule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:53 Di 07.08.2012 | Autor: | RWBK |
Aufgabe | # include <studio.h>
# include <math.h>
int main()
{
int i, j;
float b, p;
for (i=1 ; i<=50 ; i++)
{
p =1 ;
for (j=1 ; j<=I ;j++)
p=2*p;
b=1+1/p
for (j= 1 ;j <=I ; j++)
b=sqr(b);
printf [mm] ("\n [/mm] Der Wert von b beträgt im %d.ten Durchlauf b=%f "j,b);
[mm] \}
[/mm]
return 0;
[mm] \}
[/mm]
Hinweis:
Mit Hilfe der Funktion sqr wird quadriert.Diese Funktion entstammt der Mathematik Bibliothek.
Ihre Aufgabe ist es hier nun zu ermitteln:
Welche Aufgabe erledigt dieses Programm?
- Lesen Sie hierzu den Quelltext und beschreiben Sie Schritt für Schritt den Ablauf des Programms!
- Fassen Sie mit Worten die Aufgabe zusammen geben Sie hier für nach Möglichkeit eine Formel an, die durch dieses Programm realisiert wird.
- Notieren Sie die Zeile, die am Ende der Schleife auf dem Bildschirm erscheinen wird, so genau wie Ihnen das möglich ist, für einige Werte von I! |
Hallo,
ich hoffe es kann mir jemand helfen folgendes habe ich für mich bereits erarbeitet:
# include <studio.h> = einfügen der Header Datei stdio.h. Das h ist dabei das Merkmal für eine Header Datei. Das Header File stdio.h, die Abkürzung von Standard-In-Out, enthält die Deklaration und Defintion für
- das Anlegen, Öffnen,Schreiben,Lesen etc. von Files
- die Standard Eingabe über die Tastatur
- die Standard Ausgabe mittels Monitor
<....>= es handelt sich um eine Standard Header Datei, wodurch der Compiler weiß wo er liegt.
# include <math.h>
= einfügen der mathematischen standard Bibliothek durch einbinden von math.h, diese beinhaltet eine vielzahl von Funktionen.
int main()
int entspricht hierbei dem Rückgabewert, wobei int für Integer und somit Ganzezahlen steht.
main entspricht dem Bezeichner der Funktion, wobei main für die Hauptfunktion steht
() zwischen den Klammern können Parameter stehen, welche an die Funktion übergeben werden könnnen.
[mm] \{ \} [/mm] umschließen einen Anweisungsblock
Nun folgt die Variablendeklaration:
int i,j; int entspricht dem Typen i und j dem Bezeichner, somit existieren nach "int i,j" die Variablen i und j. Die Deklaration wird mit Strichpunkt (;) abgeschlossen.
Es folgt die Variablendeklaration vom float:
float b,p; float entspricht dem Typen b und p dem Bezeichner, float entspricht Gleitkommazahlen
Es folgt nun eine for Schleife:
Und ab hier versteh ich das leider alles nicht mehr so wirklich ich kann die letzten beiden fragen nicht beantworten und richtig erklären kann ich leider auch nicht was das Programm macht.
Hier mein Ansatz, zunächst wird von 1 bis 50 gezählt. Dabei wird i mit 1 initialisiert, d.h. i bebommt den Wert den Wert 1 zugewiesen oder? Es wird solange i=i+1 berechnet bis die Bedienung i<=50 nicht mehr erfühlt ist oder? Und was dann inner halb der geschweiften Klammern passiert versteh ich ehrlich gesagt nicht. Ich hoffe es kann mir jemand helfen und dies anhand dieser Aufgabe einmal erläutern.
Mfg
RWBK
|
|
|
|
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Hallo RWBK,
> # include <studio.h>
> # include <math.h>
> int main()
> {
> int i, j;
> float b, p;
> for (i=1 ; i<=50 ; i++)
> {
> p =1 ;
> for (j=1 ; j<=I ;j++)
> p=2*p;
> b=1+1/p
>
> for (j= 1 ;j <=I ; j++)
> b=sqr(b);
> printf [mm]("\n[/mm] Der Wert von b beträgt im %d.ten Durchlauf
> b=%f "j,b);
> [mm]\}[/mm]
> return 0;
> [mm]\}[/mm]
>
> Hinweis:
> Mit Hilfe der Funktion sqr wird quadriert.Diese Funktion
> entstammt der Mathematik Bibliothek.
>
> Ihre Aufgabe ist es hier nun zu ermitteln:
> Welche Aufgabe erledigt dieses Programm?
> - Lesen Sie hierzu den Quelltext und beschreiben Sie
> Schritt für Schritt den Ablauf des Programms!
> - Fassen Sie mit Worten die Aufgabe zusammen geben Sie
> hier für nach Möglichkeit eine Formel an, die durch
> dieses Programm realisiert wird.
> - Notieren Sie die Zeile, die am Ende der Schleife auf dem
> Bildschirm erscheinen wird, so genau wie Ihnen das möglich
> ist, für einige Werte von I!
>
>
>
> Hallo,
> ich hoffe es kann mir jemand helfen folgendes habe ich
> für mich bereits erarbeitet:
> # include <studio.h> = einfügen der Header Datei stdio.h.
> Das h ist dabei das Merkmal für eine Header Datei. Das
> Header File stdio.h, die Abkürzung von Standard-In-Out,
> enthält die Deklaration und Defintion für
> - das Anlegen, Öffnen,Schreiben,Lesen etc. von Files
> - die Standard Eingabe über die Tastatur
> - die Standard Ausgabe mittels Monitor
>
> <....>= es handelt sich um eine Standard Header Datei,
> wodurch der Compiler weiß wo er liegt.
>
> # include <math.h>
> = einfügen der mathematischen standard Bibliothek durch
> einbinden von math.h, diese beinhaltet eine vielzahl von
> Funktionen.
>
> int main()
> int entspricht hierbei dem Rückgabewert, wobei int für
> Integer und somit Ganzezahlen steht.
>
> main entspricht dem Bezeichner der Funktion, wobei main
> für die Hauptfunktion steht
>
> () zwischen den Klammern können Parameter stehen, welche
> an die Funktion übergeben werden könnnen.
>
> [mm]\{ \}[/mm] umschließen einen Anweisungsblock
>
> Nun folgt die Variablendeklaration:
>
> int i,j; int entspricht dem Typen i und j dem Bezeichner,
> somit existieren nach "int i,j" die Variablen i und j. Die
> Deklaration wird mit Strichpunkt (;) abgeschlossen.
>
> Es folgt die Variablendeklaration vom float:
>
> float b,p; float entspricht dem Typen b und p dem
> Bezeichner, float entspricht Gleitkommazahlen
>
> Es folgt nun eine for Schleife:
> Und ab hier versteh ich das leider alles nicht mehr so
> wirklich ich kann die letzten beiden fragen nicht
> beantworten und richtig erklären kann ich leider auch
> nicht was das Programm macht.
>
> Hier mein Ansatz, zunächst wird von 1 bis 50 gezählt.
> Dabei wird i mit 1 initialisiert, d.h. i bebommt den Wert
> den Wert 1 zugewiesen oder? Es wird solange i=i+1 berechnet
> bis die Bedienung i<=50 nicht mehr erfühlt ist oder? Und
Ja.
> was dann inner halb der geschweiften Klammern passiert
> versteh ich ehrlich gesagt nicht. Ich hoffe es kann mir
> jemand helfen und dies anhand dieser Aufgabe einmal
> erläutern.
>
Folgt auf den Schleifenkopf eine öffnende geschweifte Klammer,
so wird das darin befindliche Codestück bis zu der schließenden
geschweiften Klammer ausgeführt.
Da hier auf den Schleifenkopf keine geschweiften Klammern folgen,
wird hier nur der darauffolgende Befehl ausgeführt.
In der ersten inneren Schleife wird p=2*p i-mal ausgeführt.
Am Ende ist [mm]p=2^{i}[/mm], da p mit 1 initialisiert wurde.
Damit ergibt sich [mm]b=1+\bruch{1}{2^{i}}[/mm]
Und jetzt Du.
> Mfg
> RWBK
>
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:16 Di 07.08.2012 | Autor: | RWBK |
Danke für deine Hilfe, leider ist mir das immer noch nicht klar. p=1 ist dochnichtanderes als eine Variablendeklaration oder?Auf meine bereits beschriebene Schleife folge eine weitere Schleife richtig? Hier bei wird j mit 1 initialisiert. Die folgende Bedingung verstehe ich dann aber schon nicht j>=I. Wann wird diese denn dann abgebrochen bzw beendet? dann folgt p=2*p was mache ich damit jetzt? Wird das p nachher dann in b=1+1/p eingesetzt?
Mfg
|
|
|
|
|
Hallo RWBK,
> Danke für deine Hilfe, leider ist mir das immer noch nicht
> klar. p=1 ist dochnichtanderes als eine
> Variablendeklaration oder?Auf meine bereits beschriebene
Die Variable p wird weiter oben im Programm deklariert.
hier wird die Variable p initialisiert.
Dies passiert mit jedem Schleifendurchlauf.
> Schleife folge eine weitere Schleife richtig? Hier bei wird
> j mit 1 initialisiert. Die folgende Bedingung verstehe ich
> dann aber schon nicht j>=I. Wann wird diese denn dann
Es muss doch hier lauten: [mm] j\le i[/mm]
Solange [mm] j \le i[/mm] wird die Scheife ausgeführt.
> abgebrochen bzw beendet? dann folgt p=2*p was mache ich
Vielleicht ist das nicht so eindeutig.
Eindeutiger ist es so:
1: |
| 2: | for (i=1 ; i<=50 ; i++)
| 3: | {
| 4: | p =1 ;
| 5: | for (j=1 ; j<=I ;j++)
| 6: | {
| 7: | p=2*p;
| 8: | }
| 9: | b=1+1/p;
| 10: |
| 11: | for (j= 1 ;j <=I ; j++)
| 12: | {
| 13: | b=sqr(b);
| 14: | }
| 15: | printf ("\n $ Der Wert von b beträgt im %d.ten Durchlauf b=%f ",j,b);
| 16: | }
|
> damit jetzt? Wird das p nachher dann in b=1+1/p
> eingesetzt?
>
Hier siehst Du, daß in der ersten inneren Schleife p immer verdopplet wird.
Nach Beendigung der Schleife hat p den Wert [mm]2^{i}[/mm]
Diesen Wert setzt Du jetzt in [mm]b=1+\bruch{1}{p}[/mm] ein.
> Mfg
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 10:46 Mi 08.08.2012 | Autor: | RWBK |
Hallo,
ich habe damit leider immer noch so meine Probleme. Ich frage mich die ganze Zeit was das mit dem j=1;j<=i;j++ auf sich hat. Das ist ja eigentlich wieder ein Schleifenkopf oder nicht? Der hat aber doch irgendwie gar keine auswirkung auf p=2*p oder? Und wie man nachher auf [mm] p=2^{i} [/mm] kommt ist mir leider auch noch ein Rätsel.
mfg
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:41 Mi 08.08.2012 | Autor: | leduart |
Hallo
ich denke das einfachst ist, du machst das erst mal Schritt für Schritt, allerdings nur für i=1bis 3
stur auf dem Papier.
i=1 j läuft bis 1 also ein Schritt.
i=2 j läuft bis 2 usw.
Gruss leduart
|
|
|
|