Avatar billede zehrid Nybegynder
18. oktober 2005 - 02:20 Der er 10 kommentarer og
1 løsning

find den største af vilkårligt atal indtastede positive tal

Jeg skal lave et program, der kan finde ud af, hvilket af et vilkårligt antal indtastede positive heltal, der er det største. Det største tal udskrives, når tallet nul er indlæst. Tallet nul bruges altså som stopværdi i programmet. Hjælp :-)
Avatar billede zehrid Nybegynder
18. oktober 2005 - 07:56 #1
Her er min kode.. Jeg brugte bubble sorteringsalgoritme..

#include <iostream>

using namespace std;

void swap(int &m, int &n);

int main() {

    int a[5];
    int n =0;
   
       
    do {
        cin>>a[n];
        n++;
    }
       
    while(a[n-1]!=0);
   
    int numberOfElements = sizeof(a) / sizeof(int);

    for (int i = 0; i < ( numberOfElements - 1); i++) {
   
    int minIndex = i;
   
      // Find the index of the minimum element
        for (int j = i + 1; j < numberOfElements; j++) {
   
            if (a[j] < a[minIndex]) {
   
            minIndex = j;
            }
        }
   
          // Swap if i-th element not already smallest
            if (minIndex > i) {
               
            swap(a[i], a[minIndex]);
            }
    }
   
    if (a[numberOfElements-1]>0)
   
        cout << "The highest number is "<< a[numberOfElements-1]<<endl;
       
    else
        cout<< "You haven't typed any positive number.";

    return 0;
}

void swap(int &x, int &y) {
   
    int temp;

    temp = x;
    x = y;
    y = temp;
}


Problemet er at jeg får den rigtige resultat kun hvis jeg indtaster det antal elementer som arrayet er er initialiseret med, altså! Det er fordi at min numberOfElements variebel får en forkert værdi hvis jeg indtaster flere/mindre end 5 værdier.. Hvad gør jeg? Jeg ved jo ikke i forvejen hvor mange værdier brugeren vil indtaste men jeg skal jo initialisere arrayet i starten ikk? hjælp
Avatar billede zehrid Nybegynder
18. oktober 2005 - 08:52 #2
Dette kan dog gøres uden sorteringsalgoritmen:

#include <iostream>

using namespace std;



int main() {

    int a[5];
    int n =0;
   
       
    do {
        cin>>a[n];
        n++;
    }
       
    while(a[n-1]!=0);
   
    int maximum = a[0];
   
    for (int i = 1; i < 5; ++i) {
        if (a[i] > maximum)
            maximum = a[i];
    }

    // Announce the result
    cout << "The highest member value of the array is "
            << maximum << "." << endl;
   
    return 0;
   
}

men jeg får samme problem igen :(
Avatar billede arne_v Ekspert
18. oktober 2005 - 09:15 #3
for (int i = 1; i < 5; ++i) {

skal nok være

for (int i = 0; i < n; ++i) {
Avatar billede zehrid Nybegynder
18. oktober 2005 - 09:47 #4
det virker ! :-) tak Arne. men kan jeg godt undgå at definere størrelsen af arrayet i starten af programmet? det er jo bare "spild af hukommelse" hvos jeg sætter arrayet til at være f.eks. 50 og brugeren bare indsætter f.eks. 2 værdier?

og du får points selvfølgelig
Avatar billede arne_v Ekspert
18. oktober 2005 - 09:52 #5
hvis du vil håndtere vilkårligt antal så skal du skifte til STL vector !
Avatar billede arne_v Ekspert
18. oktober 2005 - 09:53 #6
og et svar
Avatar billede zehrid Nybegynder
18. oktober 2005 - 09:55 #7
ok tak for svaret :-)
Avatar billede arne_v Ekspert
18. oktober 2005 - 10:16 #8
eksempel på vector:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  vector<int> v;
  for(int i=0;i<10;i++) v.push_back(i);
  for(int i=0;i<10;i++) cout << v[i] << endl;
  return 0;
}
Avatar billede bertelbrander Novice
18. oktober 2005 - 11:23 #9
#include <vector>
#include <iostream>

int main()
{
  std::vector<int >Vector;
  int i;
  do
  {
      std::cin >> i;
      if(i)
        Vector.push_back(i);
  }
  while(i);
  std::vector<int>::iterator Max = std::max_element(Vector.begin(), Vector.end());
  std::cout << "Max: " << *Max << std::endl;
}
Avatar billede bertelbrander Novice
18. oktober 2005 - 11:30 #10
Eller hvis man er til arrays:
#include <iostream>
#include <algorithm>

int main()
{
  #define NOK 1024
  int Array[NOK], n = 0, i;
  do
  {
      std::cin >> i;
      if(i)
        Array[n++] = i;
  }
  while(i);
  int *Max = std::max_element(Array, &Array[n]);
  std::cout << "Max: " << *Max << std::endl;
}
Avatar billede thomas_nj Nybegynder
18. oktober 2005 - 19:55 #11
Tænkte på lyder din opgave ikke bare at finde det største tal? Hvis de resterende er ligegyldige behøver du vel ikke gemme dem i en vector/ et array, men kun gemme den største.

#include <iostream>

using namespace std;

int main()
{
  int input=1;
  int biggest=0;

  do
    {
      cout<<"Intast et tal"<<endl;
      cin>>input;

      if(input>biggest)
    {
      biggest=input;
    }
    } while(input!=0);
  cout<<"Stoerste input: "<<biggest<<endl;
  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester