• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ tablice,pętle, szukanie indeksu

Object Storage Arubacloud
+1 głos
544 wizyt
pytanie zadane 4 listopada 2021 w C i C++ przez topol_123 Nowicjusz (190 p.)

Mam napisać algorytm, w którym program prosi o wpisanie liczby stolików, a następnie o podanie do każdego z nich jakiejś liczby. Po wszystkich program na wskazać, który stolik ma największą liczbę, a który najmniejszą. Mam taki kod;

#include <iostream>

using namespace std;

int stoliki[1000000];
int MAX;
int MIN;
int main ()
{
    int n,i;
    cin >> n;

    for( i=0; i<n; i++)
    {
        cin >> stoliki[i];
    }

    MAX=stoliki[0];
    MIN=stoliki[0];
    for( i=0; i<n; i++)
    {
        if(stoliki[i]>MAX)
            MAX=stoliki[i];
            

        if(stoliki[i]<MIN)
            MIN=stoliki[i];
            
    }
    cout << MAX << MIN;

    return 0;
}

 

Chcę aby na wyjściu były pozycje (indeksy) na których jest MAX i MIN. Jak to zrobić?

2 odpowiedzi

0 głosów
odpowiedź 4 listopada 2021 przez TOM_CPP Pasjonat (22,640 p.)

Po wyliczeniu wartości MAX , MIN dodajesz pętle for w której wyszukujesz interesujące Cię indeksy.

for( int index {0} ; index<n ; ++index )
{
    if( stoliki[index] == MAX ) cout << "Wartość maksymalna - " << index << endl;
    if( stoliki[index] == MIN ) cout << "Wartość minimalna - " << index << endl;
}

 

komentarz 4 listopada 2021 przez topol_123 Nowicjusz (190 p.)

 

Mam taki oto błąd, zrobiłem tak jak napisałeś tylko usunąłem "wartosc maksymalna" i dodałem do cout << index+1; żeby liczyło mi indeksy od 1, a nie od 0

 

#include <iostream>

using namespace std;

int stoliki[1000000];
int MAX;
int MIN;
int main ()
{
    int n,i;
    cin >> n;

    for( i=0; i<n; i++)
    {
        cin >> stoliki[i];
    }

    MAX=stoliki[0];
    MIN=stoliki[0];
    for( i=0; i<n; i++)
    {
        if(stoliki[i]>MAX)
            MAX=stoliki[i];

        if(stoliki[i]<MIN)
            MIN=stoliki[i];
    }

    for( int index {0} ; index<n ; ++index )
{
        if( stoliki[index] == MAX )
        cout << index+1 << " ";
        if( stoliki[index] == MIN )
        cout << index+1;
}

    return 0;
}

komentarz 4 listopada 2021 przez TOM_CPP Pasjonat (22,640 p.)
edycja 4 listopada 2021 przez TOM_CPP

To nie jest błąd - tylko inny format wypisywania indeksów. Jeżeli w programie wymagane jest aby indeksy dla wartości maksymalnych były wypisywane na początku to zamień to na dwie pętle.

for( int index {0} ; index<n ; ++index )
{        
    if( stoliki[index] == MAX ) cout << index+1 << " ";
}

for( int index {0} ; index<n ; ++index )
{
    if( stoliki[index] == MIN ) cout << index+1 << " "; 
}

lub możesz użyć do tego zmiennych typu std::string.

string max_indices {}, min_indices {};

for( int i {0} ; i<n ; ++i )
{
     if( stoliki[i] == MAX ) max_indices += to_string(i) + " ";
     if( stoliki[i] == MIN ) min_indices += to_string(i) + " ";
}

cout << max_indices << endl << min_indices << endl;

 

komentarz 4 listopada 2021 przez topol_123 Nowicjusz (190 p.)
A co w przypadku gdy MAX=MIN? Tak aby mi podało np indeks 1 1
komentarz 4 listopada 2021 przez TOM_CPP Pasjonat (22,640 p.)

Kiedy MAX == MIN to wszystkie wartości w tablicy muszą być identyczne. Wtedy po prostu wypisujesz indeksy jak leci, gdyż każdy element jest równocześnie maksymalnym jak i minimalnym.

komentarz 4 listopada 2021 przez topol_123 Nowicjusz (190 p.)
Okej, dziękuje ślicznie
0 głosów
odpowiedź 4 listopada 2021 przez VBService Ekspert (252,780 p.)

Może spróbuj przez "zapamiętanie" indeksu dla MAX i MIN

 

przykład

#include <iostream>
 
using namespace std;
 
int stoliki[1000000];
int MAX=0, MIN=0;

int main ()
{
    int n, i;
    cin >> n;
 
    for (i=0; i<n; i++)
    {
        cin >> stoliki[i];
        
        if (stoliki[MAX]<stoliki[i])
            MAX = i;
 
        if (stoliki[MIN]>stoliki[i])
            MIN = i;        
    }

    cout << MAX + 1 << " " << MIN + 1;
    return 0;
}

 

1
komentarz 4 listopada 2021 przez topol_123 Nowicjusz (190 p.)

Pytałem się znajomego co troszkę programuje i też mi doradzał żeby zrobił coś takiego

 MIN/MAX = i;

Ale nie potrafiłem tego zaimplementować xD Zapis jest dużo prostszy od tego co napisałem i bardziej czytelny, dziękuje :D

Podobne pytania

0 głosów
2 odpowiedzi 405 wizyt
pytanie zadane 10 stycznia 2018 w C i C++ przez Sansi Użytkownik (720 p.)
+1 głos
2 odpowiedzi 362 wizyt
pytanie zadane 19 stycznia 2016 w C i C++ przez Lukasz95 Bywalec (2,160 p.)
+3 głosów
1 odpowiedź 242 wizyt

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...