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

Przy podaniu dwóch takich samych liczb pokazuje index pierwszej nie drugiej.

Object Storage Arubacloud
0 głosów
446 wizyt
pytanie zadane 12 listopada 2019 w C i C++ przez KonDZIKs Bywalec (2,770 p.)

Witam. :)
Mam pewien problem mianowicie muszę podać index dwóch liczb najmniejszej i największej. Z czego index największej liczby musi wyświetlić ostatni położenie liczby.
Przykład:
10, 2, 12 ,4 ,12
Program pokaże:
Najmniejsza liczba: 2
IndexNajmniejszej: 2
Największa liczba: 12
IndexNajwiększej: 3 a powinno pokazać 5.

Kod:

#include <iostream> 
#include <cstdlib>
#include <ctime>
using namespace std;
int tab[1000], najwiekszy=tab[ 0 ], najmniejsza=tab[0];
int indexNajwiekszejLiczby = 0; 
int indexNajmniejszejLiczby = 0;
  
int main(int argc, char** argv) {
  
          
        for(int i=1; i<=1000; i++)
        {
            //cin>>tab[i];
        	//cin>>tab[i];
			do {
            
            cin>>tab[i];
        } while (tab[i] < -500 || tab[i] > 500);
            //cin>>tab[i];
            if(tab[i]==0)
            {
                for (int i=1; i<=1000;i++){
                if(tab[i] > najwiekszy){
                najwiekszy=tab[i];
                indexNajwiekszejLiczby = i;
            }
        }
        
        		for (int j=1; j<=1000;j++){
        			if(tab[j] < najmniejsza){
        				najmniejsza=tab[j];
        				indexNajmniejszejLiczby = j;
					}
				}
        cout <<endl<<najmniejsza<<endl<< indexNajmniejszejLiczby<<endl<<najwiekszy<<endl<<indexNajwiekszejLiczby;  
            exit (0);
            }
  
        }
        for(int i=1; i<=1000; i++)
        {
            cout<<tab[i]<<endl;
        }
          
    return 0;
}

Nie mam pojęcia co zrobić aby wskazać na ostatni index a nie na pierwszy.

komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)
Ja już nie wiem co tu może działać źle spoj wyrzuca błędną odpowiedź...
komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
#include <iostream>

using namespace std;

int main()
{
	int num;
	int smallest = 500;
	int smallestIndex = 0;
	int biggest = -500;
	int biggestIndex = 0;
	int counter = 0;
	while (cin >> num)
	{
		counter++;
		if (num >= biggest)
		{
			biggest = num;
			biggestIndex = counter;
		}
		if (num < smallest)
		{
			smallest = num;
			smallestIndex = counter;
		}
	}
	cout << smallest << endl << smallestIndex << endl << biggest << endl << biggestIndex;

	return 0;
}

Spróbuj z tym.

komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)

Wyrzuca błędną odpowiedz dodałem if'a z przedziałem ale to nic nie pomogło

#include <iostream>
 
using namespace std;
 
int main()
{
    int num;
    int smallest = 0;
    int smallestIndex = 0;
    int biggest = 0;
    int biggestIndex = 0;
    int counter = 0;
    while (cin >> num)
    {
    	if(num < -500 || num > 500)
    	{
    		break;
		}
		{
	        counter++;
	        if (num >= biggest)
	        {
	            biggest = num;
	            biggestIndex = counter;
	        }
	        if (num < smallest)
	        {
	            smallest = num;
	            smallestIndex = counter;
	    	}
    	
		}
    }
    cout << smallest << endl << smallestIndex << endl << biggest << endl << biggestIndex;
 
    return 0;
}

 

komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
To musisz chyba szukać w necie, albo poczekać na kogoś bardziej obeznanego ze spojem.
komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)
Chyba rozgryzłem bo w tym kodzie co ty wysłałeś i ja dodałem if'a nie pokazuję liczby najmniejszej chyba ,że jest mniejsza od 0.

1 odpowiedź

–1 głos
odpowiedź 12 listopada 2019 przez mmarszik Mądrala (7,390 p.)
edycja 12 listopada 2019 przez mmarszik

Mniej/więcej tak, ale przeanalizuj kod, nie kopiuj:

#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <random>
#include <algorithm>

class MyException : public std::exception {
private:
    const std::string swhat;

public:
    MyException( const char *const swhat ) : swhat(swhat) {
    }

    virtual const char* what() const throw(){
        return swhat.c_str();
    }
};

static int getSize() {
    std::cout << "Podaj rozmiar: ";
    int n;
    std::cin >> n;
    if( std::cin.fail() || n < 1) {
        throw MyException("Nieprawidłowy rozmiar");
    }
    return n;
}


static int getMin() {
    std::cout << "Podaj minimum przedziału: ";
    int n;
    std::cin >> n;
    if( std::cin.fail() ) {
        throw MyException("Nieprawidłowe minimum");
    }
    return n;
}

