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:
ObjectiveIn 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.
0 Comments