برنامه نویسان کامپیوتر

این وب سایت به منظور استفاده دانشجویان دانشگاه شهید بهشتی کرج ایجاد شده

برنامه نویسان کامپیوتر

این وب سایت به منظور استفاده دانشجویان دانشگاه شهید بهشتی کرج ایجاد شده

جلسه دهم

اشاره گر به اشاره­گر

int*  p;

int x=167;

p=&x;

p جایی در حافظه قرار می­گیرد و آدرسی دارد آدرس p را میتوان در یک اشاره به اشاره گر قرار داد.

int** q;

q میتواند آدرس متغیری را نگه دارد که آن متغیر آدرس یک integer را نگه می دارد.

q=&p;

cout<<*p;è167

cout<<**q;è167

cout<<q;è p آدرس

cout<<*q;è x آدرس

cout<<**q;è x

آرایه ای از اشاره گرها

int* p[10];

آرایه فوق شامل 10 عنصر است که محتویات آن آدرس متغیرهایی از نوع int است.

 

 

 

 

 

 

 

 

آدرس اعداد صحیح

 

ساختار (struct)

نوعی است که توسط کاربر تعریف میشود و شامل فیلدهایی است که نوع فیلد و نام فیلد کاربر مشخص می کند.

شکل کلی یک ساختار:

struct نام ساختار

}

  نوع فیلد1  نام فیلد1;

نوع فیلد2 نام فیلد2;

......

