শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই ! C...

42
শশশশশশ শশশশশ শশশশ, শশশশশশ শশশশশশশ ! www.bdpathshala.com C Programming শশ শশশশশশশ শশশশ ১৪

Transcript of শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই ! C...

Page 1: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

শি�ক্ষা� মে�লু�ক ডা�না�, আ��দে�র ভা�ষা�দে�ই !www.bdpathshala.com

C Programming এর হা�দে�খশি� পর্ব� ১৪

Page 2: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

টিউটর

• মি�জা�নুর রহ��নু মি�জা�নু• Facebook:

www.facebook.com/mrmbdctg

Page 3: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Custom Data Type/User Defined Data Type

Page 4: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

User Defined Data Types

এই পর্বে�� আ�র� মি�খর্বে��,• User Defined Data Type পমিরমি�মি�• Declaring Structure Type & Structure Variables• Referring and initializing structure elements• Passing structures to a function• Using typedef • Example using structure• Enumeration constants

Page 5: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

পমিরমি�মি�

• আ�র� এখনু পর্য�ন্ত এ�নু স� ডা�ট� ট�ইপ মিনুর্বে� কা�জা কার্বেরমি� র্য� C তে�already defined । কার� আর্বে� উদা�হরণস্বরূপ# int, double and char.

• আ�র� ��ইর্বে$ই মিনুর্বেজার�ই মিনুর্বেজার্বেদার custom ।ডা�ট� ট�ইপ তৈ�মির কারর্বে� প�মির• আ��র্বেদার তৈ�মির ডা�ট� ট�ইপর্বেকা �$� হ� custom data type. অর্বেনুকা ধরর্বেনুর

custom type ডা�ট� ট�ইপ হর্বে� প�র্বের তের্য�নু# structure, union, typedef, enum.

• একাট� structure অথ�� union মিকান্তু built in data type এ�* আ��র্বেদার তৈ�মির আর্বের� একাট� structure/union । তেকা ��র ডা�ট� মিহস�র্বে� র�খর্বে� প�র্বের

• The concept of structure is pretty much the same as arrays except that in an array, all the data is of the same types but in a structure, the data can be of different types.

Page 6: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Definition/স*জ্ঞা�• A structure is a derived data type that

represents a collection of a related data items called components (or members) that are not necessarily of the same data type.

Page 7: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• General syntax:struct structure_name {

data_type element1;data_type element2;. . .

};

• Example:struct student {

char name[20];int studentID;char major[50];

};

Declaring Structure Type Also called as structure tag

Components / members

Page 8: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Declaring Structure Variables• After declaring a structure type, we may declare

variables that are of that type. A structure variable declaration requires:– The keyword struct– The structure type name– A list of members (variable names) separated by commas– A concluding semicolon

• Then, assume that variable of structure type student is my_student. So the declaration should be written as;

struct student my_student;

Page 9: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Based on example: struct student• By including this declaration in our program, we are

informing the compiler about a new data type which is a user defined data type.

• The declaration just makes the compiler aware the existent of new data type but does not take an action yet.

• Based on the declaration ofstruct student my_student;

causes the compiler to reserve memory space for variable my_student and the components of its structure.

Page 10: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Structure variable Components Values

name

majorstudentID

Simon0078CS

my_student

Conceptual memory structure variable my_student of type student (assuming that the components of variable my_student have already been assigned values)

Page 11: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• It is possible to combine the declarations of a structure type and a structure variable by including the name of the variable at the end of the structure type declaration.

struct student {char name[20];int studentID;char major[50];

}; struct student my_student;

struct student {char name[20];int studentID;char major[50];

} my_student;

=

Page 12: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Declaring Nested Structure• Members of a structure declaration can be of

any type, including another structure variable. • Suppose we have the following structure

declaration, which is a member of struct type student:

struct address { int no; char street[20]; int zipcode;

};

Page 13: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• We can rewrite the structure student declaration as follow:

• This structure type student can be written as;

struct student {char name[20];int studentID;char major[50];struct address addr;

} ;

Page 14: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

struct student {char name[20];int studentID;char major[50];struct address{ int no; char street[20]; int zipcode;};

} ;

Page 15: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Referring and Initializing Structure Elements

• A structure contains many elements. Each elements of a structure can be referred to / accessed by using the component selection operator “.” (dot).

• Let us use the structure student which we have seen before as an example:

• Therefore to refer to the element of a structure, we may write as follow;

my_student.name;my_student.studentID;my_student.major;

struct student {char name[20];int studentID;char major[50];

}; struct student my_student;

Page 16: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• Therefore, we can initialize each elements of a structure individually such as:

struct student my_student;my_student.studentID = 10179;

• Or we can initialize the structure while we are creating an instance of the structure:

struct student my_student = {“Ahmad”, 10179, “IT”}

