Zum Inhalt springen

Schleifenprobleme (war: C-Dreck, kann mir einer helfen??)


Empfohlene Beiträge

Geschrieben

Also, ich möchte in dieser Arbeit am Donnerstag keine fünf schreiben, doch es klappt einfach nicht. Ich sitz da, hab kaum ne Ahnung (Es geht um Funktionen und Arrays) und hab ein Brett vorm Kopf.

Ich komm zur scanf eingabe weiter nicht, so sieht mein Quellcode aus. Kann mir da jemand irgendwie helfen, irgendein Programm schicken, dass irgendeine Funktion hat, egal welche mit einer Erklärung drin? Sollte nicht zu kompliziert sein, möchte es ausdrucken. Kann mir da einer bitte bitte bitte helfen? Ich brauch eine drei, grad sieht es nach einer sechs aus ... *heul*

Falls ihr gleich mailen wollt:

Vielen Dank

P.S.: Morgen kann ich leider keine E-Mails abrufen, bin ich nicht in der Firma, aus diesem Grund hoffe ich doch dass jemand bis heute mittag geholfen hat.

MfG

saschabu

  • Antworten 58
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Geschrieben

Na dann poste hier doch den Code den du schon gemacht hast.

.....und erzaehl vielleicht auch noch, wo es genau haengt und was das ganze werden soll, dann wird dir sicher auch geholfen.

Die Chance dass dir hier jemand was komplettes macht halt ich dann doch fuer recht gering, da das hier ja kein Hausaufgabenservice ist :D

Goos

Geschrieben

Nun, ich denke zwar dass Du mit Deinem Problem etwas spät kommst, aber helfen tu ich trotzdem gerne (wenn ich kann). Was ich aber nicht mag, ist Dir einen fertigen Quellcode geben. Dabei hab ich nur Arbeit, und Du keinen Erfolg (weil Du es das nächste Mal wieder nicht kannst).

Die Frage ist doch, wie wir Eure arbeit am Donnerstag aussehen? Was habt Ihr bisher gemacht, und was kannst Du davon, und was macht Dir Probleme.

Bine

PS: Und wähle das nächste Mal bitte einen etwas besseren Titel für Deinen Thread...

Geschrieben

Also ich fang mal an unseren stoff zu erzählen: Wir benutzen dass rororo Buch mit dem Titel C programmieren von anfang an.

ich komme aus Bw! So also unsere vorherigen Lernziele: while, do- while, if, for, Entscheidungen. Ich habe schon etwas mit dem do-while, while, for Probleme. Ich komme soweit bis zu der scanf eingabe bei jedem Programm, sobald es aber um die schleife geht hab ich kaum einen Durchblick. Und das Buch hilft mir da auch nicht mehr grad weiter. Mein Quellcode sieht somit immer so aus: # include <conio.h usw>

main()

