Sekunde u sate
Učitati broj sekundi n (0 ≤ n < 86400) i ispisati vreme u obliku h:mm:ss – minuti i sekunde uvek sa dve cifre.
Primer 1
Ulaz
3725Izlaz
1:02:05Primer 2
Ulaz
86399Izlaz
23:59:59Svaki podatak u programu čuva se u promenljivoj određenog tipa. Tip određuje koje vrednosti promenljiva može da ima i koje operacije su dozvoljene. U ovoj lekciji su osnovni tipovi C#-a, operatori, unos sa tastature (Console.ReadLine), pretvaranje teksta u broj i lepo formatiran ispis.
Promenljiva se pre upotrebe deklariše: navodi se tip, pa ime. Vrednost se zadaje operatorom dodele =, odmah ili kasnije.
using System;
class Program
{
static void Main()
{
int brojUcenika; // deklaracija
brojUcenika = 28; // dodela vrednosti
double prosek = 4.37; // deklaracija sa početnom vrednošću
char ocena = 'A'; // jedan znak – jednostruki navodnici
bool polozio = true; // logička vrednost: true ili false
string ime = "Marija"; // tekst – dvostruki navodnici
Console.WriteLine(ime + " ima prosek " + prosek);
Console.WriteLine($"U odeljenju je {brojUcenika} ucenika.");
Console.WriteLine($"Ocena: {ocena}, polozio: {polozio}");
}
}
Tekst koji počinje znakom $ je interpolirani string: izraz u vitičastim zagradama {…} zamenjuje se svojom vrednošću. To je pregledniji način od spajanja delova operatorom +. Primeti da se logička vrednost ispisuje kao True, velikim početnim slovom.
Ime promenljive počinje slovom ili znakom _; po dogovoru lokalne promenljive se pišu camelCase (brojUcenika), a metode i klase PascalCase (WriteLine, Program). Velika i mala slova se razlikuju.
using System;
class Program
{
static void Main()
{
var brojac = 10; // kompajler sam zaključuje tip: int
var poruka = "Zdravo"; // string
const double PI = 3.14159; // konstanta – vrednost se ne može menjati
double r = 2;
Console.WriteLine($"{poruka}! brojac = {brojac}");
Console.WriteLine($"Obim kruga: {2 * r * PI}");
// PI = 3; // greška: konstanti se ne može dodeliti nova vrednost
}
}
Ključna reč var ne znači „bilo koji tip“: tip se određuje iz početne vrednosti i posle se ne menja. Zato var uvek mora imati početnu vrednost.
| Tip | Veličina | Vrednosti | Primer |
|---|---|---|---|
int | 4 bajta | oko ±2,1 milijarde | int n = 150000; |
long | 8 bajtova | oko ±9,2 · 1018 | long l = 8000000000; |
double | 8 bajtova | realni brojevi, oko 15 značajnih cifara | double d = 3.14; |
decimal | 16 bajtova | tačni decimalni brojevi (novac) | decimal c = 99.90m; |
char | 2 bajta | jedan znak (Unicode) | char z = 'Ž'; |
bool | 1 bajt | true ili false | bool ok = false; |
string | – | tekst proizvoljne dužine | string s = "C#"; |
Za cele brojeve najčešće se koristi int, a kada vrednosti mogu preći 2 milijarde – long. Za realne brojeve koristi se double, a za novčane iznose decimal (broj se završava slovom m), jer on decimalne vrednosti pamti tačno.
using System;
class Program
{
static void Main()
{
Console.WriteLine($"int: {int.MinValue} .. {int.MaxValue}");
Console.WriteLine($"long: {long.MinValue} .. {long.MaxValue}");
int x = int.MaxValue;
x = x + 1; // prekoračenje: rezultat "preskoči" na najmanji int
Console.WriteLine($"int.MaxValue + 1 = {x}");
Console.WriteLine(0.1 + 0.2 == 0.3); // double nije tačan
Console.WriteLine(0.1m + 0.2m == 0.3m); // decimal jeste
}
}
long.Aritmetički operatori su + - * / %. Kada su oba operanda celi brojevi, / je celobrojno deljenje (decimale se odbacuju), a % daje ostatak.
using System;
class Program
{
static void Main()
{
int a = 17, b = 5;
Console.WriteLine($"{a} + {b} = {a + b}");
Console.WriteLine($"{a} - {b} = {a - b}");
Console.WriteLine($"{a} * {b} = {a * b}");
Console.WriteLine($"{a} / {b} = {a / b}"); // celobrojno deljenje
Console.WriteLine($"{a} % {b} = {a % b}"); // ostatak pri deljenju
Console.WriteLine($"{a} / {b} = {(double)a / b}"); // realno deljenje
int n = 10;
n += 5; // isto što i n = n + 5
n++; // uvećanje za 1
Console.WriteLine($"n = {n}");
bool uslov = a > b && b != 0; // relacioni i logički operatori
Console.WriteLine($"a > b i b != 0: {uslov}");
Console.WriteLine($"Koren iz 2: {Math.Sqrt(2):F4}");
Console.WriteLine($"2 na 10: {Math.Pow(2, 10)}");
}
}
| Vrsta | Operatori | Primer |
|---|---|---|
| relacioni | == != < <= > >= | x >= 18 |
| logički | && (i), || (ili), ! (ne) | x > 0 && x < 10 |
| dodela | = += -= *= /= %= | suma += x |
| uvećanje i umanjenje | ++ -- | i++ |
Klasa Math sadrži matematičke funkcije: Math.Sqrt, Math.Pow, Math.Abs, Math.Max, Math.Min, Math.Round i konstantu Math.PI.
Console.ReadLine() učitava ceo red teksta i vraća ga kao string. Da bismo dobili broj, tekst pretvaramo metodom int.Parse (ili double.Parse, long.Parse…).
using System;
class Program
{
static void Main()
{
Console.Write("Unesi ime: "); // Write ne prelazi u novi red
string ime = Console.ReadLine();
Console.Write("Unesi godinu rodjenja: ");
int godina = int.Parse(Console.ReadLine()); // tekst -> ceo broj
int starost = 2026 - godina;
Console.WriteLine($"{ime}, ove godine punis {starost}.");
}
}
Kada je više brojeva u istom redu, red se deli na delove metodom Split, pa se svaki deo pretvara u broj:
using System;
class Program
{
static void Main()
{
// ulaz: 12 30
string[] delovi = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);
int a = int.Parse(delovi[0]);
int b = int.Parse(delovi[1]);
Console.WriteLine($"Zbir: {a + b}");
Console.WriteLine($"Proizvod: {a * b}");
}
}
Ako korisnik unese nešto što nije broj, int.Parse prekida program greškom. Bezbedniji je int.TryParse: vraća true ako je pretvaranje uspelo, a broj upisuje u promenljivu iza reči out.
using System;
class Program
{
static void Main()
{
Console.Write("Unesi ceo broj: ");
string unos = Console.ReadLine();
if (int.TryParse(unos, out int broj)) // uspelo -> broj ima vrednost
Console.WriteLine($"Dvostruko: {2 * broj}");
else
Console.WriteLine($"\"{unos}\" nije ceo broj.");
}
}
Naredba if detaljno je objašnjena u sledećoj lekciji.
Iz „manjeg“ u „veći“ tip (npr. int u long ili double) vrednost se pretvara automatski. U suprotnom smeru se piše eksplicitna konverzija – tip u zagradi – i deo vrednosti može da se izgubi.
using System;
class Program
{
static void Main()
{
double cena = 1499.75;
int ceo = (int)cena; // decimale se odbacuju
long veliki = ceo; // int -> long ide automatski
int izStringa = int.Parse("250");
string uString = 42.ToString();
Console.WriteLine(ceo);
Console.WriteLine(veliki * 1000000);
Console.WriteLine($"{Math.Round(2.5)} {Math.Round(3.5)}"); // zaokruživanje na paran broj
Console.WriteLine(izStringa + 1); // sabiranje brojeva
Console.WriteLine(uString + 1); // spajanje teksta
Console.WriteLine($"{cena:F1} din"); // jedna decimala
Console.WriteLine($"[{ceo,8}]"); // širina 8, poravnato desno
Console.WriteLine($"[{"C#",-6}]"); // širina 6, poravnato levo
}
}
Math.Round vrednost tačno na sredini zaokružuje ka parnom broju (2,5 → 2, a 3,5 → 4). Za „školsko“ zaokruživanje koristi Math.Round(x, MidpointRounding.AwayFromZero).
1499,8 umesto 1499.8, a double.Parse će očekivati zarez. Izlazi u ovim lekcijama su prikazani sa tačkom.Main dodaj Console.OutputEncoding = System.Text.Encoding.UTF8;. U primerima ispis zato ide bez dijakritika.Za svaki zadatak postoji primer, uputstvo i rešenje. Rešenja su provereno tačna na primerima iz teksta.
Učitati broj sekundi n (0 ≤ n < 86400) i ispisati vreme u obliku h:mm:ss – minuti i sekunde uvek sa dve cifre.
37251:02:058639923:59:59Učitati trocifreni broj i ispisati zbir njegovih cifara i broj zapisan obrnutim redosledom cifara.
472Zbir cifara: 13
Obrnuto: 274105Zbir cifara: 6
Obrnuto: 501"A" je string), a znak u jednostrukim ('A' je char).7 / 2 je 3, a 7.0 / 2 ili (double)7 / 2 je 3,5.Console.ReadLine() uvek vraća tekst – pre računanja ga pretvori u broj.decimal, ne double.1. Koliko je 17 / 5 ako su oba broja tipa int?
2. Koji tip je najbolji za čuvanje cene proizvoda?
3. Šta vraća Console.ReadLine()?
4. Šta radi int.TryParse kada tekst nije broj?