• Notice that it is possible to use the ‘=’ operator on a struct variable. When the ‘=’ sign is used, each elements of the structure at the right hand side is copied into the structure at the left hand side.

Page 17: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Examplestruct birthdate {

int month;int day;int year;

};struct birthdate Picasso = {10, 25, 1881};printf(“Picasso was born : %d/%d/%d\n”, Picasso.day,

Picasso.month, Picasso.year);

Output :Picasso was born : 25/10/1881

Page 18: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Passing Structures to a Function

Call by Value:• We can pass the student structure that we have created

before to a function called display( ) as follows:void display (struct student); /* function prototype */display (student1); /* function call */void display (struct student s1); /* function header */

where student1 is a variable of type struct student.

• In the above function, a copy of the student structure will be created locally for the use of the function. Any changes to the structure inside the function will not affect the actual structure.

Page 19: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Example Using Structure: Call by value

#include <stdio.h>#include <string.h>

struct student{char name[20];int id;

};

void display(struct student); /* function prototype */

void main(void){

struct student student1;

strcpy(student1.name, "Ahmad"); /*initialising variable */student1.id = 12345; /*initialising variable */

display(student1);}

void display(struct student s1) /* make a local copy of the structure */{

printf("Name: %s\n", s1.name);printf("ID: %d\n", s1.id);

}

Page 20: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Example Using Structure: A Function that return a structure

#include <stdio.h>#include <string.h>struct student{

char name[20];int id;

};struct student read(void); /* function prototype */void main(void){

struct student student1;student1 = read(); /*function call */printf("Name: %s", student1.name);printf("\nID: %d\n", student1.id);

}struct student read(void){

struct student s1;

printf("Enter name:");scanf("%s",s1.name); /* alternative: gets(s1.name); */printf("Enter ID:");scanf("%d",&s1.id);return s1;

}

Page 21: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• Call by reference

• It is also possible to use pointers and pass the reference of the structure to the function. This way, any changes inside the function will change the actual structure as well.

• To pass a structure variable as a reference, the Read( ) function can be written this way:

void Read(struct student *); /* function prototype */Read(&student1); /* function call */void Read(struct student *s1); /* function header */

where student1 is a variable of type struct student.

Page 22: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• Take note that when a structure is declared as a pointer, the elements in the structure cannot be referred to using the ‘.’ operator anymore. Instead, they need to be accessed using the ‘->’ operator (indirect component selection operator).

• For example:void Read(struct student *s1) {

s1->studentID = 10179;scanf(“%s”, s1->name);

}

Page 23: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Example Using Structure: Call by reference

#include <stdio.h>#include <string.h>struct student{

char name[20];int id;

};void Read (struct student *); /* function prototype*/void main(void){

struct student student1;

Read(&student1); /* function call: passing reference */

printf("Name: %s", student1.name);printf("\nID: %d\n", student1.id);

}void Read (struct student *s1) /* function header, receive structure as a pointer variable */{

printf("Enter name:");scanf("%s",s1->name); /* you can also use: gets(s1->name) */printf("Enter ID:");scanf("%d",&s1->id);

}

Page 24: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Using typedef in Structure Declarations

• The keyword typedef provides a mechanism for creating synonyms (aliases) for previously defined data types.

• Here is an example on how to use typedef when declaring a structure:

struct student { char name[20];int studentID;char major[50];struct address addr;

} ;

Page 25: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• By using typedef:typedef struct student StudentData;

• we are now aliasing the structure with a name to be used throughout the program. So instead of writing the word “struct” before declaring a struct variable like the following

struct student my_student;we can now write:

StudentData my_student;• We could use the alias name when passing the structure to

a function:void display(StudentData s1);

Page 26: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

#include <stdio.h>#include <string.h>

struct student{char name[20];int id;

};

typedef struct student StudentData;

void display(StudentData); /* function prototype */

void main(void){

StudentData student1;

strcpy(student1.name, "Ahmad"); student1.id = 12345;

display(student1);}

void display(StudentData s1){

printf("Name: %s\n", s1.name);printf("ID: %d\n", s1.id);

}

Example : using typedef

Page 27: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Example: Array of structure

#include <stdio.h>#define NUM_STUDENTS 10struct student {

int studentID;char name[20];int score;char grade;

};typedef struct student StudentData;void Read (StudentData student[]);void CountGrade (StudentData student[]);

void main ( ) {

StudentData student[NUM_STUDENTS];Read(student);CountGrade(student);

}

Page 28: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

void Read (StudentData student[]) {

int i;for (i = 0; i < NUM_STUDENTS; i++) {

printf("Enter the studentID: ");scanf("%d", &student[i].studentID);printf("Enter the name: ");scanf("%s", student[i].name); printf("Enter the score: ");scanf("%d", &student[i].score);printf("\n");

}}

Page 29: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

void CountGrade (StudentData student[]) {

int i;for (i = 0; i < NUM_STUDENTS; i++) { if (student[i].score > 90) student[i].grade = 'A'; else if (student[i].score > 80)

student[i].grade = 'B'; else if (student[i].score > 65)

student[i].grade = 'C'; else if (student[i].score > 50)

student[i].grade = 'D'; else

student[i].grade = 'F';printf("The grade for %s is %c\n", student[i].name,

student[i].grade);printf("\n");}

}

Page 30: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

/* Sample OutputEnter the studentID: 789654Enter the name: SalmanEnter the score: 96

Enter the studentID: 741258Enter the name: JackEnter the score: 79:::The grade for Salman is A

The grade for Jack is C::Press any key to continue*/

Page 31: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Example#include <stdio.h>struct car{

char maker[20];char model[20];int year;

};void input(struct car*);void output(char*, char*, int*);void main(){

struct car firstcar;input (&firstcar);output(firstcar.maker, firstcar.model, &firstcar.year);printf("End of my act!\n");

}

Page 32: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

void input(struct car *sp){printf("What is the maker of your car? ");gets(sp->maker);printf("What is the model of your car? ");gets(sp->model);printf("What year is your car? ");scanf("%d", &sp->year);}

void output(char *sp1, char*sp2, int*sp3){printf("Your car is : %s, %s, %d\n", sp1, sp2, *sp3);printf("Nice car\n");}

Page 33: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

/* Sample outputWhat is the maker of your car? HondaWhat is the model of your car? StreamWhat year is your car? 2003Your car is : Honda, Stream, 2003Nice carEnd of my act!Press any key to continue*/

Page 34: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Enumeration Constants

• An enumeration, introduced by the keyword enum, is a set of integer constants represented by identifiers. (to specify one after another)

• Example:enum islamic_months {

muharam, safar, rabiulawal, rabiulakhir, jamadilawal, jamadilakhir, rejab, syaaban, ramadhan, syawal, zulkaedah, zulhijjah

};

• Each of the identifiers actually has a value, starting with 0 (unless specified otherwise). Therefore, we can treat them as integers.

Page 35: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• If we want the enumeration to start with a value other than 0, we can assign the value to the first identifier:enum islamic_months {

muharam = 1, safar, rabiulawal, rabiulakhir, jamadilawal, jamadilakhir, rejab, syaaban, ramadhan, syawal, zulkaedah, zulhijjah

};

• Same as with the other data types, before an enum can be used, a variable needs to be declared:

enum islamic_months months;

Page 36: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• There are cases where it is appropriate for us to use an enum. This is an example of such a case:

enum islamic_months months;GetMonth (&months);switch (months) {

case muharam:. . .

break;case safar:

. . .break;. . .

}

Page 37: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

• This is another case where it is appropriate to use an enum:enum Boolean {FALSE, TRUE};

void main ( ) {int list[];Boolean found;

Read(list);found = Search(list);if (found == TRUE)

printf(“FOUND!!”);else

printf(“Cannot find the requested item”);}

Page 38: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

#include <stdio.h>

enum months {JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};

void main ( ) {enum months month;char *monthsName[] = {“January”, “February”,

“March”, “April”, “May”, “June”, “July”, “August”,

“September”, “October”, “November”, “December”};

for (month = JAN; month <= DEC; month++)printf(“%d %s”, month, monthName[month-

1]);}

Page 39: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Output:

1 January

2 February

3 March

4 April

5 May

6 June

7 July

8 August

9 September

10 October

11 November

12 December

Page 40: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Union

Declaration is as same as the Structure. Only Difference is the tag will be union rather than structure.

What is the difference then????

Page 41: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

Structure Union1.The keyword struct is used to define a structure 1. The keyword union is used to define a union.

2. When a variable is associated with a structure, the compiler allocates the memory for each member. The size of structure is greater than or equal to the sum of sizes of its members. The smaller members may end with unused slack bytes.

2. When a variable is associated with a union, the compiler allocates the memory by considering the size of the largest memory. So, size of union is equal to the size of largest member.

3. Each member within a structure is assigned unique storage area of location.

3. Memory allocated is shared by individual members of union.

4. The address of each member will be in ascending order This indicates that memory for each member will start at different offset values.

4. The address is same for all the members of a union. This indicates that every member begins at the same offset value.

5 Altering the value of a member will not affect other members of the structure.

5. Altering the value of any of the member will alter other member values.

6. Individual member can be accessed at a time 6. Only one member can be accessed at a time.

7. Several members of a structure can initialize at once. 7. Only the first member of a union can be initialized.

Differences between Structure and Union

Page 42: শিক্ষা মেলুক ডানা, আমাদের ভাষাতেই !  C Programming এর হাতেখড়ি পর্ব ১৪.

SUMMARY• In this chapter you have learnt about– Structure type and variable declarations– How structure members can be accessed– How structure can be initialized– Passing structure to function– Enumeration

T.H.E E.N.D