{

int v;

clrscr;

printf("BSP");

scanf("%i",&v);

so und jetzt kommt die schleife und da hängt es jetzt, ich weiß ganz genau dass ich dass programmieren könnte, habe früher qbasic programmiert, aber ich find da keine logik, auch nicht mit struktugramm.

Die arbeit geht um wie oben schon gesagt, Funktionen und arrays. Eine Aufgabe z.B:

Berechnung des Federweges einer Schraubenfeder:

eine schraubenfeder hat die federkonstante c00,35N/cm. In einer tabelle soll nun der federweg für zugkräfte von 0...4N in 0,4 n schritte angegeben werden.

Funktion

Berechnung: s=f/c

F ist zugkraft u. wird vom HP an die Funktion übergeben, das ergebnis s wird an das hp zurückgeliefert u. dort tabellarisch ausgegeben.

Berechnung ist klar, aber der Syntax mit der Funktion, null durchblick, mir fehlt da die logik:confused:

Hilft das weiter?

Geschrieben

Hmm, also zum ersten fällt mir etwas an Deiner Funktion main auf.

Du schreibst:

main()

{

bla...

}

es müßte aber auf jeden Fall

void main()

{

bla...

}

oder nach dem Standart

int main()

{

bla...

}

Ist das hier nur eine Ungenauigkeit von Dir?

Und was ist das für eine Schleife. Die ist hier nicht zu sehen. Wie soll ich denn sagen können was damit falsch ist, wenn ich sie nicht sehen kann????

Bine

Geschrieben

das war eine ungenauigkeit. Ich hab doch gesagt alles was da nach kommt ist quatsch, aus diesem grund habe ich ja auch probleme, ich weiß nicht, wann welche schleife ich benutzen muss, ok for- schleife, do- while auch noch, aber muss hier jetzt eine array (Zeichenkettenausgabe hin) oder was muss da hin. ich habe es mit array versucht, bin aber mit 20 Fehlern dann ausgestiegen und in der wut habe ich dass thema eroffnet, sorry wegen dem topic aber war komplett sauer *ich könnt heulen*

Ich bekomm die schleifen nicht hin, ich kann mir dass einfach nicht richtig merken und unser lehrer kann es nicht erklären, zieht nur seinen stoff durch. deswegen habe ich ja auch gesagt es wäre gut ein programm mir zu schicken, dass keine funktion hat, sondern nur eine schleife zeigt, wo bekomm ich da hilfe, schulkameraden versuchen mir (und anderen zu helfen), doch sind grad im urlaub bis donnerstag

verstehst du mich jetzt wasd ich mein???????

Geschrieben

Du brauchst für diese Aufgabe keine Arrays. Was die Schleifen angeht, zwischen for und while gibt es keinen wirklichen Unterschied, nur was wo steht. Wichtig ist nur der Unterschied zwischen while und do (also kopf- bzw. fußgesteuert).


//Beispiel (for):
for( double zugkraft = 0.0; zugkraft <= 4.0; zugkraft += 0.4 ) {
// Berechnung & Ausgabe
}

//Beispiel (while):
double zugkraft = 0.0;
while( zugkraft <= 4.0 ) {
// Berechnung & Ausgabe
zugkraft += 0.4;
}
[/CODE]

Geschrieben

Hmm, also wenn Dich jetzt richtig verstanden habe, dann willst Du wissen was für Schleifen es gibt, und wozu ich welche benutzte, richtig???

Also, es gibt:

while

do while

for

und noch ein paar andere Anwesisungen wie if, if else, switch, case, auf die ich jetzt aber nicht mehr eingehe.

Wann benutze ich welche?!?! Tja, gute Frage. Im Grunde kann man das ziemlich frei entscheiden.

Der große unterschied zwischen ein while und einer do while Schleife ist, das die while Schleife direkt zu Beginn ein Kriterium überprüft, also eventuell nicht ausgeführt wird, nud die do while Schleife dies erst am Ende tut. Die do while Schleife wird also auf jeden Fall einmal ausgeführt.

Die for Schleife benutze ich, wenn ich eine festgelegte Anzahl an Durchläufen haben will (kann auch durch eine Variable festgelegt sein, mir also nicht unbedingt bekannt sein).

Beispiel:

while ( i >= 0 ) 
{
string1[i] = string2[i];
i--;
}[/PHP]

[PHP]do
{
y = f( x );
x--;
} while ( x > 0 );

for ( i = space = tab = 0; i < MAX; i++ ) 
{
if ( line[i] == ' ' )
space++;
if ( line[i] == '\t' )
{
tab++;
line[i] = ' ';
}
}[/PHP]

Etwas klarer?

Bine

Geschrieben

Danke, aber wann brauch ich was?? kopf und fuß gesteuert kann ich noch, aber das Problem ist halt, ich habe schon öfters versucht, etwas @home zu programmieren, und ich bleibe 99 % immer an den schleifen hängen, warum auch immer, also intelligent genug bin ich, schreib ja sonst nur so um die 1,6 Noten, ich konnte dass auch früher bei Q-basic, aber mir fehlt so die übung, wann was wie ich was verwende, wo gibt es da hilfe????

Geschrieben

Dafür gibt es keine allgemeine Festlegung. Das kann man ziemlich frei selber entscheiden, und im Grunde mit allen Schleifen das gleiche bewirken. Gib doch mal ein Beispiel für so eine Schleife die bei Dir nicht funktioniert??? Mit Quellcode davor und danach (weil an dem kann es auch liegen).

Bine

Geschrieben

Ja, aber if, und else wie sieht es damit aus?? switch ist dass auswählen, dass hab ich wieder! Ich weiß nicht wie man dass nennt, aber ich habe nicht das programmierblut, ich konnte wie schon gesagt q, bis ein paar schleifen, aber dann war schluß, mit dem c hab ich irgendwie mit der logik probleme, mir fehlt einfach die denkweise, wie soll man das beschreiben???

Versteht ihr mich?

Ich frag mich immer, wie komm ich darauf, und bleib an diesen stellen hängen, der code ist ja auch nicht riesig, und ist auch nicht die welt, aber mir fehlt irgendwie die logik!

Was hilft dagegenß??

Aber sonst habe ich die logik!!

Nur da nicht :confused:

Geschrieben

if ist eine Abfrage.

if(x==1)

{

....

}

Ist die Bedingung wahr (hier also X gleich 1), dann wird das was in den Klammern steht ausgeführt, sonst nicht.

if else ist im grunde genauso:

if(x==1)

{

...

}

else

{

...

}

nur das wenn die Bedingung nicht wahr ist, dann wird das ausgeführt was in den Klammern von else steht. Aber das müßte Dir auch Dein Buch erzählen.

Bine

Geschrieben

Wie gesagt, das ist unterschiedlich. Kommt immer auf einen selber drauf an. Der eine kann mit der besser, der andere mit der. Ist Gewöhnungssache, würde ich sagen. Ich arbeite sowohl mit while als auch mit for oft. Do while weniger, braucht man aber im allgemeinen nicht so oft.

Am besten erklären kann man das an Code direkt, finde ich!

Bine

Geschrieben

So hier ist ein Quellcode:

Da steht auch mein Name drin, schaut mal drauf:

// Kassenprogramm

// 25.10.01

// Sascha

#include <stdio.h>

#include <conio.h>

#include<dos.h>

void main (void)

{ Anfang:

int wahl,eing;

clrscr();

printf("\n\t\t***K a s s e n p r o g r a m m***\n\n\n") ;

printf("\n1 --> Sie sind unter 12 Jahren alt\n");

printf ("\n2 --> Sie sind **Âber** 12 Jahre alt\n\n");

printf("\t~DrÂcken Sie bitte eine der beiden oben genannten Zahlen~\n");

scanf("%i",&wahl);

Ausgabe:

if (wahl == 1)

{

printf("\nBitte zahlen sie 3 DM");

delay(750);

printf("\n\n\t'Danke'");

}

if (wahl == 2)

{

printf("\nBitte zahlen sie 5 DM");

delay(750);

printf("\n\n\t'Danke'");

}

if (wahl<1)

{

printf("\tSie haben eine falsche Zahl eingegeben\n\n");

printf("\t\t\Bitte geben Sie die Zahl 1 oder 2 ein: ");

scanf("%i",&wahl);

goto Ausgabe;

}

if (wahl>2)

{

printf("\tSie haben eine falsche Zahl eingegeben\n\n");

printf("\t\t\Bitte geben Sie die Zahl 1 oder 2 ein: ");

scanf("%i",&wahl);

goto Ausgabe; --> Das kapier ich bis jetzt alles, aber wie funktioniert der untere teil jetzt??

}

printf("\n\n\n\t\t***WÂnschen Sie einen Neustarts des Programms***\n\n");

printf("\t 1 = ja ; 0 = nein : ");

scanf("%i",&eing);

if (eing == 1)

{ goto Anfang;

}

else

printf("\n\n\n Bitte drÂcken Sie eine beliebige");

printf(" Taste um das Programm zu beenden");

getch();

}

Geschrieben

oder so was, das kapier ich auch noch, aber die verschaltelten schleifen, da habe ich probleme!!!

// Ohmsche Gesetz

// 15.11.01

// Sascha Burton

#include <stdio.h>

#include <conio.h>

#include<dos.h>

void main (void)

{

int u,r,i,abbrechen,fehler;

char s,eing;

abbrechen=0;

while (abbrechen==0) {

do {

clrscr();

printf("\n\t\t***O h m s c h e G e s e t z***\n\n\n") ;

printf("Welche Grâ€Ã¡e soll berechnet werden?\n");

printf("\n1 --> Spannung\n");

printf ("\n2 --> Strom\n");

printf ("\n3 --> Widerstand\n\n");

s = getch();

switch (s) {

case '1':

printf("\nGeben Sie bitte den Widerstand in Ohm ein: ");

scanf("%i",&r);

printf("\nGeben Sie bitte den Strom in Ampere ein: ");

scanf("%i",&i);

u=r*i;

printf("Die Spannung betr„gt %i Volt.", u);

break;

case '2':

printf("\nGeben Sie bitte die Spannung in Volt ein: ");

scanf("%i",&u);

printf("\nGeben Sie bitte den Widerstand in Ohm ein: ");

scanf("%i",&r);

i=u/r;

printf("Der Strom betr„gt %i Ampere.", i);

break;

case '3':

printf("\nGeben Sie bitte die Spannung in Volt ein: ");

scanf("%i",&u);

printf("\nGeben Sie bitte den Strom in Ampere ein: ");

scanf("%i",&i);

r=u/i;

printf(" Der Widerstand betr„gt %i Ohm.", r);

break;

default:

printf("Fehler! Bitte wiederholen Sie ihre Eingabe...");

delay(100);

break;

}

} while (s!='1' && s!='2' && s!='3');

printf("\n\n\n\t***WÂnschen Sie einen Neustarts des Programms***\n\n");

printf("\t\t\t 1 = ja ; 0 = nein : ");

eing = getch();

if (eing == '0') {

printf("\n\n\n Bitte drÂcken Sie eine beliebige");

printf(" Taste um das Programm zu beenden");

abbrechen=1;

getch();

}

}

}

Geschrieben

--> Das kapier ich bis jetzt alles, aber wie funktioniert der untere teil jetzt??

Schau mal von unten den zweiten <Quellcode an, da steht dass unten drann, damit habe ich noch probs, denn ich vertseh nicht genau warum dass so ist???

Das ging ja auch noch, aber die sachen mit formeln macht mir halt irgendwie probleme, und meine tastatur ist jetzt auch kaputt toll

Geschrieben

Zum Thema FOR - Schleife:


for ( i = space = tab = 0; i < MAX; i++ )
{
if ( line[i] == ' ' )
space++;
if ( line[i] == '\t' )
{
tab++;
line[i] = ' ';
}
}
[/PHP]

Das ist ein recht unglueckliches Beispiel find ich.

Bei der FOR Schleife kommts ja auch nur auf den Kopf an.

Das Problem, was die meisten damit haben ist die Abbruchbedingung, also:

[PHP]for( i=0; Bedingung; i++)

Ich denke mal man kann das mit dieser Bedingung ganz gut verdeutlichen, wenn man erklaert, dass es eben eine Bedingung ist ( ein Boolscher Ausdruck, der TRUE, oder FALSE zurueckliefert)

Ist eben diese Bedingung TRUE, dann wird die Schleife durchlaufen und sobald FALSE auftaucht ist die Schleife beendet und der weitere Code wird durchlaufen.

Deshalb wird dann auch ein i == 10 als Bedingung nicht funktionieren, da ja i zu anfang 0 ist und somit ein FALSE zurueckgeliefert wird. Schreibt man dann allerdings i <= 10, dann wird TRUE zurueckgegeben bis i die 11 erreicht hat.

Ein haeufiger Fehler ist auch noch, dass als Bedingung sowas wie i = 10 eingetragen wird. Da dieses i = 10 aber kein Vergleich, sondern eine Zuweisung ist kann i = 10 nie falsch sein und die Schleife laeuft endlos.

Ich weiss zwar nicht ob dir das nun was geholfen hat Sascha, aber meiner Erfahrung nach haben recht viele Leute Probleme damit

Goos

Geschrieben

@ goos

ja dass habe ich schon gewusst hatte auch damit keine probleme es ist eher mit dem :

while (s!='1' && s!='2' && s!='3');

printf("\n\n\n\t***WÂnschen Sie einen Neustarts des Programms***\n\n");

printf("\t\t\t 1 = ja ; 0 = nein : ");

eing = getch();

if (eing == '0') {

printf("\n\n\n Bitte drÂcken Sie eine beliebige");

printf(" Taste um das Programm zu beenden");

abbrechen=1;

getch();

}

}

