Monday, July 27, 2015

Copy Array to another Reverse Order - C Program (Procedural)


Problem Question



Write a program to copy the contents of one array into another in the reverse order.

Explanation of Problem



The user enters 25 numbers in an array. The program needs to copy this array into another in reverse order.




Code



#include <stdio.h>
/**@Title: ReverseArray.c*
*@Language: ANSI C*
*@Compiler: GNU GCC*
*@IDE: Code::Blocks 13.12*
*@Author: Toxifier*
*@URL: http://letsplaycoding.blogspot.com/*
*@Date: 27-07-2015*
*/

int main()
{
    int arr1[25], arr2[25], i, j;
    for ( i = 0, j = 24; i < 25; i++, j-- )
    {
        scanf ("%d", &arr1[i]);
        arr2[j] = arr1[i];
    }
    printf("\nArray 1\n");
    for ( i = 0; i < 25; i++ )
    {
        printf("%d ", arr1[i]);
    }
    printf("\nArray 2\n");
    for ( i = 0; i < 25; i++ )
    {
        printf("%d ", arr2[i]);
    }
    printf("\n\n");
    system("pause");
    return 0;
}





Explanation of Code



#include <stdio.h> -> This is the step which occurs before compilation starts. The compiler calls the C Preprocessor to include the STDIO(Standard Input Output) header file into the program, thus letting the use of the standard input/output functions like printf() and scanf() which come from STDIO.H

int main() -> The entry point of the program where the execution starts. This function has to be named main. As per the ANSI specification, the return type has to be int. If you use the traditional C, you may use void as the return type. Since the return type is specified as int in my program, I have to use a return statement at the end of my code. So I use return 0 since zero returned from a function, by convention, implies a correct execution of the program. The return values are used to debug the program.

printf() -> This is a standard output function used to print something on the screen. We have to pass a string to this function which will be displayed on user's terminal.

scanf() -> This is the scanf() function which waits for the user to enter certain value using his/her keyboard. We store the user input at the location in memory which is pointed to by the variable whose address is passed to this function.

int arr1[25], arr2[25], i, j; -> Here we define the variables we are going to use in our program.
arr1[25], arr2[25] hold the user input numbers and reversed array respectively.
i, j are used as the loop variables to loop through the array.

    for ( i = 0, j = 24; i < 25; i++, j-- )
    {
        scanf ("%d", &arr1[i]);
        arr2[j] = arr1[i];
    }


Here we loop through both arrays and do the required things. Look at the for loop definition. We have used the "," (comma) operator to initialise and increment multiple variables. This saves a few lines of code. Loop variables are initialised in one go and incrmeented/decremented in one go as well.
We then take user input to build first array. In the next step we copy that value in the last element of the second array. The loop variable "i" traverses "arr1" from left to right, and loop variable "j" traverses "arr2" from right to left. Hence we increment "i" and decrement "j".

    printf("\nArray 1\n");
    for ( i = 0; i < 25; i++ )
    {
        printf("%d ", arr1[i]);
    }
    printf("\nArray 2\n");
    for ( i = 0; i < 25; i++ )
    {
        printf("%d ", arr2[i]);
    }


Here we just loop through both arrays and print them for reference.

system("pause") -> This statement is used to pause the program, until user presses a key. This function is not necessary in your program, I use it to see my outputs paused. If you use cmd to run your programs, you might not need this. If you use linux/unix you might not need this. Depending on your compiler, this function may or may not work. Moreover, removing this line of code from this program, doesn't affect the functionality of the program.




Output(s)









Download Source Code