Qn: Write the logic for print the n number of values, from an array in the following pattern. a[i]>=a[i+1]<=a[i+2]>=a[i+3]<=a[i+4]>=a[i+5]<=a[i+6]... so on. (in TCS)
-By Admin, Last Update On 25th May,2019 07:57 pm

Answer

மேலே கொடுக்கப்பட்டுள்ள question-ல் உள்ள pattern-ல் ஒவ்வொரு odd position value-ம் அதற்க்கு அடுத்து உள்ள value-ஐ விட பெரியதாகவும், ஒவ்வொரு even position value-ம் அதற்க்கு அடுத்து உள்ள value-ஐ விட சிறியதாகவும் உள்ளது.

ஆகவே for loop ஐ பயன்படுத்தி odd and even position values-ஐ எடுத்துகொள்ளலாம். இவாறு செயும்போது loop 0-லிருந்து n-2 வரைக்கும் சுற்றினாலே போதுமானது. ஏனெனில் array elements எப்பொழுதும் 0-லிருந்து n-1 வரை மட்டுமே index செய்யபட்டு இருக்கும். அதோடு n-1 என்பது array-ல் உள்ள கடைசி element. for loop சுழற்சியில் i+1-ஐ பயன்படுத்தும்போது கடைசி element-க்கு அடுத்த element, அதாவது இல்லாத ஒரு element-ஐ array-ல் தேடும். ஆகையால் loop n-2 வரைக்கும் சுற்றினாலே போதுமானது.

இபொழுது for loop-ன் உள்ளே odd and even position values-ஐ தனி தனியாக பிரிப்பதற்காக if(i%2==0){ odd position values }else{ even position values } பயன்படுத்தபடுகிறது. if condition-னில் வரும் odd position values ஒவ்வொன்றும் அதற்க்கு அடுத்து உள்ள value-வை விட அதிகமாக இருக்கின்றதா? என்று சரி பார்க்கவேண்டும். அதேபோல் else condition-னில் வரும் even position values ஒவ்வொன்றும் அதற்க்கு அடுத்து உள்ள value-வை விட குறைவாக இருக்கின்றதா? என்று சரி பார்க்கவேண்டும்.

இவ்வாறு சரிபார்க்கும்போது சரியாக இருந்தால் loop-ஐ continue செய்துவிடவேண்டும். இல்லையெனில் current position-னில் உள்ள value-ஐ, அடுத்த position-க்கும், அடுத்த position-னில் உள்ள value-ஐ current position-க்கும் இடமாற்றம் செய்யவேண்டும்.

How to inter change the values

முதலில் current position value-ஐ அதாவது a[i]-ன் value-ஐ temp என்ற variable-க்கும், a[i+1]-ன் value-ஐ a[i]-க்கும் மாற்ற வேண்டும். பிறகு temp-ன் value-ஐ a[i+1]-க்கு மாற்ற வேண்டும். இதில் முதலிலே a[i+1]-ன் value-ஐ a[i]-க்கு மாற்றிவிட்டால் a[i]-ல் இருந்த value காணமல் போய்விடும். ஆகையால் a[i]-ல் இருந்த value-ஐ a[i+1]-க்கு மாற்ற இயலாமல் போய்விடும்.

temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;

கடைசியாக array-ல் உள்ள அனைத்து values-ஐயும் for loop பயன்படுத்தி print செய்யவேண்டும். இதுவே நாம் எதிர் பார்த்த output.

Program in C Language

#include<stdio.h>
#include<conio.h>
int main(){
int n=6,i,temp;
int a[n];
printf("\nEnter the array values: ");
for(i=0;i<n;i++){
   scanf("%d",&a[i]);
}
for (i = 0; i < n-1; i++) {
   if (i % 2 == 0) {
       if (a[i] >= a[i+1]) {
           continue;
       } else {
           temp = a[i];
           a[i] = a[i+1];
           a[i+1] = temp;
       }
   } else {
       if (a[i] <= a[i+1]) {
           continue;
       } else {
           temp = a[i];
           a[i] = a[i+1];
           a[i+1] = temp;
       }
   }
}
printf("\nExpected result is:\n");
//a[i]>=a[i+1]<=a[i+2]>=a[i+3]<=a[i+4]>=a[i+5]<=a[i+6]...
for (i = 0; i < n; i++) {
    printf("%d ",a[i]);
}
return 0;
}

Output:

Enter the array values: 10 2 1 0 4 5
Expected result is : 10 1 2 0 5 4

Pgcomments

Comments