flm shume shume nga ti te sjellt zoti ndonje te mire
Atehere, ...
Me poshte po te paraqes ndryshimet e duhura ne kod, si dhe nje rast special qe duhet te kesh parasysh.
Edhe nje here kodi i klases, me nje PUBLIC MEMBER te quajtur Maks, qe nenkupton kufirin e numrit total te germave qe mban nje objekt "Tast". Pra, per tastin numer 7, variabli Maks merr vleren 4, sepse mban deri ne 4 germa: PQRS. Pra, kodi i klases:
Kodi:
using System;
using System.Collections.Generic;
using System.Text;
namespace cellkeytoLetters
{
class Tast
{
private int _cnt;
private int _numri; // numri i tastit
private int _sa_here; // frekuenca e numrit qe percakton germen.
private string[] _keypad; // germat e tastit
public byte Maks;
public Tast()
{
this.Frekuenca = 0;
}
#region Atribute
// ketu mund te shtosh atribute te ndryshme
public int NumriTastit
{
get
{
return _numri;
}
set
{
if (value >= 0 && value <= 9)
_numri = value;
}
}
public int Frekuenca
{
get
{
return _sa_here;
}
set
{
_sa_here = value;
}
}
#endregion
#region Metoda
public void Shto(int NumriTastit, int NumriGermave, string germat)
{
_cnt = 0;
this.NumriTastit = NumriTastit;
_keypad = new string[NumriGermave];
for (_cnt = 0; _cnt < NumriGermave; ++_cnt)
{
_keypad[_cnt] = germat.Substring(_cnt,1);
}
}
public string ShfaqGermen(int IndeksiGermes)
{
return _keypad[IndeksiGermes-1];
}
#endregion
}
}
Vere se edhe variabli _cnt ruan (automatikisht) kufirin maksimal, megjithate nga ana konceptuale, eshte mire qe cdo atribut te jete i tille qe te kete nje kuptim te caktuar per rregullat e punes e te objektivave te tua ne lidhje me cdo lloj programi qe zhvillon.
Tani, vjen kodi i klases kryesore - Program.cs. Ketu, sic mund ta vesh re tek rreshtat te ngjyrosura ne te kuqe, kam shtuar nje kod ku te caktohet vlera e variablit Maks - per tastet 0 dhe 1 ajo eshte 1 dhe 0, perkatesisht. Per tastet 7 dhe 9, ajo eshte 4, ndersa per tastet e tjera ajo eshte 3.
Kodi:
using System;
using System.Collections.Generic;
using System.Text;
namespace cellkeytoLetters
{
class Program
{
static void Main(string[] args)
{
Tast[] NokiaTast = new Tast[10]; // gjithsej 10 taste
string strNum;
int i, alfIDX=1;
const string alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
strNum = "66666555999"; //- rezultati: "ONLY"
// fillimisht, shto numrat ne vektorin NokiaTast:
for (i = 0; i < 10; i++)
{
// rezervo memorie per cdo tast ne vektor:
NokiaTast[i] = new Tast();
if (i == 0) // tasti 0 ka nje hapesire
{
NokiaTast[i].Maks = 1;
NokiaTast[i].Shto(0, NokiaTast[i].Maks, " ");
}
else if (i == 1) // tasti 1 nuk ka asgje
{
NokiaTast[i].Maks = 0;
NokiaTast[i].Shto(1, NokiaTast[i].Maks, "");
}
else if (i > 1 && i < 7 || i == 8) // tastet 2-6 dhe 8 kane nga 3 germa
{
NokiaTast[i].Maks = 3;
NokiaTast[i].Shto(3, NokiaTast[i].Maks, alfabet.Substring(alfIDX - 1, 3));
alfIDX += 3;
}
else if (i == 7 || i == 9) // tastet 7 dhe 9 kane nga 4 germa
{
NokiaTast[i].Maks = 4;
NokiaTast[i].Shto(4, NokiaTast[i].Maks, alfabet.Substring(alfIDX - 1, 4));
alfIDX += 4;
}
}
// tani, lexo numrat ne stringun strNum dhe nxirr germat:
int saHere = 0, nr=0; // sa here shfaqet numri?
i = 0;
// fillo me germen e pare ne string:
string currentChar = strNum.Substring(i, 1);
while (i <= strNum.Length)
{
string ch="";
try
{
nr = int.Parse(currentChar);
ch = strNum.Substring(i, 1);
}
catch
{
// shmang ndonje gabim ne lidhje me indeksin ne string
}
/* krahaso germen aktuale me germat ne vazhdim.
* per sa kohe qe germa aktuale eshte e barabarte
* me germat ne vazhdim, rrit vleren e variablit saHere,
* per te llogaritur frekuencen.
* Ne baze te vleres te saHere do te dallohet se per cilen
* germe te tastit perkates behet fjale...
*
*/
if (ch == currentChar && saHere < NokiaTast[nr].Maks)
{
++saHere; // sa here perseritet germa aktuale
++i; // rrit indeksin per germen tjeter ne string
}
else
{
// ruaj frekuencen e shfaqjes se numrit:
NokiaTast[nr].Frekuenca = saHere;
Console.Write(NokiaTast[nr].ShfaqGermen(NokiaTast[nr].Frekuenca));
saHere = 0;
currentChar = ch; //fillo me karakterin tjeter te ndryshem
}
}
Console.ReadLine();
}
}
}
Pra, tek for-loop, ti inicializon variablin public Maks ne kufirin perkates. Ndersa tek while-loop, qe eshte pjesa kryesore e programit, ti kontrollon se sa here eshte numeruar e njejta shifer. Ne rastin e stringut 66666555999, if-i kontrollon se sa here numerohet shifra "6", le te themi. Ne kete rast, kur shifra "6" eshte numeruar "3" here, atehere blloku "if" nuk ekzekutohet, ne favor te bllokut "else", i cili shfaq germen "O".
Tani, po te jap nje rast te ndryshem. Ekzekuto programin e mesiperm me kete string:
Kodi:
strNum = "99999999999999444999988";
REzultati do te jete i qarte: ZZZXIZU. Megjithate, nese une kerkoj stringun "ZZYXWIZU", atehere kjo perkthehet ne shifra si me poshte:
Kodi:
9999 9999 999 99 9 444 9999 88
Por, sic mund ta vesh re, ky kod eshte ekzaktesisht i njejte me vlere e mesiperme, por rezultat qe prodhon jane te ndryshme. Programi gjithnje do te prodhoje rezultatin e pare, sepse while-loop kontrollon deri ne Maks. Atehere, per te nxjerre rezultatin e duhur, mund te besh nje manipulim te tille: shto nje shifer "0" (zero) ne pikat "kritike" qe programi te printoje nje hapesire dhe te dalloje midis germave qe ti kerkon. Pra,
999909999099909909444999988
do te afishoje ne ekran kete: Z Z Y X WIZU, ajo qe kerkuam me lart.
Krijoni Kontakt