Wie kann ich?

eisefresser

Grünschnabel
Hallo!
Will folgendes C-Programm schreiben, welches mir die genaue Meterzahl in Verbindung mit einem Durchmesser, dem spezifischen Gewicht und das genaue bestimmte Gewicht ausgibt.

#include <stdio.h>
int main()
{
float d;
printf("Welchen Durchmesser hat der Draht?: ");
scanf("%f",&d);
float g;
printf("Welches Gewicht in kg benoetigen sie?: ");
scanf("%f",&g);
float l;
l= g*1000/(d*d*3.1416/4*8.5); //die 8.5 müßte eigentlich durch eine Variable spezifisches Gewicht ersetzt werden.
printf("Die Laenge des Drahtes ist: %.0f Meter",l);
scanf("%f)",&l);
return 0;
}
Das Programm läuft schon, aber eigentlich müßte-wie schon im Prog. beschrieben- das spezifische Gewicht anhand von verschiedenen legierungen varieren. Wie stelle ich das am besten an? Habe es schon mit # define al= 7.7 u.s.w versucht, bekomme aber die Variable nicht in die Rechnung.Da ich ja mehrere Legierungen zur Auswahl habe.(Sind ca. 6 Legierungen die ich zur Auswahl habe).
Noch eine Frage:der Befehl: printf("Die laenge des Drahtes ist: %.0f Meter",l);
müsste mir doch eigentlich schon den richtigen Wert ausgeben, oder? Macht er aber nicht. Muß hier noch den befehl: scanf("%f)",&l); einfügen, damit ich den richtigen Wert angezeigt bekomme. Wenn ich den Befehl weglasse, springt das Programm ganz raus, wieso?
Bin halt noch Anfänger, merkt man kaum, oder?! ;) lol

Danke im voraus
 
Also 1.)

Ich würde dir vorschlagen du nimmst für deine Aufgabe ein 1 Dimensionales Feld daher, indem du die werte für die Gewichte abspeicherst. So kannst du dann den Benutzer nach einer Nummer für die Art von Metal die er berechnen will abfragen und dann durch die Nummer auf den entsprechenden Index zugreifen.
Oder du nimmst ein 2 dimensionales Feld daher. In der einen Spalte speicherst du den Namen des Elements (als Schlüssel sozusagen) in der zweiten das dazugehörige spezifische Gewicht.Dann lässt du dir den Namen eingeben und durchsuchst das feld ob der Schlüssel im Feld vorhanden ist und rechnest mit dem dazugehörigen gewicht weiter.
(Siehe auch Thematik Hashing)

Zu 2.) welchen Compiler benutzt du lass mich raten Dev-C++ unter Windows ;)

Gruß

RedWing
 
Zuletzt bearbeitet:
Naja, alles schön und gut, aber leider bin ich noch nicht so weit, daß ich das umsetzten könnte. Muss halt noch viel lernen. Könnte mir einer zeigen, wie so etwas aussehen könnte?
 
Also 1.)
Ein Feld kannst du dir so besorgen

double spez[] = {0.3,0.4,0.5, usw.} => Du bekommst ein Feld der Größe n vom Typ double und kannt mit hilfe der Indezes von 0 bis n -1 drauf zugreifen...

2.) Jetzt den Benutzer nach einer nummer für das jeweilige Metall abfragen Du solltest dabei natüröich immer die Benutzereingabe auf eine Gültige Eingabe überprüfen weil ansonsten greifst du auf Feldbereiche drauf zu die es nicht gibt.Folge: Segemntation fault)
Du musst die Auswahlnummern natürlich so geschickt anbieten das sie mit deinen Feld Indezes übereinstimmen.

Wenn ich dir den Code dazu hinschmeisse, wäre das aha erlebniss nur halb so schön ;)

Gruß

RedWing
 
Wahrscheinlich wäre dir mit einem guten C-Einsteigerbuch am meisten geholfen. Grundlagenwissen wie die Antwort auf die Frage "Was ist eine Variable?" können wir hier nicht vermitteln.

Na ja, ersetz mal das Ende deines Programms (ab float l; ) durch folgenden Code -- vielleicht nützt dir das was:
Code:
float l;
float spez_gewicht = 0.0f;
scanf("spez_gewicht: %f",&spez_gewicht);

if ( spez_gewicht == 0.0f )
{
  printf( "spez_gewicht == 0! Das gilt nicht!\n" );
  return 1;
}
else
{
  l= g*1000/(d*d*3.1416/4*spez_gewicht); 
  printf("Die Laenge des Drahtes ist: %.0f Meter",l);
  return 0;
}
---
Oh, da war RedWing schneller. Hm, mein Ansatz ist aber auch nicht verkehrt. ;)
 
ok, wie ich eine Variable definiere weiss ich schon. Aber ich hätte meine Aufgabe gerne wie folgt gelöst:
Das Programm erwartet eine Eingabe mit der bestimmten Legierung, da nicht jeder Benutzer weiss, welches spezifische Gewicht die bestimmte Legierung hat die er gerade bearbeitet, logisch oder?!
meine ungefähr so:

