C++

Həllər

Həllər

Ekranda "Mən C++ dilini öyrənirəm" sətrini çap edən proqram tərtib edin.


// həll_1_5.cpp

#include <iostream>

int main()
{
std::cout<<"Mən C++ dilini öyrənirəm \n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>prog2.exe 
Mən C++ dilini öyrənirəm
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

§2. Dəyişənlər

1-ci çalışma.

Elə proqram yazın ki, istifadəçidən 5 ədəd daxil etməsini istəsin, daha sonra, proqram bu ədədlərin cəmini ekranda çap etsin.


// həll_2_1.cpp

#include <iostream>

int main(){

int x1,x2,x3,x4,x5,y;

/* ən primitiv variant*/
std::cout<<"Zəhmət olmasa, 1-ci ədədi daxil edin \n";
std::cin>>x1;
std::cout<<"Zəhmət olmasa, 2-ci ədədi daxil edin \n"; 
std::cin>>x2;
std::cout<<"Zəhmət olmasa, 3-cu ədədi daxil edin \n";
std::cin>>x3;
std::cout<<"Zəhmət olmasa, 4-cu ədədi daxil edin \n";
std::cin>>x4;
std::cout<<"Zəhmət olmasa, 5-ci ədədi daxil edin \n";
std::cin>>x5;

y = x1 + x2 + x3 + x4 + x5;
std::cout<<"Daxil etdiyiniz ədədlərin cəmi = "<<y<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>prog2.exe 
Zəhmət olmasa, 1-ci ədədi daxil edin 
45 
Zəhmət olmasa, 2-ci ədədi daxil edin 
34 
Zəhmət olmasa, 3-cu ədədi daxil edin 
123 
Zəhmət olmasa, 4-cu ədədi daxil edin 
7 
Zəhmət olmasa, 5-ci ədədi daxil edin 
8 
Daxil etdiyiniz ədədlərin cəmi = 217 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

2-ci çalışma.

Elə proqram tərtib edin ki, istifadəçidən üçbucağın tərəflərinin uzunluğunu daxil etməsini istəsin və üçbucağın perimetrini çap etsin.


// həll_2_2.cpp

#include <iostream>

int main()
{

int ter1, ter2, ter3, perim;

std::cout<<"Zəhmət olmasa, ücbucağın 1-ci terefinin uzunlugunu daxil edin \n";
std::cin>>ter1;
std::cout<<"Zəhmət olmasa, ücbucağın 2-ci tərəfinin uzunluğunu daxil edin \n";
std::cin>>ter2;
std::cout<<"Zəhmət olmasa, ücbucağın 3-cü tərəfinin uzunlugunu daxil edin \n";
std::cin>>ter3;

perim = ter1 + ter2 + ter3;
std::cout<<"Ücbucağın perimetri = "<<perim<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>prog2.exe 
Zəhmət olmasa, ücbucağın 1-ci tərəfinin uzunluğunu daxil edin 
23 
Zəhmət olmasa, ücbucağın 2-ci tərəfinin uzunluğunu daxil edin 
34 
Zəhmət olmasa, ücbucağın 3-cü tərəfinin uzunluğunu daxil edin 
45 
Ücbucağın perimetri = 102 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

§3. Operatorlar

1-ci çalışma.

Elə proqram yazın ki, istifadəçidən 2 ədəd qəbul etsin və bunların ən böyüyünü çap etsin.


// həll_3_1.cpp

#include <iostream>

int main()
{

int dey1, dey2, max;

std::cout<<"Birinci ədədi daxil edin \n";
std::cin>>dey1;
std::cout<<"İkinci ədədi daxil edin \n";
std::cin>>dey2;

if (dey1 > dey2)
max = dey1;
else
max = dey2;

std::cout<<"Bu ədədlərdən ən böyüyü "<<max<<"-dir\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>prog2.exe 
Birinci ədədi daxil edin 
234 
İkinci ədədi daxil edin 
457 
Bu ədədlərdən ən böyüyü 457-dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

2-ci çalışma.

Elə proqram yazın ki, istifadəçidən 3 ədəd qəbul etsin və bunların ən böyüyünü çap etsin.


// həll_3_2.cpp

#include <iostream>

int main()
{

int dey1, dey2, dey3, max;

std::cout<<"Birinci ədədi daxil edin \n";
std::cin>>dey1;
std::cout<<"İkinci ədədi daxil edin \n";
std::cin>>dey2;
std::cout<<"Üçüncü ədədi daxil edin \n";
std::cin>>dey3;

if ((dey1 > dey2) && (dey1 > dey3))
max = dey1;
else
if ((dey2 > dey1) && (dey2 > dey3))
max = dey2;
else
max = dey3;

std::cout<<"Bu ədədlərdən ən böyüyü "<<max<<"-dir \n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>prog2.exe 
Birinci ədədi daxil edin 
23 
İkinci ədədi daxil edin 
456 
Üçüncü ədədi daxil edin 
981 
Bu ədədlərdən ən böyüyü 981–dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

4-cü çalışma.

Elə proqram qurun ki, istifadəçinin daxil etdiyi ədədin sayında ekranda 'a' simvolu çap etsin.


// həll_3_4.cpp

#include <iostream>

int main()
{

int i,dey;

std::cout<<"Hər hansı ədəd daxil edin \n";
std::cin>>dey;

for (i=0; i<dey; ++i)
std::cout<<'a'<<" ";

std::cout<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>
C:\cpp\prog2\Debug>prog2.exe 
Hər hansı ədəd daxil edin
6 
a a a a a a 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

5-ci çalışma.

Elə proqram qurun ki, istifadəçidən hər hansı ədəd qəbul etsin. Əgər bu ədəd 100-dən böyük olarsa, onda ekranda 100 dənə 'c' simvolu çap etsin, 50 ilə 100 arasında olarsa, ekranda həmin ədəd sayda 'b' simvolu çap etsin, 50-dən kiçik olarsa, həmin ədəd sayda 'a' simvolu çap etsin.


// həll_3_5.cpp

#include <iostream>

int main()
{

int i,dey;

std::cout<<"Hər hansı ədəd daxil edin \n";
std::cin>>dey;

if (dey > 100 )
for (i=0; i<100; ++i)
std::cout<<'c'<<" ";
else
if (dey > 50)
for (i=0; i<dey; ++i)
std::cout<<'b'<<" ";
else
for (i=0; i<dey; ++i)
std::cout<<'a'<<" ";

std::cout<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>prog2.exe 
Hər hansı ədəd daxil edin 
12 
a a a a a a a a a a a a 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

6-cı çalışma.

for dövr operatorundan istifadə etməklə, ekranda sonsuz olaraq "unix" kəlməsini çap edən proqram yazın.


// həll_3_6.cpp

#include <iostream>

int main()
{

int i;

for (i=0; i<1; i=i)
std::cout<<"unix\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>prog2.exe
unix 
unix 
unix 
unix 
unix 
unix 
unix ^C 
C:\cpp\prog2\Debug>

7-ci çalışma.

while dövr operatorundan istifadə etməklə, ekranda sonsuz olaraq "linux" kəlməsini çap edən proqram yazın.


// həll_3_7.cpp

#include <iostream>

int main()
{
while(1)
std::cout<<"linux\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>prog2.exe 
linux 
linux 
linux 
linux 
linux 
linux 
linux ^C 
C:\cpp\prog2\Debug>

§4. Ünvan dəyişənləri

1-ci çalışma.

Ancaq ünvan dəyişənlərindən istifadə etməklə, iki ədədin cəmini hesablayan proqram tərtib edin.


// həll_4_1.cpp

#include <iostream>

int main(int argc, char *argv[])
{

int *dey1, *dey2, *cem;

// ünvan dəyişənləri üçün yaddaşda yer ayırırıq
dey1 = new int;
dey2 = new int;
cəm = new int;

std::cout<<"Birinci ədədi daxil edin \n";
std::cin>>*dey1;
std::cout<<"İkinci ədədi daxil edin \n";
std::cin>>*dey2;

*cem = *dey1 + *dey2;
std::cout<<"Bu iki ədədin cəmi "<<*cem<<"-dir\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
Birinci ədədi daxil edin 
45 
İkinci ədədi daxil edin 
234 
Bu iki ədədin cəmi 279-dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

2-ci çalışma.

Ancaq ünvan dəyişənlərindən istifadə etməklə, iki ədədin maksimumunu hesablayan

proqram tərtib edin.


// həll_4_2.cpp

#include <iostream>

int main(int argc, char *argv[])
{
int *dey1, *dey2, *max;

// ünvan dəyişənləri üçün yaddaşda yer ayırırıq
dey1 = new int;
dey2 = new int;
max = new int;

std::cout<<"Birinci ədədi daxil edin \n";
std::cin>>*dey1;
std::cout<<"İkinci ədədi daxil edin \n";
std::cin>>*dey2;

if (*dey1 > *dey2)
*max = *dey1;
else
*max = *dey2;

std::cout<<"Bu iki ədədin ən böyüyü "<<*max<<"-dir\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
Birinci ədədi daxil edin 
45 
İkinci ədədi daxil edin 
234 
Bu iki ədədin cəmi 279–dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

§5. Funksiyalar

1-ci çalışma.

Funksiyalardan istifadə etməklə, iki ədədin maksimumunu hesablayan proqram tərtib edin.


// həll_5_1.cpp

#include <iostream>

// ən_böyük funksiyasının elanı
int ən_böyük (int x, int y);

int main(int argc, char *argv[])
{

int dey1, dey2, max;

std::cout<<"Birinci ədədi daxil edin \n";
std::cin>>dey1;
std::cout<<"İkinci ədədi daxil edin \n";
std::cin>>dey2;

max = ən_böyük(dey1, dey2);

std::cout<<"Bu iki ədədin ən böyüyü "<<max<<"-dir \n";

}

// ən_böyük funksiyasının proqram kodu
int en_boyuk ( int dey1, int dey2) 
{
if (dey1 > dey2)
return dey1;
else
return dey2;
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
Birinci ədədi daxil edin 
5 
İkinci ədədi daxil edin 
67 
Bu iki ədədin ən böyüyü 67-dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

2-ci çalışma.

Elə funksiya qurun ki, istifadəçidən 10 tam ədəd daxil etməsini istəsin və onların cəmini qaytarsın. Bu funksiyadan istifadə etməklə, proqram qurun və onu icra edin.


// həll_5_2.cpp

#include <iostream>

// cəm funksiyasının elanı
int cəm (void);

int main(int argc, char *argv[])
{

int dey1, dey2 ;

dey2 = cəm();
std::cout<<"Daxil etdiyiniz ədədlərin cəmi "<<dey2<<"-dir \n";

}

// cəm funksiyasının proqram kodu
int cəm ( void) 
{
int i, x, y;

// y-dən ümumi cəmi yadda saxlamaq üçün istifadə edəcəyik
y=0;

for (i=1; i<=10; ++i)
{
std::cout<<i<<"-ci ədədi daxil edin\n";
std::cin>>x;
y = y + x;
}

return y;
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
1-ci ədədi daxil edin 
4 
2-ci ədədi daxil edin 
56 
3-cü ədədi daxil edin 
67 
4-cü ədədi daxil edin 
23 
5-ci ədədi daxil edin 
45 
6-cı ədədi daxil edin 
67 
7-ci ədədi daxil edin 
2 
8-ci ədədi daxil edin 
6 
9-cu ədədi daxil edin 
78 
10-cu ədədi daxil edin 
123 
Daxil etdiyiniz ədədlərin cəmi 471-dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

3-cü çalışma.

kvadrat adlı elə funksiya tərtib edin ki, ekranda “*” simvollarından ibarət, tərəflərinin uzunluğu 10 olan kvadrat çəksin (içini doldurmaqla). kvadrat funksiyasından istfadə etməklə proqram qurub icra edin.


// həll_5_3.cpp

#include <iostream>

// kvadrat funksiyasının elanı
void kvadrat (void);

int main(int argc, char *argv[])
{
kvadrat();
}

// kvadrat funksiyasının proqram kodu
void kvadrat ( void) 
{
int i, j;

for(i=0; i <10; ++i){
for(j=0; j <10; ++j)
std::cout<<"* ";
std::cout<<"\n";
}
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

4-cü çalışma.

Çalışma 3-dəki kvadrat funksiyasını elə dəyişin ki, tərəflərinin sayı və təşkil olunduğu simvol bu funksiyaya parametr kimi ötürülsün. Bu funksiyadan istifadə etməklə, elə proqram qurun ki, istifadəçidən hər hansı simvol və ədəd daxil etməsini istəsin, daha sonra isə, ekranda həmin parametrlərə uyğun kvadrat çəksin.


// həll_5_4.cpp

#include <iostream>

// kvadrat funksiyasının elanı
void kvadrat (int , char);

int main(int argc, char *argv[])
{
int x;
char c;

std::cout<<"kvadratın tərəfinin uzunluğunu və \n"
     <<" rəng simvolunu daxil edin \n";
std::cin>>x>>c;

kvadrat(x,c);

}

/* kvadrat funksiyasının proqram kodu */
void kvadrat (int tərəf, char rəng) 
{
int i, j;

for(i=0; i<tərəf; ++i){
for(j=0; j<tərəf; ++j)
std::cout<<reng<<" ";
std::cout<<"\n";
}
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
kvadratin tərəfinin uzunluğunu və 
rəng simvolunu daxil edin 
7 @ 
@ @ @ @ @ @ @ 
@ @ @ @ @ @ @ 
@ @ @ @ @ @ @ 
@ @ @ @ @ @ @ 
@ @ @ @ @ @ @ 
@ @ @ @ @ @ @ 
@ @ @ @ @ @ @ 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

5-ci çalışma.

Çalışma 4-dəki funksiyanı elə dəyişin ki, istifadəçi kvadratın içinin rəngləndiyi simvolu da daxil edə bilsin. Bu funksiyadan istifadə etməklə proqram tərtib edib, icra edin.


// həll_5_5.cpp

#include <iostream>

// kvadrat funksiyasının elanı
void kvadrat (int , char, char);

int main(int argc, char *argv[])
{

int x;
char c,d;

std::cout<<"kvadratın tərəfinin uzunluğunu, tərəfinin və\n"
     <<" daxilinin rəng simvollarını daxil edin \n";

std::cin>>x>>c>>d;

kvadrat(x,c,d);

}

// kvadrat funksiyasının proqram kodu
void kvadrat (int tərəf, char t_reng, char d_rəng) 
{
/* burada bir balaca izaha ehtiyac var.
çəkdiyimiz fiqurun kənarları t_rəng simvolu, daxili isə
d_rəng simvolu ile rənglənməlidir. */

int i, j;

/* tutaq ki, tərəfin uzunluğu 5, tərəfin rəng simvolu #, 
daxilin rəng simvolu isə @-dir. 
Onda aşagıdakı kod ekranda

# # # # #

çap edəcək */

for(j=0; j<tərəf; ++j)
std::cout<<t_rəng<<" ";
std::cout<<"\n";

/* aşagıdakı kod 5-2=3 dəfə təkrar olunacaq
və hər dəfə təkrar olunanda ekranda əvvəlcə #,
daha sonra 5-2=3 sayda @, daha sonra isə #
simvolunu çap edəcək. aşağıdakı kimi:
# @ @ @ #
3 dəfə təkrar olunanda isə ekranda bu şəkil alınır
# @ @ @ #
# @ @ @ #
# @ @ @ #
*/

for(i=1; i<tərəf-1; ++i)
{
std::cout<<t_reng<<" ";

for(j=1; j<tərəf-1; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}

/* sonda yuxarıda baxdığımız kod 
fiquru tamamlamaq üçün təkrar olunur
# # # # #
*/

for(j=0; j<teref; ++j)
std::cout<<t_reng<<" ";
std::cout<<"\n";

/*
nəticədə ekranda tərəfinin uzunluğu 5, kənarları #,
daxili isə @ simvolu ilə rənglənmiş kvadrat alınır.
aşağıdakı kimi.

# # # # #
# @ @ @ #
# @ @ @ #
# @ @ @ #
# # # # #

*/
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./5_5 
kvadratın tərəfinin uzunluğunu, tərəfinin və 
daxilinin rəng simvollarını daxil edin 
7 # ~ 
# # # # # # # 
# ~ ~ ~ ~ ~ # 
# ~ ~ ~ ~ ~ # 
# ~ ~ ~ ~ ~ # 
# ~ ~ ~ ~ ~ # 
# ~ ~ ~ ~ ~ # 
# # # # # # # 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

6-cı çalışma.

Çalışma 5-in tələblərini yerinə yetirən romb funksiyası qurun, hansı ki, ekranda romb çəksin. Bu funksiyadan istifadə edib proqram tərtib edin və icra edin.


// həll_5_6.cpp

#include <iostream>

// romb funksiyasının elanı
void romb (int , char, char);

int main(int argc, char *argv[])
{
int x;
char c,d;

std::cout<<"rombun tərəfinin uzunluğunu, tərəfinin və\n"
     <<"daxilinin rəng simvollarını daxil edin \n";

std::cin>>x>>c>>d;

romb(x,c,d);

}


// romb funksiyasinin proqram kodu
void romb (int tərəf, char t_rəng, char d_rəng)
{
/*
əgər istifadəçi 6 , =, + parametrlərini daxil etsə, 
proqram ekranda aşagıdakı kimi romb çəkməlidir.
     = 
    = + =
   = + + + =
  = + + + + + =
 = + + + + + + + =
= + + + + + + + + + =
 = + + + + + + + =
  = + + + + + =
   = + + + =
    = + =
     =
*/
int i, j, k;
// üst hissə

for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
for(i=1; i<tərəf; ++i){
for( j=0; j<tərəf-i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=tərəf - i + 1; j<tərəf + i; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
// alt hissə
for(i=2; i<tərəf; ++i){
for( j=0; j<i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=i ; j<2*tərəf - i - 1; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
rombun tərəfinin uzunluğunu, tərəfinin və 
daxilinin rəng simvollarını daxil edin 
6 + -
     +
    + - +
   + - - - +
  + - - - - - +
 + - - - - - - - +
+ - - - - - - - - - +
 + - - - - - - - +
  + - - - - - +
   + - - - +
    + - +
     +
C:\cpp\prog2\Debug>

7-ci çalışma.

Çalışma 5-in tələblərini yerinə yetirən üçbucaq funksiyası qurun, hansı ki, ekranda üçbucaq çəksin. Bu funksiyadan istifadə edib proqram tərtib edin və icra edin.


// həll_5_7.cpp

#include <iostream>

// üçbucaq funksiyasının elanı
void üçbucaq (int , char, char);

int main(int argc, char *argv[])
{
int x;
char c,d;

std::cout<<"üçbucağın tərəfinin uzunluğunu, tərəfinin və\n"
     <<"daxilinin rəng simvollarını daxil edin \n";

std::cin>>x>>c>>d;

üçbucaq(x,c,d);
}

// üçbucaq funksiyasının proqram kodu
void üçbucaq (int tərəf, char t_rəng, char d_rəng) 
{
/*
əgər istifadəçi 5 , &, = parametrlərini daxil etsə,
proqram ekranda aşağıdakı kimi üçbucaq cəkməlidir.
    =
   = + =
  = + + + =
 = + + + + + =
= = = = = = = = =
*/
int i, j, k;

/* üst hissə */
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
for(i=1; i<tərəf - 1; ++i){
for( j=0; j<tərəf-i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=teref - i + 1; j<tərəf + i; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}

// alt hissə
std::cout<<" ";
for(i=1; i<2*tərəf; ++i)
std::cout<<t_rəng<<" ";
std::cout<<"\n";
std::cout<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe
üçbucağın tərəfinin uzunluğunu, tərəfinin və
daxilinin rəng simvollarını daxil edin
7 u o
      u
     u o u
    u o o o u
   u o o o o o u
  u o o o o o o o u
 u o o o o o o o o o u
u u u u u u u u u u u u u
C:\cpp\prog2\Debug>

8-ci çalışma.

Kvadrat, romb və ücbucaq funksiyalarından istifadə etməklə, elə proqram tərtib edin ki, əvvəl istifadəçidən tərəfin uzunluğunu, tərəfin və fiqurun daxilini rəngləmək üçün simvolları daxil etməsini istəsin. Daha sonra, istifadəçidən 1, 2 və 3 rəqəmlərindən birini daxil etməyini istəsin. Əgər istifadəçi 1 daxil edərsə, onda ekranda kvadrat, 2 daxil edərsə, romb, 3 daxil edərsə, üçbucaq çəksin.


// həll_5_8.cpp

#include <iostream>

void kvadrat (int , char, char);
void romb (int , char, char);
void üçbucaq (int , char, char);

int main(int argc, char *argv[])
{
int x,k;
char c,d;
std::cout<<"Fiqurun tərəfinin uzunlugunu, tərəfinin daxilinin \n"
     <<"və rəng simvollarını daxil edin \n";
std::cin>>x>>c>>d;

std::cout<<"Ekranda çəkmək istədiyiniz fiqurun nömrəsini daxil edin\n";
std::cout<<"Üçbucaq üçün 1, romb üçün 2, kvadrat üçün 3\n"
     <<" rəqəmini daxil edin\n";

std::cin>>k;

switch(k){
case 1:
üçbucaq(x,c,d);
break;
case 2:
romb(x,c,d);
break;
case 3:
kvadrat(x,c,d);
}
}

/* kvadrat funksiyasının proqram kodu */
void kvadrat (int tərəf, char t_rəng, char d_rəng) {

/* burada bir balaca izaha ehtiyac var.
çəkdiyimiz fiqurun kənarları t_rəng simvolu,
daxili isə, d_rəng simvolu ilə rənglənməlidir.
*/
int i, j;
/* tutaq ki, tərəfin uzunluğu 5, tərəfin rəng simvolu #, 
daxilin rəng simvolu isə @-dir. 
Onda aşağıdakı kod ekranda
# # # # #
çap ediləcək
*/
for(j=0; j<tərəf; ++j)
std::cout<<t_rəng<<" ";
std::cout<<"\n";
/* aşağıdakı kod 5-2=3 dəfə təkrar olunacaq.
və hər dəfə təkrar olunanda ekranda əvvəlcə #,
daha sonra 5-2=3 sayda @, daha sonra isə #
simvolunu çap edəcək. aşağıdakı kimi:
# @ @ @ #
3 dəfə təkrar olunanda isə, ekranda bu şəkil alınır
# @ @ @ #
# @ @ @ #
# @ @ @ #
*/
for(i=1; i<tərəf-1; ++i){
std::cout<<t_rəng<<" ";
for(j=1; j<tərəf-1; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
/* sonda yuxarıda baxdığımız kod 
fiquru tamamlamaq üçün təkrar olunur
# # # # #
*/
for(j=0; j<tərəf; ++j)
std::cout<<t_rəng<<" ";
std::cout<<"\n";
/*
nəticədə ekranda tərəfinin uzunluğu 5, kənarları #,
daxili isə @ simvolu ilə rənglənmiş kvadrat alınır.
aşağıdakı kimi.
# # # # #
# @ @ @ #
# @ @ @ #
# @ @ @ #
# # # # #
*/
}

/*===================================================*/
/* romb funksiyasının proqram kodu */
void romb (int tərəf, char t_rəng, char d_rəng) 
{
/*
əgər istifadəçi 6, =, + parametrlərini daxil etsə, 
proqram ekranda aşağıdakı kimi romb çəkməlidir.
     =
    = + =
   = + + + =
  = + + + + + =
 = + + + + + + + =
= + + + + + + + + + =
 = + + + + + + + =
  = + + + + + =
   = + + + =
    = + =
     =
*/
int i, j, k;
/* üst hissə */
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
for(i=1; i<tərəf; ++i){
for( j=0; j<tərəf-i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=tərəf - i + 1; j<tərəf + i; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
/* alt hissə */
for(i=2; i<tərəf; ++i){
for( j=0; j<i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=i ; j<2*tərəf - i - 1; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}


/*===============================*/
/* üçbucaq funksiyasının proqram kodu */
void üçbucaq (int tərəf, char t_rəng, char d_rəng)
{
/*
əgər istifadəçi 5, +, = parametrlərini daxil etsə, 
proqram ekranda aşagıdakı kimi romb çəkməlidir.
    =
   = + =
  = + + + =
 = + + + + + =
= = = = = = = = =
*/
int i, j, k;
/* ust hissə */
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
for(i=1; i<tərəf - 1; ++i){
for( j=0; j<tərəf-i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=tərəf - i + 1; j<tərəf + i; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
/* alt hissə */
std::cout<<" ";
for(i=1; i<2*tərəf; ++i)
std::cout<<t_rəng<<" ";
std::cout<<"\n";
std::cout<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
Fiqurun tərəfinin uzunluğunu, tərəfinin 
və daxilinin rəng simvollarını daxil edin 
9 – k 
Ekranda çəkmək istədiyiniz fiqurun nömrəsini daxil edin 
Üçbucaq üçün 1, romb üçün 2, kvadrat üçün 3
rəqəmini daxil edin 
3 
- - - - - - - - - 
- k k k k k k k - 
- k k k k k k k - 
- k k k k k k k - 
- k k k k k k k - 
- k k k k k k k - 
- k k k k k k k - 
- k k k k k k k - 
- - - - - - - - - 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

9-cu çalışma.

Çalışma 8-i elə dəyişin ki, proqram istifadəçidən fiqurun tərəfinin uzunluğunu və rəng simvolları daxil etdikdən sonra, istədiyi fiqurun çəkilməsi üçün 1, 2, 3 simvollarından birini daxil etməsini istəsin. Bu prosesi istifadəçi 0 rəqəmi daxil edənə kimi təkrar eləsin. Bu zaman proqramın istifadəçidən tərəfin uzunluğu və rəng simvollarını qəbul edən hissəsini də ayrı bir funksiya kimi tərtib edin.


// həll_5_9.cpp

#include <iostream>

void kvadrat (int , char, char);
void romb (int , char, char);
void üçbucaq (int , char, char);
void hazırlıq_işləri( int *);
void yerinə_yetir(int);

/* main - proqramın əsas funksiyası */
int main(int argc, char *argv[])
{

int k;
hazırlıq_işləri(&k);
/* gördüyünüz kimi, mən daxil etdiyim variantda
ilkin_hazırlıq funksiyası 2 dəfə cağırılıb.
məncə bu optimal variant deyil.
əgər daha lokanik variantını tərtib edə bilərsinizsə,
öz həllinizi progbits.az saytına yerləşdirməyinizi xahiş edirəm.
*/
while (k!=0){
yerinə_yetir(k);
hazırlıq_işləri(&k);
}
}
/*=========================================================*/

/* kvadrat funksiyasının proqram kodu */
void kvadrat (int tərəf, char t_rəng, char d_rəng) 
{

/* burada bir balaca izaha ehtiyac var.
çəkdiyimiz fiqurun kənarları t_rəng simvolu, daxili isə,
d_rəng simvolu ilə rənglənməlidir. */

int i, j;
/* tutaq ki, tərəfin uzunluğu 5, tərəfin rəng simvolu #, daxilin rəng
simvolu isə @-dır. Onda aşağıdakı kod ekranda
# # # # #
çap ediləcək
*/
for(j=0; j<tərəf; ++j)
std::cout<<t_rəng<<" ";
std::cout<<"\n";
/* aşağıdakı kod 5-2=3 dəfə təkrar olunacaq.
və hər dəfə təkrar olunanda ekranda əvvəlcə #,
daha sonra 5-2=3 sayda @, daha sonra isə, #
simvolunu çap edəcək. aşağıdakı kimi:
# @ @ @ #
3 dəfə təkrar olunanda isə, ekranda bu şəkil alınır
# @ @ @ #
# @ @ @ #
# @ @ @ #
*/
for(i=1; i<tərəf-1; ++i){
std::cout<<t_rəng<<" ";
for(j=1; j<tərəf-1; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
/* sonda yuxarıda baxdığımız kod, fiquru tamalamaq üçün təkrar olunur
# # # # #
*/
for(j=0; j<tərəf; ++j)
std::cout<<t_rəng<<" ";
std::cout<<"\n";
/*
nəticədə ekranda tərəfinin uzunluğu 5, kənarları #,
daxili isə @ simvolu ilə rənglənmiş kvadrat alınır.
aşağıdakı kimi.
# # # # #
# @ @ @ #
# @ @ @ #
# @ @ @ #
# # # # #
*/
}

/* romb funksiyasının proqram kodu */
void romb (int tərəf, char t_rəng, char d_rəng) 
{

/* əgər istifadəçi 6, =, + parametrlerini daxil etsə, proqram ekranda
aşağıdakı kimi romb çəkməlidir.
     =
    = + =
   = + + + =
  = + + + + + =
 = + + + + + + + =
= + + + + + + + + + =
 = + + + + + + + =
  = + + + + + =
   = + + + =
    = + =
     =
*/
int i, j, k;

/* üst hissə */
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_reng<<" ";
std::cout<<"\n";
for(i=1; i<tərəf; ++i){
for( j=0; j<tərəf-i; ++j)
std::cout<<" ";
std::cout<<t_reng<<" ";
for (j=tərəf - i + 1; j<tərəf + i; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}

/* alt hissə */
for(i=2; i<tərəf; ++i){
for( j=0; j<i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=i ; j<2*tərəf - i - 1; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}

/* üçbucaq funksiyasının proqram kodu */
void üçbucaq (int tərəf, char t_rəng, char d_rəng)
{

/* əgər istifadəçi 5, &, = parametrlərini daxil etsə, proqram ekranda
aşağıdakı kimi romb çəkməlidir.
    =
   = + =
  = + + + =
 = + + + + + =
= = = = = = = = =
*/
int i, j, k;
/* üst hissə */
for(j=0; j<tərəf; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
for(i=1; i<tərəf - 1; ++i){
for( j=0; j<tərəf-i; ++j)
std::cout<<" ";
std::cout<<t_rəng<<" ";
for (j=tərəf - i + 1; j<tərəf + i; ++j)
std::cout<<d_rəng<<" ";
std::cout<<t_rəng<<" ";
std::cout<<"\n";
}
/* alt hissə */
std::cout<<" ";
for(i=1; i<2*tərəf; ++i)
std::cout<<t_rəng<<" ";
std::cout<<"\n";
std::cout<<"\n";
}

/*=================================================================*/
void hazırlıq_işləri( int *k)
{
std::cout<<"Ekranda çəkmək istədiyiniz fiqurun nömrəsini daxil edin\n";
std::cout<<"Üçbucaq üçün 1, romb üçün 2, kvadrat üçün 3 rəqəmini daxil edin\n";
std::cout<<"Cıxış üçün 0 rəqəmini daxil edin\n";
std::cin>>*k;
}

/*=================================================================*/
void yerinə_yetir(int k)
{
int x;
char c,d;
std::cout<<"Fiqurun tərəfinin uzunluğunu, tərəfinin və daxilinin rəng simvollarını daxil edin \n";
std::cin>>x>>c>>d;
switch(k){
case 1:
üçbucaq(x,c,d);
break;
case 2:
romb(x,c,d);
break;
case 3:
kvadrat(x,c,d);
}
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe
Ekranda çəkmək istədiyiniz fiqurun nömrəsini daxil edin
Üçbucaq üçün 1, romb üçün 2, kvadrat üçün 3 rəqəmini daxil edin
Cıxış üçün 0 rəqəmini daxil edin
1
Fiqurun tərəfinin uzunluğunu, tərəfinin və daxilinin rəng simvollarını daxil edin
5 y u
    y
   y u y
  y u u u y
 y u u u u u y
y y y y y y y y y
Ekranda çəkmək istədiyiniz fiqurun nömrəsini daxil edin
Üçbucaq üçün 1, romb üçün 2, kvadrat üçün 3 rəqəmini daxil edin
Cıxış üçün 0 rəqəmini daxil edin
3
Fiqurun tərəfinin uzunluğunu, tərəfinin və daxilinin rəng simvollarını daxil edin
7 * -
* * * * * * *
* - - - - - *
* - - - - - *
* - - - - - *
* - - - - - *
* - - - - - *
* * * * * * *
Ekranda çəkmək istədiyiniz fiqurun nömrəsini daxil edin
Üçbucaq üçün 1, romb üçün 2, kvadrat üçün 3 rəqəmini daxil edin
Cıxış üçün 0 rəqəmini daxil edin
0
C:\cpp\prog2\Debug> C:\cpp\prog2\Debug>

§6. Cərgələr

1-ci çalışma.

max proqramını ele dəyişin ki, istifadəçinin daxil etdiyi ədədlərin içində ən kiçiyini tapsın.


// həll_6_1.cpp

#include <iostream>

int main(int argc, char *argv[])
{
/* ən çoxu 100 elementə hesablanıb */
int i, x[100], say, min;

std::cout<<"100-dən kiçik hər hansı bir ədəd daxil edin > 0 \n";
std::cin>>say;
std::cout<<say<<" sayda ədəd daxil edin\n";

for (i=0; i<say; i++ )
std::cin>>x[i];

min = x[0];

for (i=0; i<say; i++)
if (x[i] < min) min = x[i];

std::cout<<"sizin daxil etdiyiniz ədədlərin içində ən kiçiyi "<<min<<"-dir\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
100-dən kiçik hər hansı bir ədəd daxil edin > 0 
7 
7 sayda ədəd daxil edin
1 2 5 34 56 890 5 
sizin daxil etdiyiniz ədədlərin içində ən kiçiyi 1–dir 
C:\cpp\prog2\Debug>

4-cü çalışma.

Elə proqram qurun ki, istifadəçinin daxil etdiyi ədədləri artan sıra ilə düzsün.


// həll_6_4.cpp

#include <iostream>

int main(int argc, char *argv[])
{

/* ən çoxu 100 elementə hesablanıb */
int i, j, x[100], say, min, mövqe, keçid;
std::cout<<"100-dən kiçik hər hansı bir ədəd daxil edin > 0 \n";
std::cin>>say;
std::cout<<say<<" sayda ədəd daxil edin \n";

for (i=0; i<say; i++ )
std::cin>>x[i];
for (i=0; i<say; ++i){
min = x[i];
movqe = i;
for (j=i; j<say; ++j)
if (x[j] < min){
min = x[j];
mövqe = j;
}

keçid = x[i];
x[i] = min;
x[mövqe] = keçid;
}

for (i=0; i<say; i++)
std::cout<<x[i]<<" ";

std::cout<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
100-dən kiçik hər hansı bir ədəd daxil edin > 0 
7 
7 sayda ədəd daxil edin 
12 3 56 678 0 90 345 
0 3 12 56 90 345 678 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

6-cı çalışma.

Elə funksiya tərtib edin ki, verilmiş cərgənin elementləri arasında ən böyüyünü tapsın. Bu funksiyadan istifadə edərək proqram tərtib edin ki, istifadəçidən əvvəl say, daha sonra bu say qədər hər hansı ədəd daxil etməsini istəsin və bu ədədlərin ən böyüyünü çap etsin.


// həll_6_6.cpp

#include <iostream>

int max(int *, int);

int main(int argc, char *argv[])
{

/* ən çoxu 100 elementə hesablanıb */
int i, x[100], say, max_ədəd;
std::cout<<"100-dən kiçik hər hansı bir ədəd daxil edin > 0 \n";
std::cin>>say;
std::cout<<say<<" sayda ədəd daxil edin \n";

for (i=0; i<say; i++ )
std::cin>>x[i];

max_eded = max(x,say);
std::cout<<"sizin daxil etdiyiniz ədədlərin içində ən böyüyü "<<max_eded<<"-dir\n";
}
/*==================================================*/
int max(int *x, int say)
{
int i , max;
max = x[0];

for (i=0; i<say; i++)
if (x[i] < max) max = x[i];

return max;
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
100-dən kiçik hər hansı bir ədəd daxil edin > 0 
6 
6 sayda ədəd daxil edin 
1 34 567 0 34 23 
sizin daxil etdiyiniz ədədlərin içində ən böyüyü 567–dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

7-ci çalışma.

6-cı proqramı elə dəyişin ki, istifadəçi say olaraq 0 daxil edənə kimi proqram təkrar olunsun.

Bax: çalışma 5_9-a.

 

§7. Sətirlər

1-ci çalışma.

Elə proqram qurun ki, istifadəçinin daxil etdiyi sətrin 5-ci simvolu ilə 15-ci simvolu arasında qalan hissəsini çap etsin. Əgər sətrin uzunluğu 20-dən kiçik olarsa, onda ekranda bu barədə məlumat çap etsin.


// həll_7_1.cpp

#include <iostream>
#include <string.h>

int main(int argc, char *argv[])
{

/* 1024 elementdən ibarət sətir elan edirik */
char setir[1024];

std::cout<<"Hər hansı sətir daxil edin\n";
std::cin>>sətir;

if (strlen(sətir) < 20)
std::cout<<"Sizin daxil etdiyiniz sətrin uzunluğu 20-dən kiçikdir \n";
else
{
char *p, *q, bufer[20];
memset(bufer, 0 ,20);

/* p-ni sürüşdürürük 5-ci simvolun uzərinə */
p = setir + 5;
/* 5-ci simvoldan başlayaraq növbəti 9 simvolu buferə köçürürük */
strncpy(bufer,p,9);

std::cout<<"5-ci simvol ilə 15-ci simvol arasında olan hissə "
     <<bufer<<"-dir\n";
}
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
Hər hansı sətir daxil edin 
Bir zərrənin işığına milyonlar şərik. 
5-ci simvol ilə 15-ci simvol arasında olan hissə "errenin i"–dir 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

2-ci çalışma.

Elə proqram tərtib edin ki, istifadəçidən 6 sətir qəbul etsin və bu sətirləri ardıcıl birləşdirərək tam sətir kimi çap etsin.


// həll_7_2.cpp

#include <iostream>
#include <string.h>

int main(int argc, char *argv[])
{

char sətir[1024] , bufer[20];
int i,k;
memset(sətir,0,1024);
memset(bufer,0,10);

std::cout<<"Uzunluğu 20-dən kiçik olan 6 sətir daxil edin \n";

for(i=0; i<6; ++i){
std::cin>>bufer;
/* bufer-i sətir-e elave edirik */
strcat(sətir, bufer);
/* buferi yeniliyirik */
memset(bufer,0,20);
}
std::cout<<"\n"<<setir<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
Uzunluğu 20-dən kiçik olan 6 sətir daxil edin 
aaa 
bbb 
ccccc 
dddddd 
ffffffffff 
ggggggg 
aaabbbcccccddddddffffffffffggggggg 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

3-cü çalışma.

Elə proqram tərtib edin ki, istifadəçidən 5 sətir qəbul etsin və bu sətirləri daxil olma sırasının əksi ardıcıllığında birləşdirərək tam sətir kimi çap etsin.


// həll_7_3.cpp

#include <iostream>
#include <string.h>

/* bu proqramda biz elementləri sətir olan cərgələrdən
istifadə edəcəyik */

int main(int argc, char *argv[])
{
char *sətirlər[5], bufer[20], *sətir, bütöv_sətir[1024];

memset(bütöv_sətir,0,1024);

int i,k;
std::cout<<"Uzunluğu 20-dən kiçik olan 5 sətir daxil edin\n";

for(i=0; i<5; ++i){
std::cin>>bufer;
k = strlen(bufer);
sətirlər[i] = new char[k];
strncpy(sətirlər[i],bufer,k);
}

for (i=4; i>=0; --i)
strcat(butov_sətir,sətirlər[i]);
std::cout<<"\n"<<butov_setir<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
Uzunluğu 20-dən kiçik olan 5 sətir daxil edin 
qqq 
wwww 
eeee 
rrrrr 
tttt 
ttttrrrrreeeewwwwqqq 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

§8. Strukt tiplər

1-ci çalışma.

Aşağıdakı işləri görən proqram tərtib edib icra edin.

int tipli x və 30 simvollu sətir tipli soz dəyişənlərindən ibarət olan str adlı yeni struct tipi yaradın. Bu yeni yaratdığınız tipdən str_dey adlı dəyişən elan edin. Bu dəyişənin x və soz üzvlərinə müvafiq olaraq 10 və "proqramlashdirma" sözlərini mənimsədin. str_dey dəyişəninin üzvlərinin qiymətlərini ekranda çap edin.


// həll_8_1.cpp

#include <iostream>
#include <string.h>

struct str 
{
int x;
char söz[30];
};

int main(int argc, char *argv[])
{

str str_dəy;

str_dəy.x=10;
strcpy(str_dəy.söz,"proqramlaşdırma");

std::cout<<"str_dəy-in hədləri \nx - "
<<str_dey.x<<"\nsoz - "<<str_dey.söz<<"\n";
return 0;
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
str_dəy-in hədləri 
x – 50 
soz – proqramlaşdırma 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

2-ci çalışma.

Yuxarıdakı məsələdə str tipindən ünvan tipli str_gst dəyişəni elan edin və məsələnin tələblərin yerinə yetirin.


// həll_8_2.cpp

#include <iostream>
#include <string.h>

struct str 
{
int x;
char söz[30];
};

int main(int argc, char *argv[])
{
str *str_dəy;
str_dəy =new str;
str_dəy->x=50;

memset(str_dəy->soz,0,30);
strcpy(str_dey->soz,"proqramlaşdırma");

std::cout<<"str_dəy-in hədləri \nx - "
<<str_dəy->x<<"\nsoz - "<<str_dey->soz<<"\n";
return 0;
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
str_dəy-in hədləri 
x – 50 
söz – proqramlaşdırma 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

3-cü çalışma.

1-ci çalışmada daxil olunan str tipli 5 elementdən ibarət strler cərgəsi elan edin. Bu cərgənin hər bir elementinin üzvlərinə istifadəçi tərəfindən daxil olunan qiymətlər mənimsədin. Daha sonra bu qiymətləri ekranda çap edin.


// həll_8_3.cpp

#include <iostream>
#include <string.h>

struct str 
{
int x;
char söz[30];
};

int main(int argc, char *argv[])
{
str strler[5];
int i;
for(i=1; i<=5; ++i){
std::cout<<"strlerin "<<i
<<"-ci elementinin x ve söz hədlərini daxil edin\n";
std::cin>>strler[i].x>>strler[i].söz;
}

std::cout<<"strler-in elementlərinin x və söz hədləri\n";

for(i=1; i<=5; ++i)
std::cout<<"x - "<<strler[i].x
<<"\nsöz - "<<strler[i].soz<<"\n";
return 0;
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
strlerin 1-ci elementinin x və söz hədlərini daxil edin 
4 fərid 
strlerin 2-ci elementinin x və söz hədlərini daxil edin 
6 ramin 
strlerin 3-ci elementinin x və söz hədlərini daxil edin 
7 elif 
strlerin 4-ci elementinin x və söz hədlərini daxil edin 
56 mithat 
strlerin 5-ci elementinin x və söz hədlərini daxil edin 
23 taleh 
strler-in elementlerinin x və söz hədləri 
x - 4, söz - fərid 
x - 6, söz - ramin 
x - 7, söz - elif 
x - 56, söz - mithat 
x - 5, söz – taleh 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

4-cü çalışma.

Çalışma 3-ü funksiyalardan istifadə etməklə həll edin. Bu məqsədlə 2 funksiya tərtib edin, daxil_et və cap_et. Müvafiq olaraq daxil_et funksiyası istifadəçidən məlumatları oxuyub, strler cərgəsinin elementlərinə mənimsədəcək, cap_et isə strler cərgəsinin elementlərinin qiymətlərini çap edəcək.


// həll_8_4.cpp

#include <iostream>
#include <string.h>

struct str 
{
int x;
char söz[30];
};

void daxil_et( str strler[], int k);
void cap_et( str strler[], int k);

int main(int argc, char *argv[])
{
str strler[6];
int k=5;
daxil_et(strler,k);
çap_et(strler,k);

return 0;
}

/*==================================================*/
void daxil_et( str strler[], int k)
{
int i;
for(i=1; i<=k; ++i){
std::cout<<"strlerin "<<i
  <<"-ci elementinin x və söz hədlərini daxil edin\n";
std::cin>>strler[i].x>>strler[i].söz;
}
}

/*==================================================*/
void çap_et(struct str strler[], int k)
{
int i;
std::cout<<"strler-in elementlərinin x və söz hədləri\n";
for(i=1; i<=k; ++i)
std::cout<<"x - "<<strler[i].x<<"\nsöz - "<<strler[i].soz<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
strlerin 1-ci elementinin x və söz hədlərini daxil edin 
1 alma 
strlerin 2-ci elementinin x və söz hədlərini daxil edin 
2 heyva 
strlerin 3-ci elementinin x və söz hədlərini daxil edin 
3 nar 
strlerin 4-ci elementinin x və söz hədlərini daxil edin 
4 gilas 
strlerin 5-ci elementinin x və söz hədlərini daxil edin 
5 erik 
strler-in elementlərinin x və söz hədləri 
x - 1, söz - alma
x - 2, söz - heyva
x - 3, söz - nar
x - 4, söz - gilas
x - 5, söz – ərik 
C:\cpp\prog2\Debug>

5-ci çalışma

Funksiyalardan istifadə etməklə elə proqram qurun ki, çalışma 1-də daxil olunan str tipli 5 elementdən ibarət strler cərgəsi elan etsin. daxil_et funksiyası vasitəsilə istifadəçidən oxunan qiymətləri bu cərgənin elementlərinə mənimsətsin. Daha sonra, max_el funksiyası tərtib edin, hansı ki, strler cərgəsinin elementləri arasında x-i ən böyük olanın qiymətlerini (x və söz) çap etsin.


// həll_8_5.cpp

#include <iostream>
#include <string.h>

struct str 
{
int x;
char söz[30];
};

void daxil_et( str strler[], int k);
str max_el( str strler[], int k);

int main(int argc, char *argv[])
{
str strler[6], elem;
int k=6;

daxil_et(strler,k);
elem = max_el(strler,k);

std::cout<<"max x, söz: "<<elem.x<<" "<<elem.söz<<"\n";

return 0;
}

/*==================================================*/
void daxil_et( str strler[], int k)
{
int i;
for(i=1; i<=k; ++i){
std::cout<<"strlerin "<<i
<<"-ci elementinin x və söz hədlərini daxil edin\n";
std::cin>>strler[i].x>>strler[i].söz;
}
}

/*==================================================*/
struct str max_el(struct str strler[], int k)
{
int i,j=0,dey=strler[0].x;
for(i=1; i<k; ++i){
if (strler[i].x > dəy ){
j = i;
dəy = strler[i].x;
}
}
return strler[j];
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug>./prog2.exe 
strlerin 1-ci elementinin x və söz hədlərini daxil edin 
45 baki 
strlerin 2-ci elementinin x və söz hədlərini daxil edin 
34 london 
strlerin 3-ci elementinin x və söz hədlərini daxil edin 
456 texas 
strlerin 4-ci elementinin x və söz hədlərini daxil edin 
78 istanbul 
strlerin 5-ci elementinin x və soz hədlərini daxil edin 
12 ankara 
max x, söz: 456, texas 
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

§9. Siyahılar

1-ci çalışma.

Proqram 2 nümunəsini elə dəyişin ki, siyahının obyektləri özündə int tipli x həddindən əlavə char tipli ad[20] həddi də saxlasın. Müvafiq olaraq, siyahi yaratma və cap_et funksiyalarında lazımi dəyişikliyi edin. Proqramı kompilyasiya və icra edin, siyahi yaradin, onun elementlərini çap edin.


// həll_9_1.cpp

#include <iostream>
#include <string.h>

struct syh_el
{
int x;
char ad[20];
syh_el *növb_el;};

syh_el *siyahı_yarat(syh_el *syh, int elem_say);
void siyahini_çap_et( syh_el *);

int main(int argc, char *argv[])
{

/* istifadə edəcəyimiz dəyişənləri elan edirik */
syh_el *mənim_syh;
/* siyahının boş olduğunu bildirmək üçün */
mənim_syh = NULL; 
int say;

std::cout<<"Siyahının elementlərinin sayını daxil edin \n";
std::cin>>say;

mənim_syh=siyahı_yarat(mənim_syh,say);
siyahını_çap_et(mənim_syh);

return 0;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syh_el *siyahı_yarat( syh_el *syh, int elem_say)
{

syh_el *p, *q;

p=syh;
q=syh;
int i,dəy;
char bufer[30];

for (i=1; i<=elem_say; ++i){
std::cout<<"siyahının "<<i
<<"-ci elementinin x və ad hədlərini daxil edin \n";
memset(bufer,0,30);
std::cin>>dey>>bufer;
p = new syh_el;
p->x = dey;
strncpy(p->ad,bufer,20);

*(p->ad + 20) = '\0';
p->növb_el = NULL;

if (syh==NULL){
syh=p;
q = p;
p = NULL; }
else {
q->novb_el = p;
q = p;
}
}
return syh;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void siyahını_çap_et(syh_el *syh)
{
syh_el *p;
int dəy, fix = 0;
char bufer[30];
p = syh;
if (syh == NULL ) {
std::cout<<"Siyahı boşdur \n";
return;
}

std::cout<<"Siyahının elementləri \n";
while(p!=NULL)
{
/* elementlərin çapının ekranda gözəl görünməsi üçün */
if (fix++ != 0) std::cout<<" -> ";
dey = p->x;
memset(bufer,0,30);
strncpy(bufer, p->ad, 20);
*(bufer + 20) = '\0';
std::cout<<"(0<<"dey<<" "<<bufer<<")";
p = p->novb_el; /* növbəti elementə keç */
}
std::cout<<"\n";
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
Siyahının elementlərinin sayını daxil edin 
4
siyahının 1-ci elementinin x və ad hədlərini daxil edin 
12 kitab 
siyahının 2-ci elementinin x və ad hədlərini daxil edin 
34 dəftər 
siyahının 3-ci elementinin x və ad hədlərini daxil edin 
456 idman 
siyahının 4-ci elementinin x və ad hədlərini daxil edin 
124 həftə
Siyahının elementləri 
(12 kitab) -> (34 dəftər) -> (456 idman) -> (124 həftə)
C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>

2-ci çalışma

Yuxarıdakı proqrama axtarış funksiyası əlavə edin. Proqram istifadəçidən int tipli ədəd istəyir və siyahıda x-i bu ədədə bərabər olan obyektin ad[20]-həddini çap edir.


// həll_9_2.cpp

#include <iostream>
#include <string.h>

struct syh_el
{
int x;
char ad[20];
syh_el *növb_el;};

syh_el *siyahı_yarat(syh_el *syh, int elem_say);
syh_el * axtarış(syh_el *, int);

int main(int argc, char *argv[])
{
/* istifadə edəcəyimiz dəyişənləri elan edirik */
syh_el *mənim_syh, *syh_dey = NULL;
int x;
char bufer[30];
memset(bufer,0,30);
/* siyahının boş olduğunu bildirmək üçün */
mənim_syh = NULL; 
int say;

std::cout<<"Siyahının elementlərinin sayını daxil edin \n";
std::cin>>say;

mənim_syh=siyahı_yarat(mənim_syh,say);

std::cout<<"Siyahıdan ad həddini tapmaq istədiyiniz "
     <<"elementin x-ni daxil edin \n";
std::cin>>x;

syh_dey = axtarış(mənim_syh,x);

strcpy(bufer,syh_dəy->ad);
if (syh_dəy!=NULL)
std::cout<<"x həddi "
     <<x<<"-a bərabər olan elementin ad həddi "
     <<bufer<<"-dir\n";

return 0;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syh_el *siyahı_yarat( syh_el *syh, int elem_say)
{
syh_el *p, *q;
p=syh;
q=syh;
int i,dəy;
char bufer[30];

for (i=1; i<=elem_say; ++i)
{
std::cout<<"siyahının "<<i
<<"-ci elementinin x və ad hədlərini daxil edin \n";
memset(bufer,0,30);
std::cin>>dey>>bufer;
p = new syh_el;
p->x = dəy;
strncpy(p->ad,bufer,20);
*(p->ad + 20) = '\0';
p->novb_el = NULL;
if (syh==NULL){
syh=p;
q = p;
p = NULL; }
else {
q->növb_el = p;
q = p;
}
}
return syh;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syh_el * axtarış(syh_el *syh, int tap)
{
syh_el *p;
p = syh;
if (syh == NULL ) {
return NULL;
}
while(p!=NULL){
if (p->x==tap) return p;
p = p->növb_el; /* növbəti elementə keç */
}
return NULL;
}

Nümunə

Nəticə:


C:\cpp\prog2\Debug> 
C:\cpp\prog2\Debug>./prog2.exe 
Siyahının elementlərinin sayını daxil edin 
6 
siyahının 1-ci elementinin x və ad hədlərini daxil edin 
123 kitab 
siyahının 2-ci elementinin x və ad hədlərini daxil edin 
34 musiqi 
siyahının 3-ci elementinin x və ad hədlərini daxil edin 
56 ehtimal 
siyahının 4-ci elementinin x və ad hədlərini daxil edin 
79 şəbəkə 
siyahının 5-ci elementinin x və ad hədlərini daxil edin 
875 prosessor 
siyahının 6-ci elementinin x və ad hədlərini daxil edin 
257 fizika 
Siyahıdan tapmaq istədiyiniz elementin x-ni daxil edin
79 
x həddi 79-a bərabər elementin ad həddi şəbəkə–dir 
C:\cpp\prog2\Debug>

3-cü çalışma

İki siyahını birləşdirən funksiya tərtib edin. Funksiya parametr olaraq iki siyahı qəbul edir, daha sonra, bu siyahılardan birincini ikinci ilə birləşdirir.


// həll_9_3.cpp

#include <iostream>
#include <string.h>

struct syh_el
{
int x;
char ad[20];
syh_el *növb_el;};

syh_el *siyahı_yarat(syh_el *syh, int elem_say);
void birləşdir(syh_el *, syh_el *);
void siyahını_çap_et(syh_el *);

int main(int argc, char *argv[])
{
/* istifadə edəcəyimiz dəyişənləri elan edirik */
syh_el *syh1, *syh2 = NULL;
int x;
char bufer[30];
memset(bufer,0,30);
/* siyahıların boş olduğunu bildirmək üçün */
syh1 = syh2 = NULL; 
int say;

std::cout<<"Birinci siyahının elementlərinin sayını"
     <<" daxil edin \n";
std::cin>>say;
syh1=siyahı_yarat(syh1,say);

std::cout<<"İkinci siyahının elementlərinin sayını "
     <<"daxil edin \n";
std::cin>>say;
syh2=siyahı_yarat(syh2,say);

/*syh1 -i syh2 ilə birləşdiririk*/
birləşdir(syh1,syh2);
siyahını_çap_et(syh1);

return 0;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syh_el *siyahı_yarat( syh_el *syh, int elem_say)
{
syh_el *p, *q;