Tuesday, May 16, 2017

சி-மொழியில் ஸ்ட்ரக்சர்(structure)





சி மொழியில் அர்ரேயின் உபயோகம் பற்றி அறிவோம். அர்ரே என்பது பொறுத்த வரை அவை அணைத்தும் ஒரே டேட்டா டைப்பாக இருக்க வேண்டும்.
இப்போது ஒரு மாணவணைப் பற்றிய டேட்டாக்களை சேமிக்க விரும்புகின்றோம். Id ஆனது int டைப்பாக இருக்கும். Name ஆனது char array ஆக இருக்கும்.sex ஆனது char டைப்பாக இருக்கும்.இதை அர்ரே ஆக சேமிக்க இயலாது. இங்கு தான் ஸ்ட்ரக்சர் (structure)உபயொகப்படுத்தப் படுகின்றது.
ஸ்ட்ரக்சர் என்பது வெவ்வேறு டேட்டா டைப் மெம்பர்களின் தொகுப்பை ஒற்றை டேட்டா டைப்பாக காண்பித்தல் ஆகும்.
உதாரணம்.
struct student
{
int id;
char name[50];
char sex;
};
இதில் struct என்பது keyword ஆகும். student என்பது நாம் உருவாக்கியுள்ள ஸ்ட்ரக்டின் பெயர் ஆகும். இதில் id,name,sex என மூன்று மெம்பர்கள் உள்ளன.

அர்ரே மற்றும் ஸ்ட்ரக்டின் வித்தியாசங்கள்:

1.அர்ரே என்பது ஒரே டேட்டா டைப் எலெமெண்டுகளின் தொகுப்பாகும்.
ஸ்ட்ரக்ட் என்பது வெவ்வேறு டேட்டா டைப் மெம்பர்களின் தொகுப்பாகும்
2. அர்ரேயின் ஒவ்வொரு உறுப்பும் element எனப் படுகின்றது. ஸ்ட்ரக்டின் ஒவ்வொரு உறுப்பும் member எனப்படுகின்றது.

ஸ்ட்ரக்ட் வேரியபிள் அறிவிப்பு :

முதல் உதாரணம்:

struct student
{
int id;
char name[50];
char sex;
}s1,s2;

இரண்டாவது உதாரணம்.

struct student
{
int id;
char name[50];
char sex;
};
struct student s1,s2;
மேற்கண்ட இரண்டு வழிகளில் ஏதாவது ஒரு  வழியைப் பின் பற்றி ஸ்டரக்ட் வேரியபிள் உருவாக்கப்பட வேண்டும்.
ஸ்ட்ரக்ட் மெம்பர்களில் மதிப்பிருத்தல்
இதை மூன்று வழிகளில் செய்யலாம்.

முதல் வழி:

struct student s1={101,”karthikeyan”,’m’};

இரண்டாவது வழி:

struct student s1;
s1.id=101;
strcpy(s1.name,”karthikeyan”);
s1. Sex=’m’;

மூன்றாவது வழி:

printf(“enter student details : id,name,sex”);
scanf(“%d”,&s1.id);
scanf(“%s”,s1.name);
scanf(“%c”,&s1.sex);

சான்று நிரல்:

#include <stdio.h>
int main()
{
    struct student
    {
        int id;
        char name[50];
        char sex;
    };
    struct student s1;
    printf("enter s1 id: ");
    scanf("%d",&s1.id);
    printf("Enter s1 name: ");
    scanf("%s",s1.name);
    fflush(stdin);
    printf("Enter s1 sex: ");
    scanf("%c",&s1.sex);
    printf("student s1 details:\n");
    printf("Id=%d\n",s1.id);
    printf("Name=%s\n",s1.name);
    printf("sex=%c\n",s1.sex);

        return 0;
}

}

வெளியீடு:

 

ஸ்ட்ரக்டின் அர்ரே.

ஒரிரு வேரிபிள்கள் உருவாக்காமல் அதிக எண்ணிக்கையில் உருவாக்கும் பொழுது ஸ்ட்ரக்ட் அர்ரே வேரியபிள்களாக உருவாக்கிக் கொள்ளலாம்.

சான்று நிரல்:

#include <stdio.h>
int main()
{
    struct student
    {
        int id;
        char name[50];
        char sex;
    };
    struct student s[3];
    int i;
    for(i=0;i<3;i++)
    {


        printf("enter s id: ");
    scanf("%d",&s[i].id);
    printf("Enter s name: ");
    scanf("%s",s[i].name);
    fflush(stdin);
    printf("Enter s sex: ");
    scanf("%c",&s[i].sex);
    }
    for(i=0;i<3;i++){
    printf("student s details:\n");
    printf("Id=%d\n",s[i].id);
    printf("Name=%s\n",s[i].name);
    printf("sex=%c\n",s[i].sex);
    }
        return 0;
}

வெளியீடு:

 

நெஸ்டட்(Nested)ஸ்ட்ரகட்

ஒரு ஸ்ட்ரக்டுக்குள் மற்றொரு ஸ்ட்ரக்டை அறிவிப்பதை nested struct எனப்படுகின்றது.இதை பின் வரும் நிரல் மூலமாக அறியலாம்.
சான்று நிரல்:
#include <stdio.h>
#include<string.h>

int main()
{ struct hostel
         {
       int room_id;
        float fees;
         } ;

      struct student
    {
        int id;
        char name[50];
        char sex;

        struct hostel h1;

    };

    struct student s1;

    s1.id=101;
    strcpy(s1.name,"karthikeyan");
    s1.sex='m';
    s1.h1.room_id=567;
    s1.h1.fees=500;
        printf("student details: \n");
    printf("student id=%d\n",s1.id);
    printf("student name=%s\n",s1.name);
    printf("student sex=%c\n",s1.sex);
    printf("room id=%d\n",s1.h1.room_id);
    printf("room rent=%f\n",s1.h1.fees);
    return 0;
}

வெளியீடு:

 

ஸ்ட்ரக்டை ஃபங்க்சனுக்கு பராமீட்டராக அனுப்புதல்:

ஓரு ஸ்ட்ரக்டை எவ்வாறு ஒரு ஃபங்க்சனுக்கு பராமீட்டராக அனுப்பலாம் என்பதை பின் வரும் நிரல்  மூலமாக அறியலாம்.

சான்று நிரல்

#include <stdio.h>
#include<string.h>
struct student
    {
        int id;
        char name[50];
        char sex;
   };
    void printstructdetails(struct student);
int main()
{
   struct student s1;
     s1.id=101;
    strcpy(s1.name,"karthikeyan");
    s1.sex='m';
    printstructdetails(s1);
    return 0;

}
void printstructdetails(struct student s )
 {
       printf("student details: \n");
    printf("student id=%d\n",s.id);
    printf("student name=%s\n",s.name);
    printf("student sex=%c\n",s.sex);

}
வெளியீடு:-


----------------------முத்து கார்த்திகேயன்,மதுரை
ads Udanz

No comments:

Post a Comment