• 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
465 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.

1
komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
24 linia, spróbuj dodać do warunku =.
komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)
Index największej = 1000
komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
No i popraw pętle, spójrz co mówi kompilator. Ogólnie ten kod nie powinien się skompilować.
komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)

Kompilator nie wyrzuca żadnych błędów. Pisze w dev c++

Compilation results...
--------
- Errors: 0
- Warnings: 0
- Output Filename: C:\Users\KonDZIKs\Desktop\Algorymty i struktury danych\Naj_wieksza.mniejsaz\Naj_wiekszaMniejsza.exe
- Output Size: 1,83272647857666 MiB
- Compilation Time: 0,14s

 

komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)

In function 'int main(int, char**)':

32:29: warning: iteration 999u invokes undefined behavior [-Waggressive-loop-optimizations]

31:17: note: containing loop

25:25: warning: iteration 999u invokes undefined behavior [-Waggressive-loop-optimizations]

24:17: note: containing loop

44:24: warning: iteration 999u invokes undefined behavior [-Waggressive-loop-optimizations]

42:9: note: containing loop

cpp.sh/9rpgp

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

Dziwne bo mi nie wyrzuciło żadnego błędu

Compilation successful

 

komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
To co wysłałem, znaczy link, jest poprawione w kwestii pętli. Działa tak jak chcesz?
komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)
Działa :D
Dziękuję ślicznie a mógłbyś powiedzieć ,które pętle poprawiłeś poza tym ,że są od 0 a nie od 1? Bo porównuje ten kod i nie wiem :D
komentarz 12 listopada 2019 przez mmarszik Mądrala (7,390 p.)
Użyj bibliotek do tego celu, chyba że to wprawki implementacyjne.
komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
Właśnie te, nic innego. zmieniłem by zaczynało się o 0, a kończyło na 999.
komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)

Wszystko działa fajnie lecz. Jest to zadanie ze spoja. I gdy jest w kodzie ,że przy tab==0 program sie zatrzymuje, wypisuje liczby to jest super działa tak jak należy. Lecz po wyrzuceniu tego if'a program po podaniu jednej wartości się zatrzymuje i wyrzuca wynik.
http://cpp.sh/2mpdx

komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
Podaj link do tego zadania, albo pokaż przykładowe wejście. Skoro to Spoj, to chyba zawsze jest liczba testów, ile tych liczb w tym ciągu...
komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)
Sorrki ,że nie podałem od razu.

https://www.spoj.com/ASD2019/problems/ASD_1_3/
komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
Nie mam pojęcia tylko jak zaznaczyć, ze to już koniec wczytywania, bo na stronie nic o tym nie piszą.
komentarz 12 listopada 2019 przez KonDZIKs Bywalec (2,770 p.)
edycja 12 listopada 2019 przez KonDZIKs

Dla 10 liczb działa "poprawnie" nie wiem dlaczego dubluje podane liczby. Wynik też wyświetla poprawny

@Edit: Element dublowania poprawiłem. Lecz problem jest teraz taki ,że jeżeli nie podamy liczby mniejszej od 0 to najmniejsza liczba nie działa.

komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)
Wyświetla się podwójnie pewnie przez ostatnią pętle.
komentarz 12 listopada 2019 przez tkz Nałogowiec (42,000 p.)

cpp.sh/2dmte u mnie działa...

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ź 751 wizyt
pytanie zadane 23 grudnia 2017 w C i C++ przez szym Nowicjusz (140 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

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

...