Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

REPUBLIKA E SHQIPERISË

UNIVERSITETI POLITEKNIK I TIRANËS


FAKULTETI I TEKNOLOGJISE SE INFORMACIONIT

DEGA: INXHINIERI INFORMATIKE

DETYRE KURSI
Lënda : Teknikat dhe gjuhet e programimit
Viti:1
Grupi:C

Tema:Te ndertohet nje program i cili do te stimuloje renien e shiut ku


gjenerimi i pikave do te behet ne menyre te rastesishme

Pranoi : Punoi:
Dr. Hakik Paci Mite Hajdari
KOMENTI
Ky kod implementon një program që vizaton shiu ose borë me ane te matricave dhe ruan numrin total
të pikave të shiut dhe borës pas cdo ekzekutimi

Kryesisht, programi është i ndarë në disa pjesë të rëndësishme:

1. Pjesa e deklaratave dhe përfshirjes së librave: Përfshin librari të ndryshme të nevojshme si


stdbool.h, stdio.h ,time.h,unistd.h dhe conio.h.

Rreshti 1: Përfshin librarinë stdbool.h për të përdorur tipin e të dhënave bool.


Rreshti 2: Përfshin librarinë time.h e cila është një komandë e përdorur në gjuhën C e

ofron funksione dhe struktura për manipulimin e kohës dhe datës në programet C.

Rreshti 3: Përfshin librarinë stdio.h për të përdorur funksionet e hyrjes-daljes standard.

Rreshti 4: Përfshin librarinë conio.h për të përdorur funksionet e manipulimit të konzolës.

Rreshti 5:Perfshin #define për të përcaktuar vlera të ndryshme, siç janë konstantat numerike,
fjalëkalimet, gjatësitë e vargjeve, etj.

komanda #define ROWS 10 definon konstantën "ROWS" me vlerën 10.

1. Deklarimet e variablave dhe konstantave: Përfshin variablat globale si isContinue (për të ndaluar
ekzekutimin), direction (për treguar drejtimin e erës/shiut), inkrementoPikatShiut (për
inkrementimin e pikave të shiut d),

2. Funksioni Choose(): Ky funksion është i përgjegjshëm për të ndryshuar opsionet e programit në


varësi të shtypjes së tastierës. Përdoret funksioni getch() për të lexuar një karakter nga tastiera
dhe pastaj ndryshohen vlerat e variablave të programit në përputhje me karakterin e shtypur.

3. Funksioni WriteToFile(): Ky funksion hap file-n "pikat.txt" në mënyrë të shtuar dhe shkruan në të
informacionin për koordinatat e pikave të shiut dhe borës së vizatuar. Informacioni përfshin
tipin e pikës (shi ose borë) dhe koordinatat x dhe y të pikës.

4. Funksioni main(): Ky funksion është pika hyrëse e programit. Fillimisht, inicializohet dritarja
grafike përmes funksionit initgraph(). Pastaj, lexohet totali i pikave të shiut dhe borës nga file-n
"pikat.txt" (nëse file ekziston). Më pas, shfaqet një mesazh në terminal për të treguar opsionet e
programit.

5. Cikli do-while: Kjo pjesë përmban ciklin kryesor të programit, i cili ekzekutohet derisa të
ndalohet nga përdoruesi. Brenda ciklit, përdorimi i funksionit rand() përdoret për të zgjedhur
pozicionin e rastësishëm për pikat e shiut dhe borës. Në varësi të vlerës së direction(drejtimi i
erës/shiut), Gjithashtu, për çdo pikë të vizatuar, thirren funksionet WriteToFile() për të ruajtur
informacionin dhe përditësuar totalin e pikave të shiut dhe borës.

Rreshti 1-9: jane deklarimet e librarive kryesore gjate programit

