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

Object Storage Arubacloud
0 głosów
249 wizyt
pytanie zadane 5 listopada 2019 w C i C++ przez KonDZIKs Bywalec (2,770 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,000 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,770 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,000 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,770 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 240 wizyt
pytanie zadane 8 maja 2018 w C i C++ przez aciorek Nowicjusz (150 p.)
0 głosów
1 odpowiedź 2,435 wizyt
0 głosów
4 odpowiedzi 10,108 wizyt

92,535 zapytań

141,376 odpowiedzi

319,449 komentarzy

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

...