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

Nie działa if od przedziału.

0 głosów
615 wizyt
pytanie zadane 5 listopada 2019 w C i C++ przez KonDZIKs Bywalec (2,850 p.)
edycja 5 listopada 2019 przez KonDZIKs

Witam :)

Mam pewien problem. Napisałem program na wyszukiwanie największej liczby. Zrobiłem if'a z przedziałem od 1 do 100 lecz on wgl nie działa. Cały program działa poza tym jednym if'em.

Kod:

#include <iostream>

#include <cstdlib>
#include <ctime>
using namespace std;
int tab[1000], najwiekszy=tab[ 0 ];

int main(int argc, char** argv) {
		cout<<"Podaj liczby:";
		
        for(int i=1; i<=1000; i++)
        {
        	/* TUTAJ*/ if(tab[i]>=1 && tab[i]<=100)
			{
        	cin>>tab[i];
       		}
       		else
       		{
       		cout<<"Wartosc nie miesci sie w przedziale 1-100. Podaj inna: ";
		   	}
		   	//cin>>tab[i];
		   	if(tab[i]==0)
        	{
        		for (int i=1; i<=1000;i++){
        		if(tab[i] > najwiekszy){
        		najwiekszy=tab[i];
			}
		}
    	cout <<endl<<"Najwieksza liczba = "<<najwiekszy;	
			exit (0);
			}

        }
        for(int i=1; i<=1000; i++)
		{
			cout<<tab[i]<<endl;
    	}
        
        /*for (int i=1; i<=7;i++){
        	if(tab[i] > najwiekszy){
        		najwiekszy=tab[i];
			}
		}
    	cout <<endl<<"Najwieksza liczba = "<<najwiekszy;*/
    	
	return 0;
}

 

 

1 odpowiedź

0 głosów
odpowiedź 5 listopada 2019 przez DawidK Nałogowiec (37,910 p.)
Sprawdzasz ifa przed wpisaniem wartości. Do wpisywania przyda Ci się pętla do..while.
komentarz 6 listopada 2019 przez tkz Nałogowiec (42,040 p.)

By jak najmniej modyfikować cokolwiek, posłużę się kodem wyżej, w założeniu działa w 100%, z wyłączeniem wyświetlania indexu.


#include <iostream>
 
#include <cstdlib>
#include <ctime>
using namespace std;
int tab[1000], najwiekszy=tab[ 0 ];
int indexNajwiekszejLiczby = 0;
 
int main(int argc, char** argv) {
 
         
        for(int i=1; i<=1000; i++)
        {
            //cin>>tab[i];
            do {
            cout<<"Podaj " << i+1 << " liczbe:";
            cin>>tab[i];
            if(tab[i] > 100 || tab[i] < 1) {
                cout<<"Liczba nie miesci sie w przedziale" << endl;
            }
        } while (tab[i] < 0 || tab[i] > 100);
            //cin>>tab[i];
            if(tab[i]==0)
            {
                for (int i=1; i<=1000;i++){
                if(tab[i] > najwiekszy){
                najwiekszy=tab[i];
            }
        }
        cout <<endl<<"Najwieksza liczba = "<<najwiekszy;  
            exit (0);
            }
 
        }
        for(int i=1; i<=1000; i++)
        {
            cout<<tab[i]<<endl;
        }
         
        /*for (int i=1; i<=7;i++){
            if(tab[i] > najwiekszy){
                najwiekszy=tab[i];
                indexNajwiekszejLiczby = i;
            }
        }
        cout <<endl<<"Najwieksza liczba = "<<najwiekszy<<"index to "<< indexNajwiekszejLiczby ;
         
    return 0;
}

7, 43 i 46 linia. 

komentarz 6 listopada 2019 przez KonDZIKs Bywalec (2,850 p.)
#include <iostream>
  
#include <cstdlib>
#include <ctime>
using namespace std;
int tab[1000], najwiekszy=tab[ 0 ];
int indexNajwiekszejLiczby = 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] < -101 || tab[i] > 100);
            //cin>>tab[i];
            if(tab[i]==0)
            {
                for (int i=1; i<=1000;i++){
                if(tab[i] < najwiekszy){
                najwiekszy=tab[i];
                indexNajwiekszejLiczby = i;
            }
        }
        cout <<endl<<najwiekszy<<endl<< indexNajwiekszejLiczby;  
            exit (0);
            }
  
        }
        for(int i=1; i<=1000; i++)
        {
            cout<<tab[i]<<endl;
        }
          
        /*for (int i=1; i<=7;i++){
            if(tab[i] > najwiekszy){
                najwiekszy=tab[i];
                indexNajwiekszejLiczby = i;
            }
        }
        cout <<endl<<"Najwieksza liczba = "<<najwiekszy<<"index to "<< indexNajwiekszejLiczby ;*/
          
    return 0;
}

Tutaj podam obecny kod. Z Twoimi zmianami. To jest dla liczby minimalnej. I niestety Spoj jej nie akceptuje. Nie mam pojęcia domyślam sie tylko ,że chodzi to o ,że jak podaje sie dwa razy tą samą najmniejszą liczbę przykładowo -2 i poda się ją znowu za jakiś czas to podany jest indeks tej 1 liczby a nie tej 2.

Wrzuce jeszcze całe zadanie:

komentarz 6 listopada 2019 przez tkz Nałogowiec (42,040 p.)
A co mówi Spoj? Bo jak dobrze pamiętam, to podaje powód nie przyjęcia zadania.

for (int i=1; i<=1000;i++) to nadal jest źle... Możliwe, że nie przyjmuję przez błędy w samym kodzie.
komentarz 6 listopada 2019 przez KonDZIKs Bywalec (2,850 p.)
Raczej to nie jest ten blad. Bo przy wczesniejszym zadaniu uzylem dokładnie tego samego kodu tylko zmieniłem znak przy (TAB[i] < największy). I spoj to zaakceptował. Sprawdziłem też spoj nic nie podał tylko ,że błędna odowiedz.
komentarz 6 listopada 2019 przez DawidK Nałogowiec (37,910 p.)
W 19 linijce warunek w petli while dopuszcza, liczbę -101 a jest ona poza przedziałem z zadania i tak jak pisze tkz - Twoja tablica ma 1000 elementów o indeksach od 0 do 999 w petli sprawdzasz 1000 indeksów od 1 do 1000 (którego nie ma w tablicy)

Podobne pytania

0 głosów
2 odpowiedzi 445 wizyt
pytanie zadane 8 maja 2018 w C i C++ przez aciorek Nowicjusz (150 p.)
0 głosów
1 odpowiedź 2,916 wizyt
0 głosów
4 odpowiedzi 11,161 wizyt

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...