C Programming මුල සිට ඉගෙනගනිමු (part 12 - arrays)



  • සුබ දවසක් වේවා ඔයාලට. අද මන් මේ ලිපිය මඟින් කතා කිරීමට බලාපොරොත්තු වන්නේ C Programming වල එන arrays ගැනයි. මොනාද මේ array එකක් කියන්නේ. මුල් ලිපි වල මන් variables ගැන කතා කලා. array එකක් එක්ක variable එකක් සංසන්දනය කරන විට variable එකක් කියන්නේ හරියට කාමරයක් වගේ. මොකද කිව්වොත් එයාට එක සැරේකට තියාගන්න පුලුවන් එක අගයක් විතරයි.

    variable එකක් එක්ක බලද්දි array එකක් කියලා කියන්නේ කාමර විශාල සංඛ්‍යාවක් ඇති ගොඩනැගිල්ලක් වගේ. අපිට තීරණය කරන්න පුලුවන් එම ගොඩනැගිල්ලට අවශ්‍ය කාමර සංඛ්‍යාව කොපමණක්ද කියලා. ඒ කියන්නේ එකවර අගයන් විශාල සංඛ්‍යාවක් array එකකට store කරගන්න පුලුවන් කියන එකයි.

    උදාහරණයක් ගත්තොත් මන් ඔබට කියනවා සිසුන් 100කගේ ලකුණු ඇතුලත් කර ඔවුන්ගේ ලකුණු පිලිවෙලට නැවත output කරන ලෙස. හැබැයි එය විය යුත්තේ සිසුන් 100 දෙනාගෙම ලකුණු ඇතුලත් කිරීමෙන් අනතුරුවයි.

    ඉහතදී ඔබට පෙනෙනවා ඇති අපි loop එකක් පාවිච්චි කලත් ඉහත කාරණය සපුරාලිය නොහැකි බව. variable 100ක් අරන් මේ වැඩේ කිරීමට පුලුවන් උනත් එය ඉතා දුශ්කර කටයුත්තක් බව ඔබට පෙනේ. මේ වගේ දුශ්කර අවස්තා වලදී තමයි අපිට arrays උදව්වට එන්නේ.

    අපි Program එකක් ලියන්න කලින් arrays වල එන වැදගත් කරුණු දැන ගනිමු.

    • array එකක data type වර්ග variable data type වර්ග වලට සමාන වේ. (int, float, char, short,...,etc).
    • array එකක මූලික ආකෘතිය වන්නේ <data type> <array name>[] (උදා -: int number[], float marks[], char words[],....,etc).
    • array එකක් භාවිතා කරන සම්මත ආකාර වන්නේ int numbers[5] = {1, 2, 3, 4 ,5}; හෝ int numbers[] = {1, 2, 3, 4, 5}; අකාරවලින් වේ.
    • ඔබ array එකක් int numbers[5] ලෙස භාවිතා කලොත් එයින් අදහස් වන්නේ එය තුල 0, 1, 2, 3, 4, 5 යන සංඛ්‍යා ඇති බවයි. එනම් 0 සිට 5 දක්වා කාමර ඇති බවයි. එය කාමර වලට කැඩුවොත් පහත පරිදි අර්ත දැක්විය හැකිය.
    int numbers[5] = {1, 2, 3, 4 ,5};
    //ඉහත 1 සිට 5 දක්වා සංඛ්‍යා පහත පරිදි array එකට ආදේශ වේ.
    
    int numbers[0] = 1
    int numbers[1] = 2
    int numbers[2] = 3
    int numbers[3] = 4
    int numbers[4] = 5
    int numbers[5] // අපට array වලදී සෑම විටම භාවිතා කල හැක්කේ numbers[n - 1] දක්වා පමණි. එමනිසා අපට numbers[5] යන්න සංඛ්‍යාවක් ආදේශ කිරීම සදහා භාවිතා කල නොහැක.
    
    #include <stdio.h>
    
    int main()
    {
        int number[5] = {1, 2, 3, 4 ,5};
        
        printf("%d\n", number[0]);
        printf("%d\n", number[1]);
        printf("%d\n", number[2]);
        printf("%d\n", number[3]);
        printf("%d\n", number[4]);
    
        return 0;
    }
    

    Output -:

    1
    2
    3
    4
    5
    

    අපි බලමු දැන් මේකෙදි number[5] භාවිතා කලොත් මොකද වෙන්නේ කියලා.

    #include <stdio.h>
    
    int main()
    {
        int number[5] = {1, 2, 3, 4 ,5, 6}; // 0 සිට 5 දක්වා සංඛ්‍යා 6ක් ඇති බැවින් 6 ඇතුලත් කිරීම.
        
        printf("%d\n", number[0]);
        printf("%d\n", number[1]);
        printf("%d\n", number[2]);
        printf("%d\n", number[3]);
        printf("%d\n", number[4]);
        printf("%d\n", number[5]); // 6 Output කිරීම සදහා
    
        return 0;
    }
    

    Output -:

    1
    2
    3
    4
    5
    32764 // 6 Output නොවේ.
    

    මන් ඉහත කියූ කාරණ සත්‍ය බව ඔබට මෙමගින් පෙනෙනවා ඇති.

    අපි දැන් arrays පාවිච්චි කරලා සරල ගැටලුවක් විසදමු.

    Question -: Write a C program using arrays to fulfill below statements

    1. Enter marks of five students using arrays.
    2. Output marks of all students that you have entered.
    3. Modify your code if user input more than 100 or less than 0 marks user told to input that mark again.

    hint -: you can use loops.

    1. ඉහත ප්‍රශ්න මාලාවලියේ පලවෙනි ප්‍රශ්නය මන් විසඳන්නම්. පලවෙනි ප්‍රශ්නයෙන් කියැවෙන්නේ array එකක් භාවිතා කරමින් සිසුන් 5 දෙනෙකුගේ ලකුණු input කරන ලෙසයි. අපිට hint එකකුත් මේකේ දීලා තියෙනවා loops පාවිච්චි කරන්න කියලා. අපි බලමු එහෙනම් මේ කොටස විසදන හැටි.
    #include <stdio.h>
    
    int main()
    {
        int i;
        int number[i]; // මෙහිදී අප array එකේ විශාලත්වය සදහන් කල නොමැත 
        
        for(i = 0 ; i < 5 ; i++) // array එකක විශාලත්වයේ ආරම්භක අවස්තාව 0 නිසා i = 0 ලෙසත් සිසුන් 5දෙනෙකුගේ ලකුණු ඇතුලත් කරන නිසා i < 5 ලෙස ගනිමු.
        {
            printf("Enter Student mark = ");
            scanf("%d", &number[i]); //වටයෙන් වටයට i++ මගින් i වල අගය එකකින් වැඩි කරයි. ඒ නිසා තමයි අපිට 5දෙනෙකුගේ ලකුණු ඇතුලත් කිරීමට හැකි වන්නේ.
        }
    
        return 0;
    }
    

    Output -:

    Enter Student mark = 12
    Enter Student mark = 23
    Enter Student mark = 45
    Enter Student mark = 56
    Enter Student mark = 67
    
    1. පලවෙනි ප්‍රශ්නය අපි ඉහතදී විසදුවා. දැන් අප දෙවන ප්‍රශ්නය බලමු. අපිට දැන් සිසුන් 5 දෙනාගේ ලකුණු ඇතුලත් කල පිලිවෙලට නැවත Output කල යුතු බවයි දෙවන ප්‍රශ්නයෙන් කියැවෙන්නේ. 5 දෙනෙකුගේ ලකුණු ඇතුලත් කිරීමට loop එකක් අවශ්‍ය උනා වගේ Output කිරීමටත් loop එකක් අවශ්‍ය බව ඔබට පෙනෙනවා ඇති. අපි බලමු එහෙනම් ඒ කොටස විසදන හැටි.
    #include <stdio.h>
    
    int main()
    {
        int i;
        int number[i];
        
        for(i = 0 ; i < 5 ; i++)  // ලකුණු ඇතුලත් කිරීමට භාවිතා කල loop එක
        {
            printf("Enter Student mark = ");
            scanf("%d", &number[i]);
        }
        
        printf("\n");
        
        for(i = 0 ; i < 5 ; i++) //ලකුණු Output කිරීම සඳහා භාවිතා කරන loop එක.
        {
            printf("Student mark is = %d \n", number[i]); ////වටයෙන් වටයට i++ මගින් i වල අගය එකකින් වැඩි කරයි. එමගින් අපට ගබඩා කරගෙන තිබූ ලකුණු පිලිවෙලට Output කල හැකිය
        }
    
        return 0;
    }
    

    Output -:

    Enter Student mark = 12
    Enter Student mark = 23
    Enter Student mark = 45
    Enter Student mark = 56
    Enter Student mark = 67
    
    Student mark is = 12 
    Student mark is = 23 
    Student mark is = 45 
    Student mark is = 56 
    Student mark is = 67 
    
    1. තුන්වන ප්‍රශ්නයෙන් අපට කියන්නේ කිසියම් අවස්තාවක ලකුණු 100ට වඩා හෝ 0 ට වඩා කුඩා සංඛ්‍යාවක් ඇතුලත් කලොත් එම සංඛ්‍යාව වැරදි බවත් නිවැරදි සංඛ්‍යාව නැවත ඇතුලත් කරන ලෙසත් අපගේ program එක වැඩිදියුණු කරන ලෙසයි. ඔබට පෙනෙනවා ඇති මෙය තීරණ ගැනීමේ අවස්තාවක් බව. එම නිසා මෙහිදී අප if හෝ switch භාවිතා කල යුතු වනවා. මන් මේ අවස්තාවේදී ඕන කෙනෙක්ට තේරෙන if එක භාවිතා කරන්නම්.
    #include <stdio.h>
    
    int main()
    {
        int i;
        int number[i];
        
        for(i = 0 ; i < 5 ; i++)// ලකුණු ඇතුලත් කිරීමට භාවිතා කල loop එක            
        {
            printf("Enter Student mark = ");
            scanf("%d", &number[i]);
            
            if(number[i] < 0 || number[i] > 100) //ඇතුලත් කල සංඛ්‍යාව 100ට වඩා විශාල හෝ 0ට වඩා කුඩා දැයි බැලීම.
            {
                printf("Wrong mark!, Please enter that mark again\n\n"); //ඉහත කාරණ දෙකෙන් එකක් සත්‍ය වුවහොත් මෙය ක්‍රියාත්මක වීම.
                i--; //loop එක අවසානයේ i++ ක්‍රියාකරන නිසා array එක අකකින් වැඩි වේ. එවිට අප ඇතුලත් කල 100ට වඩා වැඩි 0ට වඩා අඩු සංඛ්‍යා ද output වේ. මෙය වැලැක්වීම සදහා අප i--; භාවිතා කරයි. එමගින් වැරදි සංඛ්‍යා array එකේ ගබඩා වීම වලකී.
            }
        }
        
        printf("\n");
        
        for(i = 0 ; i < 5 ; i++)
        {
            printf("Student mark is = %d \n", number[i]);
        }
    
        return 0;
    }
    

    Output -:

    Enter Student mark = 50
    Enter Student mark = 34
    Enter Student mark = 125
    Wrong mark!, Please enter that mark again
    
    Enter Student mark = 100
    Enter Student mark = -45
    Wrong mark!, Please enter that mark again
    
    Enter Student mark = 45
    Enter Student mark = 0
    
    Student mark is = 50 
    Student mark is = 34 
    Student mark is = 100 
    Student mark is = 45 
    Student mark is = 0 
    

    අපි දැන් array එකක් භාවිතා කරමින් strings සම්බන්ද ගැටළුවක් විසදමු.

    Question -: Write a C program to output any paragraph which you enter by using arrays.

    ඉහත ගැටළුවේ කියන්නේ අපි enter කරන ජේදයක් array එකක් මගින් output කරන ලෙසයි. එසේනම් ඔබට පෙනෙනවා ඇති මෙම ගැටළුවට char හා %s සම්බන්ද වන බව.අපි දැන් මේ ගැටළුව විසදීමට උත්සහ කරමු.

    #include <stdio.h>
    
    int main()
    {
        char str[20];
    	
        printf("Enter a string = ");
        scanf("%s", &str);  //string එකක් ඇතුලත් කිරීම.
        
        printf("%s", str);
    
        return 0;
    }
    

    First try Output -:

    Enter a string = hello world
    hello
    

    Second try Output -:

    Enter a string = helloworld
    helloworld
    

    ඉහතදී ඔබට පෙනෙනවා ඇති හිස්තැනක් තියලා තිබ්බ වාක්‍යයෙන් පලමු වචනය පමණක් output උන අතර හිස්තැනක් තියන්නැතුව එක ගොඩේ ලියපු වාක්‍ය කිසි අවුලක් නැතුව output උනා. ඔබට පෙනෙනවා ඇති ඉහත code එක මගින් අප තබන හිස්තැන් පිලිගන්නේ නැති බව. එබැවින් හිස්තැන් පිලිගැනීමට නම් ඉහත code එකේ පොඩි වෙනසක් කල යුතු වනවා. අප දැන් බලමු ඒ වෙනස මොකක්ද කියලා.

    #include <stdio.h>
    
    int main()
    {
        char str[20];
    	
        printf("Enter a string = ");
        scanf("%[^\n]", &str);  //%s ඉවත් කොට %[^\n] මගින් සිදුවන්නේ අප තබන හිස්තැන් code එක මගින් පිලිගැනීමයි.
    	
        printf("%s", str);
    
        return 0;
    }
    

    Output -:

    Enter a string = hello world
    hello world
    

    ඔබට පෙනෙනවා ඇති %s වෙනුවට %[^\n] භාවිතා කිරීමෙන් හිස්තැන් ගැටළුව මගහරවා ගත හැකි බව.

    මන් මේකෙන් ප්‍රශ්න දෙකක් දෙන්නම් ඔයාලට කරන්න. උත්සහ කරලා බලන්න උත්තර බලන් නැතුව තනියම කරන්න.

    Question 1 -: Computers are commonly used for data analysis. Studnets in a class has scored marks between 0 to 20 for their mid semester examination. Write a C program that reads marks of 15 students in to a single subscripted array and find the mean of the marks.

    Answer -: https://drive.google.com/open?id=1oD9nBgkkGzvqa7JTHiwlXZ3h3-PXjdlk


    Question 2 -: Write a C program that read numbers from an integer array and graph the information in the form of bar chat. Sample output is given below.

    Element Value   Histogram
       0      19    *******************
       1       3    ***
       2      15    ***************
       3       7    *******
       4      11    ***********
       5       9    *********
       6      13    *************
       7       5    *****
       8      17    *****************
       9       1    *
    

    Answer -: https://drive.google.com/open?id=17lDMNZ2KVDWZm4At4ho_ztjVHE4xzDli


    ඔබට අවශ්‍යනම් ඔබේ බ්‍රව්සර් එක හරහා online C programms run කරන්න පුලුවන්. එහෙම කරන්න පුලුවන් ලින්ක්ස් මන් පහතින් දාන්නම්

    සරලව මුල ඉදන් C programming ඉගෙන ගන්න පුලුවන් හොදම site කිහිපයක් මන් දාන්නම්

    web url කෙටි කරන්න lankadevelopers ලා හදපු එයාලගෙම සයිට් එකක් තියෙනවා. -> https://link.lankadevelopers.com/

    මගේ කලින් ලිපි

    මන් ඊළග ලිපියෙන් කියලා දෙන්නම් 2D-arrays ගැන . මගේ ලිපි වල අඩුපාඩු තියෙනවනම් දන්නේ නැති දේවල් තියෙනවනම් පහලින් කමෙන්ට් එකක් දාන්න.
    තව ලිපියකින් හම්බෙමු ජය වේවා.



  • thanks bro,, great work


  • Linux Help

    නියමයි bro, දිගටම දාමු ඔයාලා වගේ කට්ටිය තමා ඕනේ මේ community එක up කරලා ගන්න , ලංකාවේ IT field එක up කරලා ගමු අලුතෙන් එන අයට help කරලා



  • @root Programming වලට අලුත් ඕන කෙනෙක්ට C language ගැන අවශ්‍ය මූලික දැනුම සේරම මන් මේ ලිපි වලින් දාන්න ඉන්නේ. මේ මගේ පලවෙනි අත්දැකීම මේ වගේ දෙයක් කරලා ගත්තු. ඉස්සරහට මන් data mining අනිත් languages වගේ දේවලුත් දාන්නම්. මේකම මන් තෝරගත්තේ ගොඩක් campus වල startup එක විදිහට පටන් ගන්නේ C හරි C++ හරි දෙකම හෝ දෙකෙන් එකක් තමා. මේ සයිට් එක කලින් මන් දැනන් හිටියනම් මීට වඩා ලොකු දෙයක් කරන්න තිබ්බා. මන් දැන් research එක කටේ ඉන්නේ. ඒකයි පොඩි අවුලකට තියෙන්නේ.


  • Web Development

    Thanks.Keep it up ❤


Log in to reply