Naja eigentlich schon, nur mir fällt nix ein außer die Sache mit den Arrays.
Druckbare Version
Naja eigentlich schon, nur mir fällt nix ein außer die Sache mit den Arrays.
Es gibt verschiedene Funktionen zum sortieren. Selbst benutzt hab ich bisher nur BubbleSort,kannst es dir ja mal angucken.
Man kann aber auch anders vorgehen, ich bastel heute Nacht nochmal ne Runde dran rum.
Ich schau mir das ganze auch nochmal an.
Wenn ich eine Lösung gefunden habe lasse ich dich das Wissen.
Sag bescheid wenn du was findest.
Es hat mich gereizt, deshalb hab ichs jetzt doch gemacht...
Hab einen BubbleSort ähnlichen Sortieralgorythmus implementiert:
Code:float fhypo=0;
int ihypo=0;
float fflaeche=0;
int iflaeche=0;
int ix=1;
int iy=1;
int izaehler=0;
int ifertig=0;
int ergebnisse[400][4];
int ergebnissetemp[1][4];
while(ix<201)
{
while(iy<201)
{
fhypo = sqrt((float)(ix*ix)+(iy*iy)); //hypothenuse errechnen
ihypo = (int)fhypo;
if((fhypo-ihypo) == 0) //prüfen ob hypothenuse eine ganzzahl ist
{
fflaeche = (float)(ix * iy / 2); //fläche errechnen
iflaeche = (int)fflaeche;
if((fflaeche-iflaeche) == 0) //prüfen ob fläche eine ganzzahl ist
{
ergebnisse[izaehler][0]=ix;
ergebnisse[izaehler][1]=iy;
ergebnisse[izaehler][2]=ihypo;
ergebnisse[izaehler][3]=iflaeche;
izaehler++;
}
}
iy++;
}
iy=1;
ix++;
}
while(!ifertig)
{
ifertig=1;
for(int l=0; l<izaehler; l++)
{
if(ergebnisse[l][3]>ergebnisse[l+1][3])
{
ergebnissetemp[0][0]=ergebnisse[l][0];
ergebnissetemp[0][1]=ergebnisse[l][1];
ergebnissetemp[0][2]=ergebnisse[l][2];
ergebnissetemp[0][3]=ergebnisse[l][3];
ergebnisse[l][0]=ergebnisse[l+1][0];
ergebnisse[l][1]=ergebnisse[l+1][1];
ergebnisse[l][2]=ergebnisse[l+1][2];
ergebnisse[l][3]=ergebnisse[l+1][3];
ergebnisse[l+1][0]=ergebnissetemp[0][0];
ergebnisse[l+1][1]=ergebnissetemp[0][1];
ergebnisse[l+1][2]=ergebnissetemp[0][2];
ergebnisse[l+1][3]=ergebnissetemp[0][3];
ifertig=0;
}
}
}
for(int s=0; s<izaehler; s++)
printf("%d\t%d\t%d\t%d\n", ergebnisse[s][0], ergebnisse[s][1], ergebnisse[s][2], ergebnisse[s][3]);
getchar();
return 0;
}
Das ist auch eine gute Methode so hat man auf jedenfall die, die mindestens 2 mal vorkommen. Jetzt ist es nur daran das ganze für die, die 3 mal vorkommen abzufrage richtig?
So es läuft ;) Vielen Dank es hat Spaß gemacht :)
Hier der Quellcode.
Code:#include <stdio.h>
#include <math.h>
main()
{
int i = 0;
int n;
float fhypo = 0;
int ihypo = 0;
float fflaeche = 0;
int iflaeche = 0;
int ix = 1;
int iy = 1;
int izaehler = 0;
int ifertig = 0;
int ergebnisse[400][4];
int ergebnissetemp[1][4];
printf("Wie viele rechtwinklige und flaechengleiche Dreiecke soll das Programm suchen? ");
scanf("%d", &n);
do
{
do
{
fhypo = sqrt((float)(ix*ix)+(iy*iy));
ihypo = (int)fhypo;
if((fhypo-ihypo) == 0)
{
fflaeche = (float)(ix * iy / 2);
iflaeche = (int)fflaeche;
if((fflaeche-iflaeche) == 0)
{
ergebnisse[izaehler][0] = ix;
ergebnisse[izaehler][1] = iy;
ergebnisse[izaehler][2] = ihypo;
ergebnisse[izaehler][3] = iflaeche;
izaehler++;
}
}
iy++;
}while(iy < 250);
iy = 1;
ix++;
}while(ix < 250);
do
{
ifertig = 1;
int l;
for(l=0; l<izaehler; l++)
{
if(ergebnisse[l][3] > ergebnisse[l+1][3])
{
ergebnissetemp[0][0] = ergebnisse[l][0];
ergebnissetemp[0][1] = ergebnisse[l][1];
ergebnissetemp[0][2] = ergebnisse[l][2];
ergebnissetemp[0][3] = ergebnisse[l][3];
ergebnisse[l][0] = ergebnisse[l+1][0];
ergebnisse[l][1] = ergebnisse[l+1][1];
ergebnisse[l][2] = ergebnisse[l+1][2];
ergebnisse[l][3] = ergebnisse[l+1][3];
ergebnisse[l+1][0] = ergebnissetemp[0][0];
ergebnisse[l+1][1] = ergebnissetemp[0][1];
ergebnisse[l+1][2] = ergebnissetemp[0][2];
ergebnisse[l+1][3] = ergebnissetemp[0][3];
ifertig = 0;
}
}
}while(ifertig != 1);
again:;
int s;
do
{
s++;
if(ergebnisse[s][3] == ergebnisse[s-1][3] && ergebnisse[s][3] == ergebnisse[s-2][3] && i<n-1)
{
i++;
printf("\n--%d-------------", i);
printf("\nFlaeche: %d", ergebnisse[s][3]);
printf("\nDreieck1 (%d, %d, %d)", ergebnisse[s-2][0], ergebnisse[s-2][1], ergebnisse[s-2][2]);
printf("\nDreieck2 (%d, %d, %d)", ergebnisse[s-1][0], ergebnisse[s-1][1], ergebnisse[s-1][2]);
printf("\nDreieck3 (%d, %d, %d)\n", ergebnisse[s][0], ergebnisse[s][1], ergebnisse[s][2]);
s=s+2;
goto again;
}
else if (ergebnisse[s][3] == ergebnisse[s-1][3] && ergebnisse[s][3] == ergebnisse[s-2][3] && i == n-1)
{
i++;
printf("\n--%d-------------", i);
printf("\nFlaeche: %d", ergebnisse[s][3]);
printf("\nDreieck1 (%d, %d, %d)", ergebnisse[s-2][0], ergebnisse[s-2][1], ergebnisse[s-2][2]);
printf("\nDreieck2 (%d, %d, %d)", ergebnisse[s-1][0], ergebnisse[s-1][1], ergebnisse[s-1][2]);
printf("\nDreieck3 (%d, %d, %d)\n", ergebnisse[s][0], ergebnisse[s][1], ergebnisse[s][2]);
break;
}
}while(s < izaehler-1);
getch();
}
Simpel aber ausreichend!
Nur für das goto gehörst du eigentlich gehauen!