Vorher müßten die einzelnen Legierungen mit ihren Wert definiert sein.
Z.B.
albz=7.7
b=8.5
ms=8.6 \\u.s.w. dann

char txt[5];
printf("Welche Legierung, albz, b, ms, ns, cu, cusi?: ");
scanf("%s",txt); \\für den String txt müßte der Wert doch in das Prog. bzw. die formel (l= g*1000/(d*d*3.1416/4*spez. Gewicht); irgendwie einsetztbar sein,oder?

Habe übrigends das Buch jetzt lerne ich C und bin auf der Seite 146.
Ich glaube nicht, das ich das schon wissen müßte?
Versuche mich anhand von bestimmten Beispielprogrammen reinzuarbeiten.
Könnt ihr mir noch ein paar gute Bücher vorschlagen? Wie seid ihr so weit gekommen?
 
RedWing Also 1.)
Ein Feld kannst du dir so besorgen

double spez[] = {0.3,0.4,0.5, usw.} => Du bekommst ein Feld der Größe n vom Typ double und kannt mit hilfe der Indezes von 0 bis n -1 drauf zugreifen...

2.) Jetzt den Benutzer nach einer nummer für das jeweilige Metall abfragen Du solltest dabei natüröich immer die Benutzereingabe auf eine Gültige Eingabe überprüfen weil ansonsten greifst du auf Feldbereiche drauf zu die es nicht gibt.Folge: Segemntation fault)
Du musst die Auswahlnummern natürlich so geschickt anbieten das sie mit deinen Feld Indezes übereinstimmen.

Wenn ich dir den Code dazu hinschmeisse, wäre das aha erlebniss nur halb so schön

Gruß

RedWing

Also prinzipiell find ich das gut wenn Leute selber Bücher durcharbeiten um eine
Programmiersprache zu lernen.
Bei mir war es durch die Ausbidlung und durchs Studium bedingt, mit diesen Geschichten hat sich dann auch so langsam das Eigeninteresse entwickelt was davor nicht so wirklich vorhanden war ;)
Ein gutes Buch wie ich finde ist von o'Reilley "C++ in a nutshell"

Guckst du
hier

Viele Grüße

RedWing
 
Zuletzt bearbeitet:
ok, werds heute abend probieren, muss jetzt leider arbeiten. Wir hören noch voneinander, spätestens wenn das nicht klappt. Das ist noch nicht ausgestanden.:p
Bis dann...
 
Habs jetzt so gelöst, habe einfach mal in meinem Buch weitergelesen und was gefunden was ich einbauen kann. Finds aber so eigentlich etwas umständlich, gibts nicht eine einfacherere lösung?
Hier mein Prog:
#include <stdio.h>


const float albz=7.7;
const float b=8.9;
const float ms63=8.4;
const float ms80=8.8;
const float ns=8.65;
const float cu=8.9;
const float cusi=8.5;

int main()

{
float d, g, l, x;
int legierung,wahl;
printf("Welche Legierung haben Sie?: \n\n");
printf("1. AlBz\n");
printf("2. Bronze\n");
printf("3. Messing 63\n");
printf("4. Messing 80\n");
printf("5. Neusilber\n");
printf("6. Kupfer\n");
printf("7. Cusi3Mn\n");

printf("Geben Sie eine Zahl ein: ");
wahl=0;
while (wahl!=1)
{
scanf("%d",&legierung);
printf("\n");

if (legierung ==1)
{
x=albz;
wahl=1;
}
if (legierung ==2)
{
x=b;
wahl=1;
}
if (legierung ==3)
{
x=ms63;
wahl=1;
}
if (legierung ==4)
{
x=ms80;
wahl=1;
}
if (legierung ==5)
{
x=ns;
wahl=1;
}
if (legierung ==6)
{
x=cu;
wahl=1;
}
if (legierung ==7)
{
x=cusi;
wahl=1;
}
if (legierung==0)
return;
}
printf("Welchen Durchmesser hat der Draht?: ");
scanf("%f",&d);
printf("Welches Gewicht in kg benoetigen sie?: ");
scanf("%f",&g);
l= g*1000/(d*d*3.1416/4*x);
printf("\n");
printf("Die laenge des Drahtes ist: %.0f Meter",l);
scanf("%f)",&l);
return 0;
}
 
Naja, man kann zum Bsp. dieses x als Array definieren und mit den Werten füllen:

Code:
float x[7] = {7.7, 8.9, 8.4, 8.8, 8.65, 8.9, 8.5}

Dann kann man direkt mit der Eingabezahl auf die entsprechende Eigenschaft der Legierung zugreifen, ohne Extravariablen und ohne diese umständliche Zugeordnerei mit den if-Blöcken. Die Zeile, in der der Wert berechnet wird, lautet dann:

Code:
l= g*1000/(d*d*3.1416/4*x[legierung-1]);

Musst halt nur noch Sicherstellen, dass legierung im Bereich von 1 bis 8 ist.
 
Zurück