22.10 * dopunska: rešenje jednog od lakših zadataka (3)
Napisati program koji u beskonačnoj petlji korisniku daje sledeće opcije:
-
Unos imena korisnika (da bi se ispisala pozdravna poruka u kojoj je i uneto ime korisnika)
-
Izračunavanje razlike dva cela broja
-
Izračunavanje ostatka pri deljenju dva cela broja
-
KRAJ
Za svaku od opcija treba da je kreirana posebna metoda.
Kada korisnik odabere opciju, poziva se odgovarajuća metoda.
Nakon izvršenja metode, ponovo treba da se ispiše početni izbornik (meni sa izborima)
Ako se odabere KRAJ, izlazi se iz programa.
Analizirajte sledeća tri načina rešavanja ovog zadatka, i u svesku napišite kako biste vi rešili zadatak. Pokušajte da nađete što kraće rešenje
Rešenje u kojem se koriste pozivi metoda:
using System;
namespace aplikacija
{
class Program
{
static char izbornik()
{
Console.WriteLine("*********************************************");
Console.WriteLine("\n Izaberite OPCIJU koju želite da radite: ");
Console.WriteLine("\n p - Pozdrav");
Console.WriteLine("\n r - razlika dva broja");
Console.WriteLine("\n o - ostatak pri deljenju dva cela broja");
Console.WriteLine("\n k - KRAJ \n");
Console.WriteLine("*********************************************");
var znak = Console.ReadKey();
return znak.KeyChar; /* vraća znak koji je pritisnut na tastaturi */
}
static void pozdrav()
{
Console.WriteLine("\n Unesite jedno ime :");
string ime = Console.ReadLine();
Console.WriteLine("\n Pozdrav " + ime);
}
static void razlika()
{
int a, b;
Console.WriteLine("\n Unesi broj od kojega se oduzima: ");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Unesi broj koji se oduzima ");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Razlika brojeva {0} i {1} je {2}", a, b, a - b);
}
static void ostatak()
{
int a, b;
Console.WriteLine("\n Unesi prvi broj: ");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Unesi drugi broj: ");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Ostatak pri deljenju brojeva {0} i {1} je {2}", a, b, a % b);
}
static void Main(string[] args)
{
char mojIzbor='o';
while (true)
{
mojIzbor = izbornik();
switch (mojIzbor)
{
case 'p':
pozdrav();
break;
case 'r':
razlika();
break;
case 'o':
ostatak();
break;
case 'k':
return;
}
}
}
}
}
Ovo je moglo da bude i dosta kraće, a dodatak \n unutar stringa znači prelazak u naredni red.
Ovde je upotrebljano Console.ReadKey() da bi se uzelo samo jedno slovo i da korisnik ne može da kuca više od toga.
Umesto switch...case je moglo da se koristi if ... kao u nastavku:
using System;
namespace aplikacija
{
class Program
{
static char izbornik()
{
Console.WriteLine("*********************************************");
Console.WriteLine("\n Izaberite OPCIJU koju želite da radite: ");
Console.WriteLine("\n p - Pozdrav");
Console.WriteLine("\n r - razlika dva broja");
Console.WriteLine("\n o - ostatak pri deljenju dva cela broja");
Console.WriteLine("\n k - KRAJ \n");
Console.WriteLine("*********************************************");
var znak = Console.ReadKey();
return znak.KeyChar; /* vraća znak koji je pritisnut na tastaturi */
}
static void pozdrav()
{
Console.WriteLine("\n Unesite jedno ime :");
string ime = Console.ReadLine();
Console.WriteLine("\n Pozdrav " + ime);
}
static void razlika()
{
int a, b;
Console.WriteLine("\n Unesi broj od kojega se oduzima: ");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Unesi broj koji se oduzima ");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Razlika brojeva {0} i {1} je {2}", a, b, a - b);
}
static void ostatak()
{
int a, b;
Console.WriteLine("\n Unesi prvi broj: ");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Unesi drugi broj: ");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Ostatak pri deljenju brojeva {0} i {1} je {2}", a, b, a % b);
}
static void Main(string[] args)
{
char mojIzbor='o';
while (true)
{
mojIzbor = izbornik();
if (mojIzbor.Equals('p')) pozdrav(); /* na ovaj način se vrši poređenje slova */
if (mojIzbor.Equals('r')) razlika();
if (mojIzbor.Equals('o')) ostatak();
if (mojIzbor.Equals('k')) break;
}
}
}
}
Umesto while beskonačne petlje, moglo ja da se koristi do...while ili for( ; ; ) ...
... ili ... A ako se uopšte NE koriste metode:
using System;
namespace aplikacija
{
class Program
{
static void Main(string[] args)
{
char izbor = 'o';
int a, b;
while (true)
{
Console.WriteLine("*********************************************");
Console.WriteLine("\n Izaberite OPCIJU koju želite da radite: ");
Console.WriteLine("\n p - Pozdrav");
Console.WriteLine("\n r - razlika dva broja");
Console.WriteLine("\n o - ostatak pri deljenju dva cela broja");
Console.WriteLine("\n k - KRAJ \n");
Console.WriteLine("*********************************************");
var taster = Console.ReadKey();
izbor = taster.KeyChar; /* vraća znak koji je pritisnut na tastaturi */
switch (izbor)
{
case 'p':
Console.WriteLine("\n Unesite jedno ime :");
string ime = Console.ReadLine();
Console.WriteLine("\n Pozdrav " + ime);
break;
case 'r':
Console.WriteLine("\n Unesi broj od kojega se oduzima: ");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Unesi broj koji se oduzima ");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Razlika brojeva {0} i {1} je {2}", a, b, a - b);
break;
case 'o':
Console.WriteLine("\n Unesi prvi broj: ");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Unesi drugi broj: ");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n Ostatak pri deljenju brojeva {0} i {1} je {2}", a, b, a % b);
break;
case 'k':
return;
}
}
}
}
}