Programm mit 5 For Scleifen --- dauert zulange
-
Hi,
ich bin neu auf dem gebiet C, das schon mal vorab.
Ich habe mich an einem Programm gewagt das 2 Größen, in meinem Fall jetzt Eisen und Titan, einliest und aus den zwei Größen die bestmögliche Zusammenstellung von 5 Türmen darstellt, sodass möglichst wenig von den Rohstoffen Eisen und Titan übrig bleiben.
Die 5 Varianten der Türme brauchen jeweils unterschiedlich viel Rohstoffe.
Ich denke das programm funtioniert sogar, aber wenn ich dann mehr als 0.7 Eisen bzw. Titan eingebe kann ich ewig warten, aber er spukt mir kein Ergebnis aus.so ab 0.4 Eisen oder Titan merkt man auch deutlich das die Schleifen sehr lange durch laufen müssen...
Kann man solche eine Problemstellung auch besser lösen? kann mir einer vielleicht weiter helfen?
Hier mein Code:
#include <stdio.h> #include <stdlib.h> int main(void) { float aa1,ab1,ac1,ad1,ae1,af1,ag1,kleiner=10000000; int aa15,ab15,ac15,ad15,ae15,af15,ag15; int aa2,ab2,ac2,ad2,ae2,af2,ag2; float eisen,titan,rest,reste,restt; float a1[3],b1[3],c1[3],d1[3],e1[3],f1[3],g1[3]; float a15[6],b15[6],c15[6],d15[6],e15[6],f15[6],g15[6]; float a2[6],b2[6],c2[6],d2[6],e2[6],f2[6],g2[6]; printf("\n Eisen in mio.?:"); scanf("%f",&eisen); printf("\n Titan in mio.?:"); scanf("%f",&titan); a1[0]=0.0005;a1[1]=0.0001; //Ressis für Turm 1 ( [0] = Eisen [1] = Titan ) b1[0]=0.001;b1[1]=0.00025; //Ressis für Turm 2 ( [0] = Eisen [1] = Titan ) c1[0]=0.003;c1[1]=0.0006; //Ressis für Turm 3 ( [0] = Eisen [1] = Titan ) d1[0]=0.005;d1[1]=0.001; //Ressis für Turm 4 ( [0] = Eisen [1] = Titan ) e1[0]=0.0075;e1[1]=0.002; //Ressis für Turm 5 ( [0] = Eisen [1] = Titan ) for(a1[2]=0;(a1[2]*a1[0]<=eisen) && (a1[2]*a1[1]<=titan);a1[2]++){ for(b1[2]=0;(b1[2]*b1[0]<=eisen) && (b1[2]*b1[1]<=titan);b1[2]++){ for(c1[2]=0;(c1[2]*c1[0]<=eisen) && (c1[2]*c1[1]<=titan);c1[2]++){ for(d1[2]=0;(d1[2]*d1[0]<=eisen) && (d1[2]*d1[1]<=titan);d1[2]++){ for(e1[2]=0;(e1[2]*e1[0]<=eisen) && (e1[2]*e1[1]<=titan);e1[2]++){ if (((a1[2]*a1[0]+b1[2]*b1[0]+c1[2]*c1[0]+d1[2]*d1[0]+e1[2]*e1[0]) <= (eisen +0.000001)) && ((a1[2]*a1[1]+b1[2]*b1[1]+c1[2]*c1[1]+d1[2]*d1[1]+e1[2]*e1[1])<= (titan + 0.000001))){ reste=0.000001 + eisen - (b1[2]*b1[0]+a1[2]*a1[0]+c1[2]*c1[0]+d1[2]*d1[0]+e1[2]*e1[0]); restt=0.000001 + titan - (b1[2]*b1[1]+a1[2]*a1[1]+c1[2]*c1[1]+d1[2]*d1[1]+e1[2]*e1[1]); rest=reste+restt; //printf("\n %.0fx %.0fx %.0fx %f rest",a1[2],b1[2],c1[2],rest); if (rest<=kleiner && rest >=0){ kleiner=rest;aa1=a1[2];ab1=b1[2];ac1=c1[2];ad1=d1[2];ae1=e1[2]; } } } } } } } printf(" Beste Moeglichkeit:\n"); printf(" %.0fx impuls \n %.0fx higs\n %.0fx Elektrokanone\n %.0fx tachyo\n %.0fx Flicks\n %f rest", aa1, ab1, ac1, ad1, ae1, kleiner); system("PAUSE"); return 0; }
-
Gustl schrieb:
[...]
Kann man solche eine Problemstellung auch besser lösen?
[...]Ja, kann man besser lösen. Deine Frage wäre im Mathematikforum besser untergebracht. Das was du da vor dir hast ist ein Optimierungsproblem, da gibts diverse Möglichkeiten sowas anzugehen, welche ist abhänging von der Art des Optimierungsproblems.