dlaczego ten program nie działa? ma wypisywać najmniejszą cyfrę liczby a wypisuje przypadkowe cyfry albo nic

0

kod do wklejenia:zadanie.png

#include <iostream>
#include <sstream>

using namespace std;

int main(int argc, char** argv) 
{
 string liczba;
 cout<<"podaj liczbe ";
 cin>>liczba;
 
 int dlugosc;
 dlugosc = liczba.length();
 int najmniejsza;
 
 for(int i; i<=dlugosc; i++)
 {
 	if(liczba[i]<liczba[i+1])
 	{
 		najmniejsza=liczba[i+1];
 		cout<<najmniejsza;
	}
 }
}
2

Brakuje

int i = 0;

Jak już z tym sobie poradzisz to czeka cię kolejny problem, tym razem związany z długością.

0

Za wstawianie zrzutów ekranu z kodem powinien post iść automatycznie do perełek

1

najmniejsza=liczba[i+1]; ta konwersja też może być ciekawa.
Czy te przypadkowe liczby to 48 do 57?

3
  1. Od jakiego indeksu i zaczynasz?
  2. Lekcja na dziś: https://pl.wikipedia.org/wiki/ASCII#Tabela_kod%C3%B3w_ASCII
0

O to Panu chodzilo?

#include <iostream>
using namespace std;
int main ()
{
	int max=0,number,min=0;
	for (int i=0; number!=-1; i++)
	{
		cout<<"Enter the number: ";
		cin>>number;
		if (number>max)
			max=number;
		if (number<min)
			min=number;
	}
		cout<<"The largest is: "<<max << endl;
		cout<<"The smallest is: "<<min << endl;
	
}

PS
najmniejsza=liczba[i+1];
kreatywne :)

1

zgaduję co masz na myśli
chcesz wpisać taką liczbę

12345

i chcesz tą liczbę rozłożyć na poszczególne cyfry i wypisać najmniejszą ?

czyli, podaną wyżej liczbę rozkładasz na poszczególne cyfry -> 1, 2, 3, 4, 5 i chcesz wypisać najmniejszą czyli w tym przypadku 1 ? Tak wnioskuję z kodu który napisałeś, bo z tytułu to ni uja nie idzie zrozumieć co masz na myśli

1

Coś co pozwala zauważyć wiekuistość błędów jakie ma ten kod: https://godbolt.org/z/W3Eonx3xM
Niezainicjowana zmienna to tylko wierzchołek góry lodowej.

1
string liczba;
...
for(int i; i<=dlugosc; i++)
{
   if(liczba[i]<liczba[i+1])

Powinno być int i = 0 ale to też cię nie uratuje, bo w pętli aż z dwóch powodów wyjeżdżasz poza zakres stringa. Raz bo indeksy stringa są od 0 do dlugosc-1 a ty pętlą jedziesz aż do dlugosc czyli o jeden element za daleko, a dwa bo odwołujesz się nie tylko do liczba[i] ale nawet do liczba[i+1] gdzie jak wiemy samo i to już o 1 za dużo.

1

Na ile rozumem zadanie ma wyświetlić najmniejszą cyfrę liczby, to czemu rozwiązujesz inne zadanie, znajdujesz najmniejszy znak w napisie?
Jeżeli użytkownik wprowadzi:

  • 0000052, najmniejszy znak to 0 ale to jest liczba 52 której najmniejszym znakiem jest 2.
  • 34@, najmniejszy znak to @ ale to jest liczba 34 (po której dalej są jakaś tam zbędna informacja) której najmniejszym znakiem jest 3.

To tak strasznie skomplikowany program, cały jeden wiersz kodu (realizującego zadanie, reszta tylko wprowadzenie danych i wyświetlenie wyników):

#include <iostream>
#include <cmath>
using namespace std;

int main ()
{
    int value,mindigit='9'+1;
    cout<<"Enter the number: ";
    cin>>value;
    for(int next=1;next;value=next) mindigit=min(mindigit,value-10*(next=value/10));
    cout<<"The smallest is: "<<mindigit<<endl;
    return 0;
}
0

moje rozwiązanie problemu

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int liczba;

    cout << "podaj liczbe ";
    cin >> liczba;

    std::vector<int> cyfry;
    int cyfra = 0;

    while(liczba > 0){
        cyfra = liczba % 10;

        liczba /= 10;

        cyfry.push_back(cyfra);
    }

    for(int &c : cyfry){ //tą pętlę można usunąć ale dodałem ją jako dowód, że liczba jest rozdzielona na cyfry
        cout << "po rozdzieleniu -> " << c << endl;
    }

    cout << "min = " << *min_element(cyfry.begin(), cyfry.end()) << endl;

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1