Jak porównać wartość w tablicy


Piszę więc program, który prosi użytkownika o podanie liczby naleśników, które osoba (1-10) zjadła na śniadanie. Program powinien przeanalizować wprowadzone dane i określić, która osoba zjadła najwięcej naleśników. Ponadto program powinien podawać w kolejności liczbę naleśników zjadanych przez wszystkie 10 osób. Do tej pory napisałem kod, aby uzyskać dane wejściowe użytkownika i kod do wyświetlania tablicy, ale nie w kolejności. Jestem całkowicie zagubiony, jeśli chodzi o porównywanie elementów w tablicy:
int getPancakes();
void displayArray(int theArray[],int sizeOfArray);
void compareArray(int sizeOfArray);
int pancakes[10];
int z = 0;int main()
{
}int getPancakes(){
int y;
int x = 0; for(int y = 0; y < 10; y++){
++x;
cout << "How many pancakes did person " << x << " eat?" << endl;
cin >> pancakes[y];
}
}void displayArray(int theArray[],int sizeOfArray){
for(int x = 0 ;x < sizeOfArray ; x++){
++z;
cout << "Person " << z << " ate " << pancakes[x] << " pancakes" << endl;
}
}

Jak więc mogę poinstruować mój program, aby porównywał elementy w tablicy? Co więcej, w jaki sposób mogę poinstruować program, aby wydrukował listę naleśników, z których każda osoba zjadła po kolei?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Aby dowiedzieć się, kto zjadł najwięcej naleśników, po prostu musisz znaleźć pozycję maksymalnej wartości w tablicy.
int findMaxPosition(int array[], int arraySize){
int maxPosition = 0;//assume the first element is maximum
for(int i = 1; i < arraySize; i++)
if(array[i] > array[maxPosition])//compare the current element with the known max
maxPosition = i;//update maxPosition
return maxPosition;
}

Zwróć uwagę, że daje to pierwsze wystąpienie maksymalnej wartości. Jeśli przedmioty są wyjątkowe, to jest ładne. W przeciwnym razie musisz znaleźć maksymalną wartość tablicy [maxPosition], iterować po tablicy i wyświetlić każdą pozycję, w której występuje.
Sortowanie jest trochę skomplikowane. Algorytmy sortowania nie są takie proste i obawiam się, że jeśli napiszę Ci implementację, nie będę w stanie Ci pomóc.
Jednym z najprostszych algorytmów sortowania jest sortowanie bąbelkowe. Wikipedia (

http://en.wikipedia.org/wiki/ Bubble_sort
http://en.wikipedia.org/wiki/Bubble_sort) ma szczegółową stronę na ten temat i powinieneś być w stanie zaimplementować to za pomocą podanego tam pseudokodu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie ma potrzeby przeszukiwania tablicy w poszukiwaniu Maxa, ale

następnie

posortuj go, aby uzyskać wynik. Zamiast tego możesz po prostu śledzić maksymalną wartość znalezioną podczas fazy wprowadzania danych:
int getPancakes(){
int max = 0;
for(int y = 0; y < 10; y++){
cout << "How many pancakes did person " << y << " eat?" << endl;
cin >> pancakes[y];
if (pancakes[y]>pancakes[max]){
max = y;
}
}
return max;
}

Zwróć uwagę, że usunąłem zbędną deklarację
y
(deklarujesz ją w pętli
for
) i
x
(zawsze będzie równa
y ). 

Dodałem także powrót do funkcji (INDEKS osoby, która jadła najwięcej), ponieważ nie masz wartości zwracanej. (Albo zwróć coś, albo niech funkcja zwróci[code]void
(bez powrotu)).

Jeśli zależy Ci tylko na maksymalnej zjadanej ilości, nie musisz nawet mieć na oku Maxa. Zamiast tego po prostu przeczytaj największą wartość z tablicy po kroku sortowania. [/code]Teraz wszystko, co musisz zrobić, to zaimplementować
void sortArray ()
i wywołać go przed wywołaniem funkcji display:
int main()
{
int max = getPancakes();
sortArray();//left to you to implement
displayArray(pancakes,10);
}

Możesz ustawić naleśniki lokalnie w
main
i przekazać je do swoich funkcji w ten sam sposób, w jaki robisz to
displayArray
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli wszystkie liczby są niepowtarzalne
int max = 0;
for(int x = 0 ;x < 10 ; x++)
{
if(pancakes[x] > max)
max = pancakes[x];
}
for(int x = 0 ;x < 10 ; x++)
{
if(pancakes[x] == max)
cout << "Person " << x << " ate " << pancakes[x] << " pancakes - biggest number" << endl;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Mówiąc wprost, istnieją dwie metody porównywania elementu tablicy z inną wartością: bezpośrednia i przez kopiowanie.
// Make a copy:
int count = pancakes[x];
if (count == limit)
{
//...
}// Direct access
if (pancakes[x] == limit)
{
//...
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Właśnie skończyłem wymyślać rozwiązanie dla tego samego ćwiczenia dla części „kto zjadł najwięcej”, nawet jeśli jest więcej niż jedna osoba, która zjadła najwięcej naleśników. Obejmuje tablice i wektory. Przetestowane i działające:
#include <iostream>
#include <array>
#include <vector>
using namespace std;int main()
{
array <int, 10> PancakeEater;
vector<int> Winners;
int max;
cout << "Type number of pancakes eaten, separated by spaces, for each of the ten contestants:" << endl;
cout << "#1 #2 #3 #4 #5 #6 #7 #8 #9 #10" << endl; for (int i = 0; i < PancakeEater.size(); i++)
{
cin >> PancakeEater[i];
} max = PancakeEater[0];
Winners.push_back(1);
for (int i = 0; i < PancakeEater.size()-1; i++)
{ if (max == PancakeEater[i + 1])
{
Winners.push_back(i + 2);
}
if (max < PancakeEater[i + 1])
{
max = PancakeEater[i + 1];
Winners.clear();
Winners.shrink_to_fit();
Winners.push_back(i + 2);
}
}
if (Winners.size() > 1)
{
cout << endl << "The contestants that ate the most pancakes, on a tie for first place, are contestant numbers " << endl;
for (auto item : Winners)
{
cout << item << " ";
}
}
else
{
cout << endl << "The contestant that ate the most pancakes is contestant number " << endl;
for (auto item : Winners)
{
cout << item << " ";
}
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się