{;

ساختار دانشجو

struct student{

int ID;

char name[30];

char family[40];

float avg;

};

ساختار زمان:

struct time

{

int hour;

int minute;

int second;

};

تعریف متغیری از نوع ساختار همانند تعریف یک متغیر از انواع داده های موجود است.

student s1;

student st[10];

 

id

name

avg

family

 

id

name

avg

family

 

 

 

 

 

 

 

 

اگر بنویسیم st[0].ID=123;

آرایه ای از نوع دانشجو تعریف شده است.

برای دسترسی به فیلدهای نوع دانشجو از نقطه به همراه نام فیلد استفاده کرد.

student s1;

s1.ID=1234;

strcpy(s1.name,"ali");

strcpy(s1.family,"asadi");

s1.avg=11.99;

ID

name

family

avg

 

کدی بنویسید که اطلاعات 10 دانشجو را از کاربر دریافت کنیم.

Student ST[10];

for(int i=0;i<10;i++)

{

            cout<<”\nenter info student “<<i+1<<”:”;

            cin>>ST[i].ID;

            gets(ST[i].name);

            gets(ST[i].family);

            cin>>ST[i].avg;

}

ID

name

family

avg

ID

name

family

avg

 

 

 

 

 

 

 

 

 

 

ساختاری برای دانشجو شامل شماره دانشجویی و نام و فامیلی و معدل بسازید و اطلاعات 4 نفر را از کاربر دریافت کنید و تابعی به نام IsMashroot بنویسید که یک ساختار از نوع student دریافت کرده و در صورتی که دانشجو مشروط باشد 1 و در غیر این صورت صفر را برگرداند. پس از نوشتن تابع فوق وضعیت مشروطی هر 4 نفر را از طریق تابع IsMashroot بررسی کنید.

 

struct student

{

            int stid;

            char stname[30];

            char stfamily[30];

float  stavg;

};

 

int IsMashroot(student s1)

{

if (s1.stavg<12)

            return 1;

else

return 0;

}

void main()

{

student ST[4];

for(int i=0;i<4;i++)

{

            cout<<”\nenter id,name,family,avg student “<<i+1<<”:”;

            cin>>ST[i].stid;

gets(ST[i].stname);

gets(ST[i].stfamily);

cin>>ST[i].stavg;

}

// نمایش وضعیت مشروطی افراد

for(int i=0;i<4;i++)

            if (IsMashroot(ST[i])==1)

            cout<<”\n”<<ST[i].stname<<”  “<<ST[i].stfamily<<” mashroot ast”;

else

 cout<<”\n”<<ST[i].stname<<”  “<<ST[i].stfamily<<” mashroot nist”;

}//main

 

 

 

تابعی بنویسید که همانند یک منوی انتخاب عمل کند و کاربر بتواند با انتخاب یکی از مقادیر کار مربوط به آن گزینه را انجام دهد:

1…..input student info

2…..show info

3…..show student with max avg

4..…change avg

5..…exit

جواب:

#include <iostream.h>

#include <stdio.h>

#include <stdlib.h>

struct student

{

            int stid;

            char stname[30];

            char stfamily[30];

float  stavg;

};

void showinfo(student [],int ) ;

void showMaxAvg(student [],int ) ;

void changeAvg(student [],int ) ;

void input(student [],int );

int menu();

 

void main()

{

 student Students[10];

 int num_of_student;

 cout<<"\nenter # of students:";

 cin>>num_of_student;

 while (1)

 {

            int k=menu();

  switch (k)

  {

            case 1:

             input(Students,num_of_student);

             break;

             case 2:

             showinfo(Students ,num_of_student);

             break;

             case 3:

             showMaxAvg(Students ,num_of_student);

             break;

             case 4:

            changeAvg(Students ,num_of_student);

             break;

             case 5:

             abort();

             }

  }

 }

 void input(student ST[],int num)

 {

 for(int i=0;i<num;i++)

            {

            cout<<"\nenter id,name,family,avg student "<<i+1<<":";

            cin>>ST[i].stid;

            gets(ST[i].stname);

            gets(ST[i].stfamily);

            cin>>ST[i].stavg;

            }

 }

 

 void showMaxAvg(student ST[],int num)

            {

                        int maxindex=0;

                        for(int i=1;i<num ;i++)

                                    if(ST[i].stavg>ST[maxindex].stavg)

                                                maxindex=i;

            cout<<"\n\n show info student with max average:\n";

            cout<<"\n"<<ST[maxindex].stid<<"\t"<<ST[maxindex].stname;

            cout<<"\t"<<ST[maxindex].stfamily<<"\t"<<ST[maxindex].stavg;

            }

 

 void showinfo(student ST[],int num)

 {

cout<<"\nID"<<"\t"<<"Name"<<"\t"<<"family"<<"\t"<<"average";

  for(int i=0;i<num;i++)

cout<<"\n"<<ST[i].stid<<"\t"<<ST[i].stname<<"\t"<<ST[i].stfamily<<"\t"<<ST[i].stavg;

 }

 int menu()

 {

 

            cout<<"\n1…input student info";

            cout<<"\n2…show info";

            cout<<"\n3…show student with max avg ";

            cout<<"\n4…change avg";

            cout<<"\n5…exit";

            cout<<"\n select 1...5\n";

            int x;

            cin>>x;

            return x;

 }

 void changeAvg(student ST[],int num)

 {

            int stid;

            float newavg;

            cout<<"\nenter id of student for change avg:";

            cin>>stid;

            cout<<"\nenetr new avg:";

            cin>>newavg;

            for(int i=0;i<num;i++)

                        if (ST[i].stid== stid)

                                                ST[i].stavg=newavg;

 }

اشاره­گر به ساختار می توانیم داشته باشیم

student* p;

p میتواند آدرس یک متغیر از نوع student را نگه دارد.

student st1;

st1.stid=1234;

strcpy(st1.name,”ali”);

strcpy(st1.family,”akbari”);

st1.stavg=15.99;

p=&st1;

p به st1 اشاره میکند. اگر بخواهید به فیلدهای یک ساختار از طریق اشاره گر به ساختار، دسترسی پیدا کنید باید به جای نقطه از فلش -> استفاده کنید.

cout<<st1.name;èali

cout<<p->name;èali

اگر بخواهیم تعداد دانشجویان را کاربر مشخص کند (اندازه آرایه ST توسط کاربر مشخص شود)

int num;

cout<<”\nenter num:”;

cin>>num;

student ST[num];

کد فوق جوابگو نیست.

int num;

cout<<”\n enter num:”;

cin>>num;

student* ST;

ST=new student[num];

 

 

 

 

 

 

 

 

 

 

آرایه ST دارای num خانه است که هر خانه به اندازه یک student فضا اشغال می کند.

for(int i=0;i<num;i++)

            {

            cout<<"\nenter id,name,family,avg student "<<i+1<<":";

            cin>>ST[i].stid;

            gets(ST[i].stname);

            gets(ST[i].stfamily);

            cin>>ST[i].stavg;

            }

 

 و یا کد زیر را بنویسیم

student * p;

p=ST;//p=&ST[0]

for(int i=0;i<num;i++,p++)

            {

            cout<<"\nenter id,name,family,avg student "<<i+1<<":";

            cin>>p->stid;

            gets(p->stname);

            gets(p->stfamily);

            cin>> p->stavg;

            }


دانلود فایل مثال ها

(*.cpp)


 


نظرات 0 + ارسال نظر
ایمیل شما بعد از ثبت نمایش داده نخواهد شد