dazu bräuchte ich noch eine kleine antwort, warum dass so funzt??

Geschrieben

Das ist so nicht Dein Quellcode. Schau ihn Dir noch mal an.

Das

while (s!='1' && s!='2' && s!='3'); 

gehört zu dieser

		do
{
printf("\n\t\t***O h m s c h e G e s e t z***\n\n\n") ;
printf("Welche Grâ€Ã¡e soll berechnet werden?\n");
printf("\n1 --> Spannung\n");
printf ("\n2 --> Strom\n");
printf ("\n3 --> Widerstand\n\n");
s = getch();

switch (s)
{
case '1':
printf("\nGeben Sie bitte den Widerstand in Ohm ein: ");
scanf("%i",&r);
printf("\nGeben Sie bitte den Strom in Ampere ein: ");
scanf("%i",&i);
u=r*i;
printf("Die Spannung betr„gt %i Volt.", u);
break;

case '2':
printf("\nGeben Sie bitte die Spannung in Volt ein: ");
scanf("%i",&u);
printf("\nGeben Sie bitte den Widerstand in Ohm ein: ");
scanf("%i",&r);
i=u/r;
printf("Der Strom betr„gt %i Ampere.", i);
break;

case '3':
printf("\nGeben Sie bitte die Spannung in Volt ein: ");
scanf("%i",&u);
printf("\nGeben Sie bitte den Strom in Ampere ein: ");
scanf("%i",&i);
r=u/i;
printf(" Der Widerstand betr„gt %i Ohm.", r);
break;

default:
printf("Fehler! Bitte wiederholen Sie ihre Eingabe...");
break;
} // switch
} while (s!='1' && s!='2' && s!='3'); // do - while[/PHP]

Schleife. Das

[PHP] printf("\n\n\n\t***WÂnschen Sie einen Neustarts des Programms***\n\n");
printf("\t\t\t 1 = ja ; 0 = nein : ");
eing = getch();
if (eing == '0')
{
printf("\n\n\n Bitte drÂcken Sie eine beliebige");
printf(" Taste um das Programm zu beenden");
abbrechen=1;
getch();
} // if

steht unter der 'do-while' Schleife!!!

Gewöhn Dir am besten direkt an, zu kennzeichnen wo welche Schleife wieder zu Ende ist.

Was für einen Compiler benutzt Du eigentlich, denn eigentlich sollte das bei Dir im Compiler durch Tab-Verschiebung wie hier:

#include <stdio.h> 
#include <conio.h>
#include <dos.h>

void main (void)
{
int u,r,i,abbrechen,fehler;
char s,eing;

abbrechen=0;

while (abbrechen==0)
{
do
{
printf("\n\t\t***O h m s c h e G e s e t z***\n\n\n") ;
printf("Welche Grâ€Ã¡e soll berechnet werden?\n");
printf("\n1 --> Spannung\n");
printf ("\n2 --> Strom\n");
printf ("\n3 --> Widerstand\n\n");
s = getch();

switch (s)
{
case '1':
printf("\nGeben Sie bitte den Widerstand in Ohm ein: ");
scanf("%i",&r);
printf("\nGeben Sie bitte den Strom in Ampere ein: ");
scanf("%i",&i);
u=r*i;
printf("Die Spannung betr„gt %i Volt.", u);
break;

case '2':
printf("\nGeben Sie bitte die Spannung in Volt ein: ");
scanf("%i",&u);
printf("\nGeben Sie bitte den Widerstand in Ohm ein: ");
scanf("%i",&r);
i=u/r;
printf("Der Strom betr„gt %i Ampere.", i);
break;

case '3':
printf("\nGeben Sie bitte die Spannung in Volt ein: ");
scanf("%i",&u);
printf("\nGeben Sie bitte den Strom in Ampere ein: ");
scanf("%i",&i);
r=u/i;
printf(" Der Widerstand betr„gt %i Ohm.", r);
break;

default:
printf("Fehler! Bitte wiederholen Sie ihre Eingabe...");
break;
} // switch
} while (s!='1' && s!='2' && s!='3'); // do - while

printf("\n\n\n\t***WÂnschen Sie einen Neustarts des Programms***\n\n");
printf("\t\t\t 1 = ja ; 0 = nein : ");
eing = getch();
if (eing == '0')
{
printf("\n\n\n Bitte drÂcken Sie eine beliebige");
printf(" Taste um das Programm zu beenden");
abbrechen=1;
getch();
} // if
} // while
} // main[/PHP]

sichtbar sein!

Bine

Geschrieben

Das Semikolon ist da vollkommen richtig. Hinter dem while(blablabla) in einer 'do-while' Schleife muss ein Semikolon stehen. Und das es sich an dieser Stelle um eine 'do-while' Schleife handelt kann man aus dem vorher schon geposteten Code ersehen.

Bine

Geschrieben

@ goos

ja dass habe ich schon gewusst hatte auch damit keine probleme es ist eher mit dem :

while (s!='1' && s!='2' && s!='3');

printf("\n\n\n\t***WÂnschen Sie einen Neustarts des Programms***\n\n");

printf("\t\t\t 1 = ja ; 0 = nein : ");

eing = getch();

if (eing == '0') {

printf("\n\n\n Bitte drÂcken Sie eine beliebige");

printf(" Taste um das Programm zu beenden");

abbrechen=1;

getch();

}

}

dazu bräuchte ich noch eine kleine antwort, warum dass so funzt??

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...