[C] Usunięcie goto

Kauczak
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 2 sty 2013, o 09:59
Płeć: Mężczyzna
Lokalizacja: Busko Zdrój

[C] Usunięcie goto

Post autor: Kauczak »

Mam ogromna prośbe o pomoc we wprowadzeniu poprawek w projekcie :

Kod: Zaznacz cały

#include<iostream>
#include <conio.h>
#pragma hdrstop

int main(int argc, char* argv[])
{
 double liczba, sum = 0;
 int il = 0;


 do {
		
 Podaj:	
			
 std::cout<<"Podaj liczbe trzycyfrowa: ";
 std::cin>>liczba;
 
 if ((liczba<100 && liczba !=0) || (liczba<-999) || (liczba>999)) {
 std::cout<<"To nie jest liczba trzycyfrowa .";
 
 goto Podaj;}
 
 else
 il++;
 sum = sum + liczba;
  
} while (liczba != 0);
  il--;
 std::cout << "
 Srednia arytmetyczna liczb wprowadzonych wynosi : "<<sum/il;

   getch();
	return 0;

}


I teraz tak musze : Dodac zakonczenie , zapisac w C , i zamienic tak aby nie uzywac " GOTO " , cos takiego iz informacje tez zostaly mi przekazane a mam to na 9.03 wiec na sobote , z gory pieknie dziekuje
Ostatnio zmieniony 4 mar 2013, o 08:14 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C] Usunięcie goto

Post autor: witekkq »

Co to znaczy dodać zakończenie?

Kod: Zaznacz cały

while(true)
{
std::cout<<"Podaj liczbe trzycyfrowa: ";
std::cin>>liczba;
if(std::cin.good() && ((liczba>=-999 && liczba<=-100) || (liczba>=100 && liczba<=999) ) { break; } else { std::cout<<"To nie jest liczba trzycyfrowa.
";std::cin.clear(); std::cin.sync(); }
}
Kauczak
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 2 sty 2013, o 09:59
Płeć: Mężczyzna
Lokalizacja: Busko Zdrój

[C] Usunięcie goto

Post autor: Kauczak »

Poprostu mam taki temat : Średnia arytmetyczna sposrod elementow 3-cyfrowych dodatnich i ujemnych wczytywanych z klawiatury do napotkania wartosci = koniec wlacznie .


mam to na sobote na zalicznie a juz modze jak tylko moge , to co zrobilem u gory jest do poprawy bo mam nie uzywac GOTO i podobno nie ma zakonczenia , wydaje mi sie ze chodzi o to =KONIEC WLACZNIE i ma byc zapisane w C a nie w C++ , tylko ze ja juz nie mam pojecia jak sobie pomoc i to zrobic bo oddawalem juz dwa razy , jesli bys/byscie byli tak mili i napisali mi ten kawalek kodu w C zawarty w poleceniu to zalicze , bo szczeze to juz brak mi pomyslow . z gory dziekuje
Awatar użytkownika
MichalPWr
Użytkownik
Użytkownik
Posty: 1625
Rejestracja: 29 wrz 2010, o 15:55
Płeć: Mężczyzna
Lokalizacja: Leszno
Podziękował: 7 razy
Pomógł: 387 razy

[C] Usunięcie goto

Post autor: MichalPWr »

Kauczak, Masz zadaną ilość maksymalną liczb które mają być w średniej? Jeżeli nie masz tej możliwości to czy masz możliwość zadeklarowania na początku ilości liczb jaka ma być w średniej? Jeżeli nadal nie możesz to proponuję zastosować stos. Na stos wczytujesz liczby, aż do momentu wystąpienia znaku równości. Wtedy za pomocą dodatkowej zmiennej sprawdzamy ilość liczb na stosie(prostszy wariant). Po czym "sumujemy" poprzez zdjęcie dwóch liczb z góry, dodanie ich do siebie i odłożenie na stosie. Ostatnią liczbę ze stosu dzielimy, przez pierwotną ilość liczb ze stosu i mamy średnią.

Program jest do tego stopnia trywialny, że nie za bardzo jest możliwość dania Tobie kawałka kodu, bo graniczy to z gotowcem.
jarek4700
Użytkownik
Użytkownik
Posty: 939
Rejestracja: 26 gru 2009, o 17:38
Płeć: Mężczyzna
Lokalizacja: Mazowsze
Podziękował: 5 razy
Pomógł: 228 razy

[C] Usunięcie goto

Post autor: jarek4700 »

Kod: Zaznacz cały

		
 Podaj:	
			
 std::cout<<"Podaj liczbe trzycyfrowa: ";
 std::cin>>liczba;
 
 if ((liczba<100 && liczba !=0) || (liczba<-999) || (liczba>999)) {
 std::cout<<"To nie jest liczba trzycyfrowa .";
 
 goto Podaj;}
 
 else
 il++;
 sum = sum + liczba;
  

Kod: Zaznacz cały

int flag = 0;

do{
 if(flag==1) std::cout<<"To nie jest liczba trzycyfrowa .";
 flag = 1;
 std::cout<<"Podaj liczbe trzycyfrowa: ";
 std::cin>>liczba;

}while((liczba<100 && liczba !=0) || (liczba<-999) || (liczba>999));

 il++;
 sum = sum + liczba;

Zauważ tylko że użytkownik może wpisać np. "Lubię placki" i wtedy co będzie?
Czemu traktujesz \(\displaystyle{ 0}\) jako liczbę trzycyfrową i ten program wygląda na C++ a nie na C (cin/cout).
Można by to zrobić bardziej elegancko przez try...catch
Kauczak
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 2 sty 2013, o 09:59
Płeć: Mężczyzna
Lokalizacja: Busko Zdrój

[C] Usunięcie goto

Post autor: Kauczak »

Dziekuje wszystkim bardzo za pomoc bo wiele mi to pomoglo , ostatnie pytanie czy ten projek da sie przerobic w jakis sposob albo zapisac nie w C ++ tylko w C ? bo jest to istotne a jestem naprawde poczatkujacy.

Kod: Zaznacz cały

#include<iostream>
#include <conio.h>
#pragma hdrstop

int main(int argc, char* argv[])
{
 double liczba, sum = 0;
 int il = 0;


 do {
		
 int flag = 0;

do{
 if(flag==1) std::cout<<"To nie jest liczba trzycyfrowa .";
 flag = 1;
 std::cout<<"Podaj liczbe trzycyfrowa: ";
 std::cin>>liczba;

}while((liczba<100 && liczba !=0) || (liczba<-999) || (liczba>999));

 il++;
 sum = sum + liczba;
  
} while (liczba != 0);
  il--;
 std::cout << "
 Srednia arytmetyczna liczb wprowadzonych wynosi : "<<sum/il;

   getch();
	return 0;

}

z gory dziekuje
Ostatnio zmieniony 6 mar 2013, o 08:43 przez Afish, łącznie zmieniany 1 raz.
Powód: Stosuj tagi code
ODPOWIEDZ