Rreshti 11-13:Deklarate e variables,ajo deklaron nje variable te tipit integer me emrin score dhe I jep
vleren fillestare,direction perdoret per te ruajtur info ne lidhje me drejtimin ne program ,void
inkrementoPikatShiut perdoret per implementimin e llogjikes per inkrementimin e pikave te shiut ,score
e rrit me 1 vleren
Rreshti 17-26:Nuk kthen asnje rezultat dhe nuk pranon asnje argument.Pas deklarimit duhet te
implementojne llogjiken e funksionitper te shkruar te dhenat ne nje file.Ne komanden tjeter printeri I
quajtur “file”deklarohet dhe inicializohet per te paraqitur skedarin “numri.txt”.Hapja e skedarit behet me
funksionin fopen()me argument nr txt per emrin e skedarit dhe a per ti treguar qe deshironi te hapni
skedarin per shtim te dhenash ne fund te skedarit
Rreshti 24-27:Perdoren per shkrimin e te dhenave ne nje skedar dhe mbylljen e tyre
Rreshti 28-56:Tregon definimin e nje funksioni choose qe nuk pranon asnje argument dhe nuk kthen
asnje rezultat.Getch perdoret per te bere vendimmarrje bazuar ne vleren e karaterit te lexuar ne
tastiere.Perdoret switch per te specifikuar veprimet.Break perdoret per te dale nga struktura switch per te
shmangur ekzekutimin e veprimeve
Rreshti 57-64:Perdor funksionet e librarise windows.h per te fshehur kursorin ne terminalin e konsoles
Rreshti 64-67:Cikel I perseritur I matrices dhe kemi funksionin srand per te inicializuar generatorin e
numrit te rastesishem
Rreshti 79-115:Kemi perseritje te cikleve do-while qe ekzekutohen te pakten 1 here dhe vazhdon te
perseritet derisa kushti te jete I vertete ,por edhe cikli if-else qe shpjegon llogjiken e zgjidhjes duke lejuar
ekzekutimin e nje blloku tjeter te kodit nese nje kusht eshte I vertete dhe bllokun tjeter te kodit nese
kushti eshte I pavertete
Rreshti 116-134:Usleep perdoret per te shtyre ekzekutimin e programit per nje kohe te caktuar ne
mikrosekonda.Perdoret struktura e ciklit per te kryer zhvendosjen e vlerave ne matrice.Kbhit funksion qe
perdoret per te verifikuar shtypjet ne tastiere
KODI
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <conio.h>
#include <windows.h>

#define ROWS 12
#define COLS 120

int score=0,direction=90,isContinue=1;
void inkrementoPikatShiut(){
score++;

void writeToFile(){

FILE *file = fopen("numri.txt", "a");


if (file == NULL) {
printf("Error opening file.\n");
return ;
}
fprintf(file, "Totali i pikave të shiut: %d\n", score);
fclose(file);
}
void Choose()
{
switch(getch())
{
case 'a'://shiu bie nga e djathta ne te majte
case 'A':
direction=40;
break;

case 'd'://shiu bie nga e majta ne te djathte


case 'D':
direction=125;
break;

case 's'://ska ere


case 'S':
direction=90;
break;

case 'B': //bie bore


case 'b':
direction= 20;
break;

case ' '://ndalo renien e shiut apo bores


isContinue=0;
break;
}
}
void hideCursor() {
CONSOLE_CURSOR_INFO cursorInfo;
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
cursorInfo.dwSize = 100;
cursorInfo.bVisible = FALSE;
SetConsoleCursorInfo(consoleHandle, &cursorInfo);
}

int main() {
hideCursor();
char matrix[ROWS][COLS];
int i, j;
int col;

for (i = 0; i < ROWS; i++) {


for (j = 0; j < COLS; j++) {
matrix[i][j] = ' ';
}
}

printf("Press S for no wind\n");


printf("Press A for rain right-to-left\n");
printf("Press D for rain left-to-right\n");
printf("Press B for snow\n");
printf("Press Space to stop rain and snow\n");

do {

system("cls");
col = rand() % COLS;

if(direction==40){
matrix[0][col] = '/';
}
else if(direction==125){
matrix[0][col] = '\\';
}
else if(direction==20){
matrix[0][col] = '*';
}
else{
matrix[0][col] = '|';
}

for (i = 0; i < ROWS; i++) {


for (j = 0; j < COLS; j++) {
printf("%c", matrix[i][j]);
if(matrix[i][j]=='|' || matrix[i][j]=='/' || matrix[i][j]=='\\'){
inkrementoPikatShiut();
writeToFile();
}
}
printf("\n");}

usleep(25000);
for (i = ROWS - 1; i > 0; i--) {
for (j = 0; j < COLS; j++) {
matrix[i][j] = matrix[i - 1][j];
}
}

for (j = 0; j < COLS; j++) {


matrix[0][j] = ' ';
}
if(kbhit())
Choose();
}while(isContinue);
return 0;
}

You might also like