Palindrom
Učitati red teksta i ispisati DA ako se isto čita sa obe strane (ne računajući razmake i razliku između velikih i malih slova), a NE u suprotnom.
Primer 1
Ulaz
Ana voli MilovanaIzlaz
DAPrimer 2
Ulaz
programiranjeIzlaz
NENiz čuva više vrednosti istog tipa pod jednim imenom; elementima se pristupa preko indeksa koji počinje od 0. String je niz znakova sa mnogo gotovih metoda za rad sa tekstom. U ovoj lekciji su jednodimenzionalni i dvodimenzionalni nizovi, metode klase Array, metode stringova i klasa StringBuilder.
using System;
class Program
{
static void Main()
{
int[] ocene = { 5, 3, 4, 5, 2, 4 }; // niz sa početnim vrednostima
int[] kvadrati = new int[5]; // 5 elemenata, svi su 0
for (int i = 0; i < kvadrati.Length; i++)
kvadrati[i] = (i + 1) * (i + 1);
int zbir = 0;
foreach (int o in ocene)
zbir += o;
Console.WriteLine($"Broj ocena: {ocene.Length}");
Console.WriteLine($"Prosek: {(double)zbir / ocene.Length:F2}");
Console.WriteLine("Kvadrati: " + string.Join(", ", kvadrati));
Console.WriteLine($"Prva ocena: {ocene[0]}, poslednja: {ocene[^1]}");
}
}
Svojstvo Length daje broj elemenata, pa su indeksi od 0 do Length - 1. Oznaka ^1 znači „prvi od kraja“, tj. poslednji element. Pristup indeksu van granica prekida program greškom IndexOutOfRangeException.
Ceo red brojeva najlakše se učitava u niz metodom Array.ConvertAll, koja svaki deo teksta pretvara u broj:
using System;
class Program
{
static void Main()
{
// ulaz: 3 8 10 5 6
int[] niz = Array.ConvertAll(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries), int.Parse);
int parnih = 0;
foreach (int x in niz)
if (x % 2 == 0) parnih++;
Console.WriteLine($"Ucitano {niz.Length} brojeva, parnih: {parnih}");
}
}
using System;
class Program
{
static void Main()
{
int[] a = { 7, 2, 9, 4, 1 };
Array.Sort(a); // rastući poredak
Console.WriteLine(string.Join(" ", a));
Array.Reverse(a); // obrtanje redosleda
Console.WriteLine(string.Join(" ", a));
Console.WriteLine(Array.IndexOf(a, 4)); // pozicija vrednosti 4
int[] kopija = (int[])a.Clone(); // nov niz sa istim vrednostima
kopija[0] = 100;
int[] b = a; // NIJE kopija – isti niz pod drugim imenom
b[1] = -1;
Console.WriteLine($"a: {string.Join(" ", a)}");
Console.WriteLine($"kopija: {string.Join(" ", kopija)}");
}
}
int[] b = a; ne pravi nov niz. Obe promenljive pokazuju na isti niz u memoriji, pa promena preko b menja i a. Za pravu kopiju koristi Clone().Matrica se u C#-u deklariše kao int[,], a elementu se pristupa sa m[red, kolona]. Broj redova daje GetLength(0), a broj kolona GetLength(1).
using System;
class Program
{
static void Main()
{
int[,] m = new int[3, 4]; // 3 reda, 4 kolone
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
m[i, j] = i * 4 + j + 1;
for (int i = 0; i < m.GetLength(0); i++)
{
int zbirReda = 0;
for (int j = 0; j < m.GetLength(1); j++)
{
Console.Write($"{m[i, j],3}");
zbirReda += m[i, j];
}
Console.WriteLine($" | zbir: {zbirReda}");
}
}
}
using System;
class Program
{
static void Main()
{
string s = "Programiranje u C#";
Console.WriteLine(s.Length); // broj znakova
Console.WriteLine(s[0]); // prvi znak (char)
Console.WriteLine(s.ToUpper());
Console.WriteLine(s.Contains("C#"));
Console.WriteLine(s.IndexOf('r')); // prva pozicija znaka
Console.WriteLine(s.Substring(0, 7)); // od pozicije 0, 7 znakova
Console.WriteLine(s.Replace("C#", "Javi"));
string[] voce = "jabuka,kruska,sljiva".Split(',');
Console.WriteLine(voce.Length + " " + voce[1]);
Console.WriteLine(string.Join(" - ", voce));
}
}
Stringovi se ne menjaju: ToUpper, Replace i ostale metode vraćaju nov string, a originalni ostaje isti. Zato se rezultat mora sačuvati: s = s.Trim();.
using System;
class Program
{
static void Main()
{
string a = "ana", b = "Ana";
Console.WriteLine(a == b); // razlikuje velika i mala slova
Console.WriteLine(a.Equals(b, StringComparison.OrdinalIgnoreCase));
int slova = 0, cifre = 0;
foreach (char c in "Lozinka2026!")
{
if (char.IsLetter(c)) slova++;
else if (char.IsDigit(c)) cifre++;
}
Console.WriteLine($"slova: {slova}, cifre: {cifre}");
}
}
Za razliku od Jave, u C#-u se stringovi porede operatorom == – upoređuje se sadržaj teksta.
Kada se tekst gradi u petlji, svako s = s + … pravi nov string. Klasa StringBuilder (prostor imena System.Text) dodaje delove u isti objekat i mnogo je brža za dug tekst.
using System;
using System.Text;
class Program
{
static void Main()
{
var sb = new StringBuilder();
for (int i = 1; i <= 5; i++)
{
sb.Append(i);
if (i < 5) sb.Append('-');
}
Console.WriteLine(sb.ToString());
char[] znakovi = "racunar".ToCharArray(); // string -> niz znakova
Array.Reverse(znakovi);
Console.WriteLine(new string(znakovi)); // niz znakova -> string
}
}
Za svaki zadatak postoji primer, uputstvo i rešenje. Rešenja su provereno tačna na primerima iz teksta.
Učitati red teksta i ispisati DA ako se isto čita sa obe strane (ne računajući razmake i razliku između velikih i malih slova), a NE u suprotnom.
Ana voli MilovanaDAprogramiranjeNEU redu su celi brojevi razdvojeni razmakom. Ispisati koliko je brojeva veće od proseka svih brojeva, a u sledećem redu te brojeve, redom kojim su uneti.
4 8 15 16 23 422
23 42Length - 1.int[] b = a; ne kopira niz – za kopiju koristi Clone().s = s.ToLower();).StringBuilder.1. Koji je indeks poslednjeg elementa niza a?
2. Šta se dešava posle int[] b = a; b[0] = 5;?
3. Kako se u C#-u porede dva stringa po sadržaju?
4. Koja klasa je najbolja za građenje dugog teksta u petlji?