Größte Zahl suchen

Status
Nicht offen für weitere Antworten.
for-Schleifen sind trotzdem besser als while-Schleifen, weil da alles wichtige schon direkt im Schleifenkopf steht. Bei while-Schleifen kann man schnell mal vergessen, die Zählervariable zu erhöhen und man landet in einer Endlosschleife - aber der Compiler übersetzt alles anstandslos. Das kann bei for nicht passieren.
Schleifen mit while sind eher geeignet, wenn Du mit booleschen Variablen arbeitest:
Code:
while (!variable)
{
    variable = funktion();
}
 
Ich gehe mal davon aus, daß dein Vektor Elemente vom Typ int enthält, dann kannst du einfach einen #define verwenden, der den minimalen Wert eines Integers enthält.
Dann kannst du in einer Schleife die Werte vergleichen und feststellen, welches Element das größte ist.
Code:
#include <limits.h> // dort stehen die defines drin
#include <iostream>

int highvalue = INT_MIN;
for (int i=0; i < Vektor.size(); i++)
{
  if(Vektor[i] > highvalue)
    highvalue = Vektor[i];
}
cout << highvalue; // das ist dann dein größter Wert

Gruss Homer
 
du hast nur was vergessen homer....
wenn die reihenfolge nun so aussieht.... 1, 2, 42, 4, 6
dann ist 42 die größte zahl, aber da er der reihe nach geht, ist dann auch wiederrum 6 größer als die 4, und dann wäre für das progamm 6 die größte zahl...

hab hier mal ein anderes beispiel, is aber doch sicher gleich mit den vektoren?!

Code:
#include <stdio.h>

int main(int argc, char **argv)
{

	int IDs[] = {1, 42, 4, 6, 5, 3, 235, 2, 6824, 1, 0, -45};
	int iID = 0, last = 0;
	
	for(int i = 0; i < (sizeof(IDs)/sizeof(int)); i++)
	{
		if(IDs[i] > last)
			iID = IDs[i];

		if(last < IDs[i])
			last = IDs[i];

	}

	printf("Die Groesste Zahl ist: %i\n", iID);
	return 0;
}
 
du hast nur was vergessen homer....
wenn die reihenfolge nun so aussieht.... 1, 2, 42, 4, 6
dann ist 42 die größte zahl, aber da er der reihe nach geht, ist dann auch wiederrum 6 größer als die 4, und dann wäre für das progamm 6 die größte zahl...
Ähm sorry, aber schau dir mal den Quellcode genauer an, denn die
Reihenfolge spiel überhaupt keine Rolle. Die highvalue Variable
wird zunächst mal auf einen minimalen integer Wert gesetzt und
dann wird jedes Element überprüft, ob es größer als diese
highvalue ist, wenn ja, dann wir der Wert highvalue zugewiesen.
(Standartalgorithmus für min/max)

Gruss Homer
 
Servus!

Wäre es nicht effizienter den Vector zuerst mit qicksort / mergesort zu sortieren, dann die länge des Vectors festzustellen und anschliessend das letzte Element auszuwählen ?

Gruss Tom
 
Original geschrieben von tdar2
Servus!

Wäre es nicht effizienter den Vector zuerst mit qicksort / mergesort zu sortieren, dann die länge des Vectors festzustellen und anschliessend das letzte Element auszuwählen ?

Gruss Tom

In dem Fall wär es sogar noch etwas einfacher, das Array absteigend zu sortieren. Dabei sparst Du Dir den zweiten Schritt, weil Du direkt auf das erste Element zugreifen kannst. ;)
 
Goil!

Erst hatte ich gar keine Möglichkeiten und jetzt sogar 2 zur Auswahl, vielen Dank rook und homer! Eure beiden Scripte funktionieren. Aber auch danke an alle anderen, die sich bemüht haben(!)

Die IDs sind in dem Vektor nen String und müssen daher vorher nochmal konvertiert werden. Hier jetzt die beiden Versionen von rook und homer für mich angepasst:
Code:
	const char* sID;
	int iID;

	int highvalue = INT_MIN;
	for (int j=0; j < Vektor.size(); j++)
	{
		sID = Vektor[j].id.c_str();
		iID = atoi(sID);

		if(iID > highvalue)
			highvalue = iID;
	}

	stringstream intToStr;
	intToStr << highvalue+1;
	intToStr >> put.id;
	intToStr.clear();

Code:
	const char* sID;
	int iID;

	int temp, last=0;

	for(int j = 0; j < Vektor.size(); j++)
	{

		sID = Vektor[j].id.c_str();
		iID = atoi(sID);
		
		if(iID > last)
			temp = iID;

		if(last < iID)
			last = iID;
	}

	stringstream intToStr;
	intToStr << temp+1;
	intToStr >> put.id;
	intToStr.clear();

@Homer
Das limits.h ist nicht Ansi-kompatibel, oder? Das ist dummerweise Vorgabe bei dem Programm :( Wobei bei mir eh Sachen mit drin sind, die nicht drin sein sollten, egal. Hab jetzt rooks Version genommen, trotzdem vielen Dank alle Beteiligten.
 
tschuldige homer... das is mir garnich aufgefallen *g*
ich war zu sehr in mein programm vertieft....
 
Das limits.h ist nicht Ansi-kompatibel, oder?
Ich glaube schon, denn man kann es auch unter UNIX verwenden, denn es ist Teil der libc.
Außerdem könntest du dir diesen define auch selbst erstellen:

Auszug aus der limits.h der libc unter Linux
Code:
/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MAX       2147483647
#  define INT_MIN       (-INT_MAX - 1)

/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
#  define UINT_MAX      4294967295U
Aber Vorsicht: Unterschiede zwischen signed und unsigned !!!

tschuldige homer... das is mir garnich aufgefallen *g*
ich war zu sehr in mein programm vertieft....
Kein problem *g*

Gruss Homer
 
Status
Nicht offen für weitere Antworten.
Zurück