Cześć,
Wiem, że podobne tematy zostały już utworzone (czytałem je), ale mój problem jest inny.
Napisałem program który wczytuje X liczb typu float z klawiatury (chcę by był uniwersalny), następnie liczy średnią i podaje liczbę najbliższą średniej.
Kod:
#include <iostream>
using namespace std;
float czy_poprawnie(float x){
bool stan_x;
do{
cin.clear();
cin.ignore();
cin>>x;
stan_x=cin.good();
if(stan_x==0)cout<<"Wprowadzono niepoprawne dane. Podaj ponownie: ";
}while(stan_x==0);
return x;
}
int main()
{
cout<<"Ile liczb w tablicy(najpierw ENTER): ";
int ile=czy_poprawnie(0);
float liczba[ile],srednia,suma=0,szukana1=1,szukana2=2,x1,x2,y;
for(int i=0;i<ile;i++){
cout<<"Podaj "<<i+1<<" liczbe: ";
liczba[i]=czy_poprawnie(0);
suma=suma+liczba[i];
}
cout<<endl<<"\tSuma: "<<suma<<endl;
srednia=suma/ile;
cout<<"\tSrednia: "<<srednia<<endl;
for(int i=0;i<ile;i++){
for(int j=0;j<ile;j++){
if(liczba[i]<srednia&&liczba[i]>liczba[j]) // PROBLEM
szukana1=liczba[i];
}
}
cout<<"Szuk1: "<<szukana1<<endl; // dla sprawdzenia
for(int i=0;i<ile;i++){
for(int j=0;j<ile;j++){
if(liczba[i]>srednia&&liczba[i]<liczba[j]) // PROBLEM
szukana2=liczba[i];
}
}
cout<<"Szuk2: "<<szukana2<<endl; // dla sprawdzenia
x1=srednia-szukana1;
x2=szukana2-srednia;
cout<<"x1: "<<x1<<endl; // dla sprawdzenia
cout<<"x2: "<<x2<<endl; // dla sprawdzenia
y=x1-x2;
if(y<0)
cout<<"\tLiczba najblizej sredniej to: "<<szukana1<<endl;
else if(y>0)
cout<<"\tLiczba najblizej sredniej to: "<<szukana2<<endl;
else if(x1==x2)
cout<<"\tLiczba najblizej sredniej to: "<<szukana1<<endl;
return 0;
}
Niestety raz działa, raz nie. Co jest głupim podejściem (chcę mieć kontrolę nad programem).
Najprawdopodobniej coś w warunku jest nie ta (zaznaczyłem w kodzie), niestety nie mam pojęcia jak to obejść.
Bardzo prosił bym o pomoc.
Pozdrawiam,
Hinzeq