static int getMax(const int min) {
    std::cout << "Podaj maksimum przedziału: ";
    int n;
    std::cin >> n;
    if( std::cin.fail() || n < min ) {
        throw MyException("Nieprawidłowe maksimum");
    }
    return n;
}


int main(int argc, char *argv[]) {
    try {
        std::vector<int> rnds;
        const int seed = (int)time(NULL);
        std::cout << "seed = " << seed << std::endl;
        const int size = getSize();
        const int min = getMin();
        const int max = getMax(min);
        std::ranlux48 generator( seed );
        std::uniform_int_distribution<int> distribution(min,max);
        for( int i=0 ; i<size ; i++ ) {
            rnds.push_back( distribution(generator) );
        }
        for( int i=0 ; i<rnds.size() ; i++ ) {
            std::cout << i << " " << rnds[i] << std::endl;
        }
        //Własna implementacja
        int imax=0,imin=0;
        for( int i=1 ; i<rnds.size() ; i++ ) {
            if( rnds[imax] < rnds[i] ) {
                imax = i;
            }
            if( rnds[imin] >= rnds[i] ) {
                imin = i;
            }
        }
        std::cout << "rnds[" << imin << "] == " << rnds[imin] << std::endl;
        std::cout << "rnds[" << imax << "] == " << rnds[imax] << std::endl << std::endl;

        //Biblioteczna
        imax = std::max_element(rnds.begin(), rnds.end()) - rnds.begin();
        imin = std::distance( rnds.begin() , std::min_element(rnds.rbegin(), rnds.rend()).base() ) - 1;
        std::cout << "rnds[" << imin << "] == " << rnds[imin] << std::endl;
        std::cout << "rnds[" << imax << "] == " << rnds[imax] << std::endl << std::endl;

    }
    catch( std::exception &e ) {
        std::cout << "Wystapił błąd: " << e.what() << std::endl;
    }
    return 0;
}

 

komentarz 12 listopada 2019 przez mokrowski Mędrzec (155,460 p.)

@mmarszik,

Jak to wyrwane z kontekstu?

Chłopie, weź wypij melisę ;-) Napisałem że wszyscy cytują Knuth'a, a niewielu przeczytało oryginalny esej. Tam masz całe stanowisko z którym osobiście się zgadzam. Polecam przeczytać to będziesz wiedział co też napisał dokładnie o przedwczesnej optymalizacji i w jakim kontekście. Zanim będziesz pędził na czerwoną płachtę i gryzł, proszę ... przeczytaj :) Jak przeczytasz zobaczysz że z wieloma tezami łatwo się zgodzić i że "popularny cytat" jest wyrwany z kontekstu a problem nie jest taki prosty jak tłuką do łbów na studiach lub popularnych książkach :-) Klasyków naprawdę warto czytać.

Dlatego nie odniosę się do tego co napisałeś bo myślę że lektura trochę zmieni :) No i seans odnoście Qt i jego kontenerów :)

komentarz 12 listopada 2019 przez mokrowski Mędrzec (155,460 p.)

@tkz, wiesz.. ja uruchamiałem na ARM GNU/Linux i OSX. Skąd mogę wiedzieć jaki Ty masz toolchain i kompilator? Spodziewam się np. że na Visual Studio MS, będzie inny wynik bo akurat to środowisko stosuje inne opcje alokatora domyślnie (tego jestem pewien). Niestety wybacz, ale nie pamiętam dokładnie jakie to parametry algorytmów dla VS

PS. Sprawdziłem dla VS: 98 vs 21.

https://rextester.com/l/cpp_online_compiler_visual

komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
W tym sensie. Myślałem, że kompletnie inaczej niż obstawiałeś. Mój wynik na mingw.
komentarz 13 listopada 2019 przez mmarszik Mądrala (7,390 p.)

@mokrowski,
To w końcu jest pędzenie na czerwoną płachtę, czy udzielanie zacnej nauki i życzliwch rad? :D Widzisz, ja nie mogę mieć uwag do Ciebie, bo to pędzenie na czerwoną płachę, a Ty możesz, bo udzielasz mi zacnej nauki i dobrze życzysz :)

Myślę, że obaj byśmy się czegoś od siebie nauczyli. Ale powtarzam, musisz wiziąć poprawkę na moje stanowisko: pomagam ludziom pisząc na szybko przykładowy program który rozwiązuje ich zadanie lub zadanie zbliżone do ich zadania. Jak ktoś początkujący mój program przeanalizuje, to się wiele nauczy.

Jak widzisz błędy, np. UB, albo blędy algorytmiczne, w moim kodzie, to naprawdę będę wdzięczny za ich wskazanie, wtedy naprawdę czegoś się od Ciebie nauczę. Ale reszta to jest naprawdę czepialstwo :)

 

Podobne pytania

0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 18 stycznia 2016 w HTML i CSS przez nexus Początkujący (320 p.)
0 głosów
1 odpowiedź 745 wizyt
pytanie zadane 23 grudnia 2017 w C i C++ przez szym Nowicjusz (140 p.)

92,563 zapytań

141,416 odpowiedzi

319,596 komentarzy

61,948 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!

...