15.10: dodatak: rešen zadatak sa menijem i beskonačnom petljom
Zadatak 1:
Korisniku treba da se u beskonačnoj petlji vrti polazni izbor - opcije koje bira. Za svaku od opcija nešto treba da se uradi. Izlazak iz petlje je moguć samo ako se odabere odgovarajuća opcija.
OPCIJE za korisnika:
- ispis poruke
- neko izračunavanje
- prosečna vrednost
- kraj
Rešenje:
Za opcije ćemo da koristimo posebnu metodu, koju ćemo da pozovemo iz Main-a:
Metoda će se zvati izborKorisnika(), u njoj će da se ispiše kompletan meni izbora, a kada korisnik nešto ukuca, treba da vrati samo jedno slovo (char). Od više načina, ovaj put je izabrano da se koristi ReadLine() koja učitava ceo red koji ukuca korisnik kao string. S obzirom da je string u stvari niz karaktera, kao izlaz iz ove metode ćemo poslati prvi element tog niza - prvo slovo. U prevodu: šta god da se ukuca od strane korisnika, računa se samo prvo slovo za izbor (ovo nije najbolje rešenje, ali jeste jedno od mogućih načina rešenja)
static char izborKorisnika()Za beskonačnu petlju u glavnoj metodi (Main) može da se koristi više načina. Primeri su:
{
string izbor = "o";
Console.WriteLine("\n Izaberite OPCIJU koju želite da radite: ");
Console.WriteLine("\n 1 - ispis poruke");
Console.WriteLine("\n 2 - izračunavanje");
Console.WriteLine("\n 3 - prosečna vrednost");
Console.WriteLine("\n 4 - za KRAJ vam treba ");
izbor = Console.ReadLine();
return izbor[0];
}
- while(true) { ... },
- do {... } while(true)
- for( ; ; ) { ... }
U ovom rešenju ćemo upotrebiti prvu opciju:
static void Main(string[] args)
{
char mojIzbor;
while(true)
{
mojIzbor = izborKorisnika();
if(mojIzbor == '4') break;
}
}
Obratite pažnju na red ispred kraja bloka petlje: if (mojIzbor =='4') break; - ako je izbor karakter 4, izvršiće se naredba break kojom se izlazi iz ciklusa koji joj je najbliži - a to je u našem slučaju beskonačna while petlja.
Za svaku od opcija ćemo iskoristiti if uslov, a radićemo ih u posebnim metodama, koje ćemo smestiti direktno iznad metode Main:
Metoda ispisPoruke() u kojoj se od korisnika traži da unese ime, a onda se ispisuje poruka zajedno sa imenom:
static void ispisPoruke()
{
Console.WriteLine(" Molim, unesite Vaše ime: ");
string ime = Console.ReadLine();
Console.WriteLine(" Veliki pozdrav za " + ime);
return;
}
U nastavku je metoda u kojoj se od korisnika traži da unese dva broja, kao i operaciju koja će da se izvrši. Na kraju se ispisuje i poruka sa rezultatom.
static void izracunaj()
{
int rezultat=-9999; /* početna vrednost za rezultat - */
string izbor; /* izbor koji korisnik unosi */
int prviBroj; /* prvi broj koji korisnik unosi */
int drugiBroj; /* drugi broj */
char operacija; /* operacija koja se bira */
bool deljenjeSaNulom = false; /* logička promenljiva koja prikazuje da li je bilo deljenja sa nuom */
Console.WriteLine("unesite prvi CEO broj ");
prviBroj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("unesite drugi CEO broj");
drugiBroj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("unesite jednu od 4 ponuđene operacije: + , - , * ili / ");
izbor = Console.ReadLine();
operacija = izbor[0];
switch (operacija)
{
case '+':
rezultat = prviBroj + drugiBroj;
break;
case '-':
rezultat = prviBroj - drugiBroj;
break;
case '*':
rezultat = prviBroj * drugiBroj;
break;
case '/':
if (drugiBroj != 0)
rezultat = prviBroj / drugiBroj;
else
deljenjeSaNulom = true;
break;
default:
Console.WriteLine("niste odabrali pravu opciju");
break;
}
if (deljenjeSaNulom)
Console.WriteLine("Ne može se deliti sa nulom !");
else
Console.WriteLine("Rezultat od " + prviBroj + operacija + drugiBroj + " = " + rezultat);
}
Sada će naša metoda Main izgledati ovako:
static void Main(string[] args)
{
char mojIzbor;
while (true)
{
mojIzbor = izborKorisnika();
if (mojIzbor == '1') ispisPoruke();
if (mojIzbor == '2') izracunaj();
if (mojIzbor == '4') break;
}
}
Za izbor koji nam je ostao za kraj, upotrebićemo LISTU brojeva, pa ćemo izračunati prosek - koristićemo i System.Linq !
static void prosek ()
{
string izbor = "";
Console.WriteLine("unosite brojeve od kojih želite prosek:");
do
{
Console.WriteLine("unesite sledeci broj: ");
listaBrojeva.Add(Convert.ToInt32(Console.ReadLine()));
Console.WriteLine("Želite još jedan broj : da/ne ");
izbor = Console.ReadLine();
} while (izbor == "da");
double prosek = listaBrojeva.Average();
Console.WriteLine("Prosek unetih brojeva je " + prosek);
}
Na kraju, u nastavku je ceo program:
using System;
using System.Collections.Generic;
using System.Linq;
namespace aplikacija_magacin
{
class Program
{
static char izborKorisnika()
{
string izbor = "o";
Console.WriteLine("\n Izaberite OPCIJU koju želite da radite: ");
Console.WriteLine("\n 1 - ispis poruke");
Console.WriteLine("\n 2 - izračunavanje");
Console.WriteLine("\n 3 - prosečna vrednost");
Console.WriteLine("\n 4 - za KRAJ vam treba ");
izbor = Console.ReadLine();
return izbor[0];
}
static void ispisPoruke()
{
Console.WriteLine(" Molim, unesite Vaše ime: ");
string ime = Console.ReadLine();
Console.WriteLine(" Veliki pozdrav za " + ime);
return;
}
static void izracunaj()
{
int rezultat=-9999;
string izbor;
int prviBroj;
int drugiBroj;
char operacija;
bool deljenjeSaNulom = false;
Console.WriteLine("unesite prvi CEO broj ");
prviBroj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("unesite drugi CEO broj");
drugiBroj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("unesite jednu od 4 ponuđene operacije: + , - , * ili / ");
izbor = Console.ReadLine();
operacija = izbor[0];
switch (operacija)
{
case '+':
rezultat = prviBroj + drugiBroj;
break;
case '-':
rezultat = prviBroj - drugiBroj;
break;
case '*':
rezultat = prviBroj * drugiBroj;
break;
case '/':
if (drugiBroj != 0)
rezultat = prviBroj / drugiBroj;
else
deljenjeSaNulom = true;
break;
default:
Console.WriteLine("niste odabrali pravu opciju");
break;
}
if (deljenjeSaNulom)
Console.WriteLine("Ne može se deliti sa nulom !");
else
Console.WriteLine("Rezultat od " + prviBroj + operacija + drugiBroj + " = " + rezultat);
}
static List<int> listaBrojeva = new List<int>();
static void prosek ()
{
string izbor = "";
Console.WriteLine("unosite brojeve od kojih želite prosek:");
do
{
Console.WriteLine("unesite sledeci broj: ");
listaBrojeva.Add(Convert.ToInt32(Console.ReadLine()));
Console.WriteLine("Želite još jedan broj : da/ne ");
izbor = Console.ReadLine();
} while (izbor == "da");
double prosek = listaBrojeva.Average();
Console.WriteLine("Prosek unetih brojeva je " + prosek);
}
static void Main(string[] args)
{
char mojIzbor;
while (true)
{
mojIzbor = izborKorisnika();
if (mojIzbor == '1') ispisPoruke();
if (mojIzbor == '2') izracunaj();
if (mojIzbor == '3') prosek();
if (mojIzbor == '4') break;
}
}
}
}