WinFuture-Forum.de: Unregelmäßiges Vieleck - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Unregelmäßiges Vieleck in java


#1 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 322
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

  geschrieben 03. März 2005 - 20:45

hi!

Ich hoff ihr könnt mir bissl helfen: und zwar hab ich folgende Angabe:

Die Zahl N der Eckpunkte eines unregelmäßigen Vielecks sei einzugeben. Weiters soll der ABstand vom Eckpunkt i zum Eckpunkt i+1 gleich d[i] sein (d[i] > 0). Zu ermitteln ist dasjenige Eckpunktepaar, das den Umfang des unregelmäßigen Vielecks bestmöglich halbiert.

Beispiel:
Anzahl der Eckpunkte: 5
Abstand Eckpunkt 1 - Eckpunkt 2: 12
E2-E3: 10
E3-E4: 8
E4-E5: 11
E5-E1: 13

Die Eckpunkte 2 und 5 halbieren den Umfang bestmöglich.

Sodale.. in der Theorie kann ich das Beispiel zwar durchrechnen und auf einem Blatt Papier genauso .. allerdins steh ich bei der Programmierung total an.. :/

Also halt die ganzen Abstände und Eckpunkte eingeben ist ja nicht das Problem sondern dann der Schluss!

In dem ganzen Kapitel geht es um Arrays .. also nix Großartiges :P

Hier mal der Anfang von dem Projekt (der Code wird noch optimiert ^^)
public class UVieleck
{
  public static void main(String[]args)
  {
	int eckpunkte=Console.readInt("Bitte die Anzahl der Eckpunkte eingeben: ");
	if(eckpunkte<3)
	{
   do
   { eckpunkte=Console.readInt("Falsche Eingabe! Bitte wiederholen und min. 3 Eckpunkte: "); // müssen ja mehr als 3 Seiten sein, sonst wär es ja kein "Vieleck"
   }while (eckpunkte<3);
	}//if

	int[] d= new int[eckpunkte];
	for(int i=0; i<d.length; i++)
	{
    d[i]=Console.readInt("Bitte den "+(i+1)+"ten Abstand eingeben: ");

   if(d[i]<=0)
          {
     do
     { d[i]=Console.readInt("Falsche Eingabe! Bitte wiederholen: ");
     }while (d[i]<=0);
   }//if
    }//for

 	 int umfang=0;

 	 for(int j=0; j<d.length; j++)
  umfang+= d[j];
  System.out.println(umfang); // war nur zum Test ob eh alles funktioniert;)
  }//main
}//class


Ich sag schon mal Danke, falls sich wer über dieses Beispiel drüber traut :D

greez
0

Anzeige



#2 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 322
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

geschrieben 07. März 2005 - 19:59

hat echt keiner ne ahnung wie ich das am besten programmiern kann?

ich steh bei dem beispiel total an .. ka warum :/
0

#3 Mitglied ist offline   tosto 

  • Gruppe: aktive Mitglieder
  • Beiträge: 432
  • Beigetreten: 08. Januar 04
  • Reputation: 0

geschrieben 07. März 2005 - 21:23

könntest du mal den rechenweg hinschreiben wie du auf die eckpunkte 2 und 5 kommst.
das wären die beiden strecken e1-e2 und e5-1, würde am nächsten an die hälfte des umfangs kommen.

mit schleifen und arrays wäre das sogar bei einer variablen anzahl an eckpunkten möglich.
code überleg ich mir mal morgen, allerdings kann ich kein java und könnts nur halbwegs allgemein machen...

ciao
0

#4 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 322
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

geschrieben 07. März 2005 - 22:10

jobb ich hau dir da mogen den genaugen rechengang rein..

es soll ja auch variabel sein ;D das war nur ein beispiel dazu :veryangry:

ich glaub arrays und schleifen sind vom prinzip her eh ziehmlich ähnlich in den verschiedensten sprachen .. von daher .. ich bin ja nur glücklich wenn überhaupt was brauchbares kommt ;D

greez

edit:

also zum rechengang:

ich hab einfach alle abstände der reihe nach durchprobiert .. geschaut ob diese passen, wenn nicht den nächsten abstand dazu und wieder usw .. bis ich dann eben auf diese länge da komm.. ist halt leider irgenwie blöd zum erklären mit worten

wie gesagt .. variabel wär halt am besten weil das ganze programm variabel sein sollte

Dieser Beitrag wurde von bluescorp bearbeitet: 08. März 2005 - 19:08

0

#5 Mitglied ist offline   tosto 

  • Gruppe: aktive Mitglieder
  • Beiträge: 432
  • Beigetreten: 08. Januar 04
  • Reputation: 0

geschrieben 09. März 2005 - 21:15

also.
erstmal lassen wir den user eingeben wieviele eckpunkte. =x
dann setzen wir das erste array mit x feldern.
dann lassen wir den user für jedes array feld den abstand eingeben von punkt e1-e2,e2-ex.
zweites array mit der maximalen möglichen anzahl an zusammenrechenbaren längen:
(ich bekomm die formel nicht hin, jemand anderes vll?)
dann in einer schleife alles zusammenzählen lassen.
umfang berechnen.
nächstes array.
füllen mit: umfang/berechnete längen.
das kann man wieder in ner while schleife machen.
dann vergleichen, das kleinste gewinnt.
dann die array nummer nehmen, anhand deren lässt sich dann ausgeben welche strecken es sind (array2).

so code ist in der entwicklung, zumindest für einzelne teile, ich werds in c bzw. c++ machen, es dürfte aber vom verständniss her kopierbar sein.

code:
//verrechnen der variablen
for (int y=0,int z=1;y<=x;)      //y für summand1 und z für summand2
{                               //x=maximale anzahl an verrechenbaren seiten
    array2[z]=array1[y]+array1[z];
    if(z==x)                        //wenn summand2 das ende erreicht hat
    {                               //wird y um eins hoch, und z bekommt y
        y++;                        //dadurch wird z nie kleiner y und man
        z=y;                        //addiert nicht zweimal 2 paare
    }
    z++;
}

//umfang/berechnete werte
for (z=0;z<=x;z++)        //z für array platz
{                        //x=maximale anzahl an verrechenbaren seiten
    array3[z]=umfang/array2[z];
}


//vergleich
if(array3[0]<=array3[1]){
    n=array3[0];
}
else{
    n=array3[1];
}
for(z=2;z<=x;z++){
    if(n<=array3[z])
    else{
    n=array3[z];
    }
}


hoffe das stimmt.
bin grad ziemlich neben der kappe...
bekommste dann den rest hin?
noch ein vergleich n==array3[x] und dann haste die kürzeste strecke mit array angabe, wenn man oben beim verrechnen ein array macht mit den verrechneten strecken ist die ausgabe wieder leicht.

ciao

Dieser Beitrag wurde von tosto bearbeitet: 10. März 2005 - 14:27

0

#6 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 322
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

geschrieben 10. März 2005 - 15:41

wegen der formel.. sollte eigentlich so funktionieren.. also wie ichs getestet hab gings

for(int i=d.length;i>0;--i)
max=max*i;


ich hab schon mal so ziemlich alles gemacht wie du gesagt hast, ich versuch mal alles heut am abend zusammen zu bauen.. ich hoff es funktioniert dann

ich sag schon mal danke für die bemühung!

greez
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0