Pointers in C - Hackerrank problem step by step solution.

Pointers in C - Hackerrank problem step by step solution.:


Welcome Back, Guys !!
Today in this post we will discuss Pointers in C  Hackerrank Practice problem in C programming language.
This problem is set for students to get better knowledge to handle Pointers in C, and how 
to use call by reference for a function call.
          


Pointers in C - Hackerrank problem statement:

Objective

In this challenge, you will learn to implement the basic functionalities of pointers in C. A pointer in C is a way to share a memory address among different contexts (primarily functions). They are primarily used whenever a function needs to modify the content of a variable, of which it doesn't have ownership.

In order to access the memory address of a variable,val, we need to prepend it with & sign. E.g., &val returns the memory address of val.

This memory address is assigned to a pointer and can be shared among various functions. E.g. int *p= &val will assign the memory address of val to pointer p. To access the content of the memory to which the pointer points, prepend it with a *. For example, *p will return the value reflected by val and any modification to it will be reflected at the source (val).

void increment(int *v) {
        (*v)++;
    }
      int main() {
        int a;
        scanf("%d", &a);
        increment(&a);
        printf("%d", a);
    return 0;   
    }   
Task

You have to complete the function void update(int *a,int *b), which reads two integers as argument, and sets a with the sum of them, and b with the absolute difference of them.
a' = a+b
b' = |a-b|

Input Format

The input will contain two integers, a and b, separated by a newline.

Output Format

You have to print the updated value of a and b, on two different lines.

Note: Input/output will be automatically handled. You only have to complete the function described in the 'task' section.

Sample Input

4
5
Sample Output

9
1
Explanation

a' = 4+5 = 9
b' = |4-5|=1

Pointers in C - Hackerrank problem solution:

The explanation for the problem is given as comments in codes.

Method 1:

#include <stdio.h>
#include <stdlib.h>

void update(int *a,int *b) {
int sum=0,diff=0;
sum =(*a)+(*b);
diff=abs((*a)-(*b));
*a =sum;
*b = diff;

}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;
    // pa will have the value of address of a
    // *pa will contain the value of a
 
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}

Method 2:

#include <stdio.h>
#include <stdlib.h>

void update(int *a,int *b) {
int k= *a;
*a  =(*a)+(*b);
*b =abs((k)-(*b));

}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;
    // pa will have the value of address of a
    // *pa will contain the value of a
    
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}

Method 3:

#include <stdio.h>
#include <stdlib.h>

void update(int *a,int *b) {
*a  =(*a)+(*b);
*b =abs((*a) - 2*(*b));//note * after 2 indicates multiplication
// update a is a+b so subracting b 2 times gives the difference between them
}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;
    // pa will have the value of address of a
    // *pa will contain the value of a
    
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}

Hope this added some valuable knowledge to you.
Post your doubts in the comment section.
See you next time.

Post a Comment

0 Comments