AKTU 1er año Sem 1 Documento resuelto 2015-16 | COMP. SISTEMA Y PROGRAMACION C | Sec B

Enlace de descarga de papel : Papel | Sem 1 | 2015-16

Tecnología B.
(SEM-I) EXAMEN DE TEORIA 2015-16
SISTEMA INFORMÁTICO Y PROGRAMACIÓN EN C

Tiempo: 3 horas
Marcas totales : 100

Nota :-

  • Hay tres secciones. La Sección A lleva 20 puntos, la Sección B lleva 50 puntos y la Sección C lleva 30 puntos.
  • Intenta todas las preguntas. Las marcas se indica frente a cada pregunta.
  • Asumir datos adecuados siempre que sea necesario.

Sección B

Intenta cinco preguntas de esta sección: (10*5 = 50)

2. ¿Cuáles son los diferentes tipos de funciones ? Escriba un programa en C para ordenar la lista de nombres de estudiantes en orden ascendente.

  • Existen las siguientes categorías:

    1. Función sin argumento y sin valor de retorno: cuando una función no tiene argumentos, no recibe ningún dato de la función que llama. De manera similar, cuando no devuelve un valor, la función que llama no recibe ningún dato de la función llamada.
      Sintaxis:
      Function declaration : void function();
      Function call : function();
      Function definition :
                            void function()
                            {
                              statements;
                            }
      
    2. Función con argumentos pero sin valor de retorno: cuando una función tiene argumentos, recibe datos de la función que llama pero no devuelve valores.

      Sintaxis:

      Function declaration : void function ( int );
      Function call : function( x );
      Function definition:
                   void function( int x )
                   {
                     statements;
                   }
      
    3. Función sin argumentos pero devuelve un valor: podría haber ocasiones en las que necesitemos diseñar funciones que no tomen ningún argumento pero devuelvan un valor a la función que llama. Un ejemplo de esto es la función getchar, no tiene parámetros pero devuelve un número entero, un dato de tipo entero que representa un carácter.
      Sintaxis:
      Function declaration : int function();
      Function call : function();
      Function definition :
                       int function()
                       {
                           statements;
                            return x;
                        }
          
    4. Función con argumentos y valor de retorno
      Sintaxis:
      Function declaration : int function ( int );
      Function call : function( x );
      Function definition:
                   int function( int x )
                   {
                     statements;
                     return x;
                   }
      
  • Programa en C para ordenar lista de nombres de alumnos en orden ascendente

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
      
    // Defining comparator function as per the requirement
    static int myCompare(const void* a, const void* b)
    {
      
        // setting up rules for comparison
        return strcmp(*(const char**)a, *(const char**)b);
    }
      
    // Function to sort the array
    void sort(const char* arr[], int n)
    {
        // calling qsort function to sort the array
        // with the help of Comparator
        qsort(arr, n, sizeof(const char*), myCompare);
    }
      
    int main()
    {
      
        // Get the array of names to be sorted
        const char* arr[]
            = { "geeksforgeeks", "geeksquiz", "clanguage" };
      
        int n = sizeof(arr) / sizeof(arr[0]);
        int i;
      
        // Print the given names
        printf("Given array is\n");
        for (i = 0; i < n; i++)
            printf("%d: %s \n", i, arr[i]);
      
        // Sort the given names
        sort(arr, n);
      
        // Print the sorted names
        printf("\nSorted array is\n");
        for (i = 0; i < n; i++)
            printf("%d: %s \n", i, arr[i]);
      
        return 0;
    }
    

    3. Escriba una breve nota sobre el enfoque de desarrollo de programas de arriba hacia abajo.

  • Este enfoque se refiere al desarrollo de un programa en el que el programa se divide en subprogramas según las tareas. Estas tareas se conocen como módulos. El lenguaje C admite este enfoque y los programadores también creen que este enfoque es una buena manera de crear un proyecto de manera jerárquica. En este se desarrolla primero el módulo principal, luego el otro módulo y así sucesivamente.
  • 4. Escriba un programa en C para invertir una string a través del puntero.

  • #include <stdio.h>
    #include <string.h>
      
    // Function to reverse the string
    // using pointers
    void reverseString(char* str)
    {
        int l, i;
        char *begin_ptr, *end_ptr, ch;
      
        // Get the length of the string
        l = strlen(str);
      
        // Set the begin_ptr and end_ptr
        // initially to start of string
        begin_ptr = str;
        end_ptr = str;
      
        // Move the end_ptr to the last character
        for (i = 0; i < l - 1; i++)
            end_ptr++;
      
        // Swap the char from start and end
        // index using begin_ptr and end_ptr
        for (i = 0; i < l / 2; i++) {
      
            // swap character
            ch = *end_ptr;
            *end_ptr = *begin_ptr;
            *begin_ptr = ch;
      
            // update pointers positions
            begin_ptr++;
            end_ptr--;
        }
    }
      
    // Driver code
    int main()
    {
      
        // Get the string
        char str[100] = "GeeksForGeeks";
        printf("Enter a string: %s\n", str);
      
        // Reverse the string
        reverseString(str);
      
        // Print the result
        printf("Reverse of the string: %s\n", str);
      
        return 0;
    }
  • 5. Escriba la diferencia entre llamada por valor y llamada por referencia usando un ejemplo adecuado

  • Hay diferentes formas en las que los datos de los parámetros se pueden pasar dentro y fuera de los métodos y funciones. Supongamos que se llama a una función B() desde otra función A() . En este caso, A se denomina «función de llamador» y B se denomina «función de llamado o función de llamado» . Además, los argumentos que A envía a B se denominan argumentos reales y los parámetros de B se denominan argumentos formales .

    Terminología

    • Parámetro Formal: Una variable y su tipo tal como aparecen en el prototipo de la función o método.
    • Parámetro real: la variable o expresión correspondiente a un parámetro formal que aparece en la llamada de función o método en el entorno de llamada.
    • Modos:
      • IN: pasa información de la persona que llama a la persona que llama.
      • SALIDA: El destinatario escribe valores en el llamante.
      • ENTRADA/SALIDA: La persona que llama le dice al destinatario el valor de la variable, que puede ser actualizado por el destinatario.

    Métodos importantes de paso de parámetros

    1. Pasar por valor: este método utiliza la semántica en modo . Los cambios realizados en el parámetro formal no se transmiten de vuelta a la persona que llama. Cualquier modificación a la variable de parámetro formal dentro de la función o método llamado afecta solo a la ubicación de almacenamiento separada y no se reflejará en el parámetro real en el entorno de llamada. Este método también se llama llamada por valor .

      // C program to illustrate
      // call by value
      #include <stdio.h>
        
      void func(int a, int b)
      {
          a += b;
          printf("In func, a = %d b = %d\n", a, b);
      }
      int main(void)
      {
          int x = 5, y = 7;
        
          // Passing parameters
          func(x, y);
          printf("In main, x = %d y = %d\n", x, y);
          return 0;
      }

      Producción:

      In func, a = 12 b = 7
      In main, x = 5 y = 7
      

      Los lenguajes como C, C++, Java admiten este tipo de paso de parámetros. Java, de hecho, es estrictamente llamada por valor.
      Deficiencias:

      • Ineficiencia en la asignación de almacenamiento
      • Para objetos y arrays, la semántica de copia es costosa
    2. Pasar por referencia (aliasing): esta técnica utiliza semántica de modo de entrada/salida . Los cambios realizados en el parámetro formal se transmiten de vuelta a la persona que llama a través del paso de parámetros. Cualquier cambio en el parámetro formal se refleja en el parámetro real en el entorno de llamada, ya que el parámetro formal recibe una referencia (o puntero) a los datos reales. Este método también se llama < em>llamada por referencia . Este método es eficiente tanto en el tiempo como en el espacio.

      // C program to illustrate
      // call by reference
      #include <stdio.h>
        
      void swapnum(int* i, int* j)
      {
          int temp = *i;
          *i = *j;
          *j = temp;
      }
        
      int main(void)
      {
          int a = 10, b = 20;
        
          // passing parameters
          swapnum(&a, &b);
        
          printf("a is %d and b is %d\n", a, b);
          return 0;
      }

      Producción:

      a is 20 and b is 10
      

      C y C++ admiten llamadas por valor y llamadas por referencia, mientras que Java no admite llamadas por referencia.
      Deficiencias:

      • Muchos escenarios potenciales pueden ocurrir
      • Los programas son difíciles de entender a veces
  • 6. ¿Cuáles son las características de un algoritmo? Escribe un algoritmo para encontrar la suma de todos los números divisibles por 3 entre 11 y 50.

  • Características de un algoritmo
    • Claro e inequívoco : el algoritmo debe ser claro e inequívoco. Cada uno de sus pasos debe ser claro en todos los aspectos y debe conducir a un solo significado.
    • Entradas bien definidas : si un algoritmo dice que tome entradas, deben ser entradas bien definidas.
    • Salidas bien definidas: el algoritmo debe definir claramente qué salida se producirá y también debe estar bien definida.
    • Finitud: El algoritmo debe ser finito, es decir, no debe terminar en bucles infinitos o similares.
    • Factible: El algoritmo debe ser simple, genérico y práctico, de manera que pueda ejecutarse con los recursos disponibles. No debe contener alguna tecnología futura, ni nada.
    • Idioma independiente: el algoritmo diseñado debe ser independiente del idioma, es decir, debe ser simplemente instrucciones que se pueden implementar en cualquier idioma y, sin embargo, el resultado será el mismo, como se esperaba.

    Algoritmo para encontrar la suma de todos los números divisibles por 3 entre 11 y 50

    1. Traverse the numbers between 11 and 50
    2. For each number check if it is divisible by 3
    3. If divisible by 3, add them under variable sum
    4. Print the sum at the end
    
  • 7. Ilustre y compare las clases de almacenamiento estático y externo con un ejemplo relevante en C.

    1. externo: la clase de almacenamiento externo simplemente nos dice que la variable está definida en otro lugar y no dentro del mismo bloque donde se usa. Básicamente, el valor se le asigna en un bloque diferente y esto también se puede sobrescribir/cambiar en un bloque diferente. Entonces, una variable externa no es más que una variable global inicializada con un valor legal donde se declara para usarse en otro lugar. Se puede acceder desde cualquier función/bloque. Además, una variable global normal también se puede convertir en externa colocando la palabra clave ‘externa’ antes de su declaración/definición en cualquier función/bloque. Básicamente, esto significa que no estamos inicializando una nueva variable, sino que estamos usando/accediendo solo a la variable global. El objetivo principal de usar variables externas es que se puede acceder a ellas entre dos archivos diferentes que forman parte de un programa grande.enlace _
    2. static : esta clase de almacenamiento se usa para declarar variables estáticas que se usan popularmente al escribir programas en lenguaje C. ¡Las variables estáticas tienen la propiedad de preservar su valor incluso después de que estén fuera de su alcance! Por lo tanto, las variables estáticas conservan el valor de su último uso en su alcance. Entonces podemos decir que se inicializan solo una vez y existen hasta la finalización del programa. Por lo tanto, no se asigna memoria nueva porque no se vuelven a declarar. Su alcance es local a la función para la que fueron definidos. Se puede acceder a las variables estáticas globales desde cualquier parte del programa. Por defecto, el compilador les asigna el valor 0.

    // A C program to demonstrate different storage
    // classes
    #include <stdio.h>
      
    // declaring the variable which is to be made extern
    // an intial value can also be initialized to x
    int x;
      
    void autoStorageClass()
    {
      
        printf("\nDemonstrating auto class\n\n");
      
        // declaring an auto variable (simply
        // writing "int a=32;" works as well)
        auto int a = 32;
      
        // printing the auto variable 'a'
        printf("Value of the variable 'a'"
               " declared as auto: %d\n",
               a);
      
        printf("--------------------------------");
    }
      
    void registerStorageClass()
    {
      
        printf("\nDemonstrating register class\n\n");
      
        // declaring a register variable
        register char b = 'G';
      
        // printing the register variable 'b'
        printf("Value of the variable 'b'"
               " declared as register: %d\n",
               b);
      
        printf("--------------------------------");
    }
      
    void externStorageClass()
    {
      
        printf("\nDemonstrating extern class\n\n");
      
        // telling the compiler that the variable
        // z is an extern variable and has been
        // defined elsewhere (above the main
        // function)
        extern int x;
      
        // printing the extern variables 'x'
        printf("Value of the variable 'x'"
               " declared as extern: %d\n",
               x);
      
        // value of extern variable x modified
        x = 2;
      
        // printing the modified values of
        // extern variables 'x'
        printf("Modified value of the variable 'x'"
               " declared as extern: %d\n",
               x);
      
        printf("--------------------------------");
    }
      
    void staticStorageClass()
    {
        int i = 0;
      
        printf("\nDemonstrating static class\n\n");
      
        // using a static variable 'y'
        printf("Declaring 'y' as static inside the loop.\n"
               "But this declaration will occur only"
               " once as 'y' is static.\n"
               "If not, then everytime the value of 'y' "
               "will be the declared value 5"
               " as in the case of variable 'p'\n");
      
        printf("\nLoop started:\n");
      
        for (i = 1; i < 5; i++) {
      
            // Declaring the static variable 'y'
            static int y = 5;
      
            // Declare a non-static variable 'p'
            int p = 10;
      
            // Incrementing the value of y and p by 1
            y++;
            p++;
      
            // printing value of y at each iteration
            printf("\nThe value of 'y', "
                   "declared as static, in %d "
                   "iteration is %d\n",
                   i, y);
      
            // printing value of p at each iteration
            printf("The value of non-static variable 'p', "
                   "in %d iteration is %d\n",
                   i, p);
        }
      
        printf("\nLoop ended:\n");
      
        printf("--------------------------------");
    }
      
    int main()
    {
      
        printf("A program to demonstrate"
               " Storage Classess in C\n\n");
      
        // To demonstrate auto Storage Class
        autoStorageClass();
      
        // To demonstrate register Storage Class
        registerStorageClass();
      
        // To demonstrate extern Storage Class
        externStorageClass();
      
        // To demonstrate static Storage Class
        staticStorageClass();
      
        // exiting
        printf("\n\nStorage Classess demonstrated");
      
        return 0;
    }
      
    // This code is improved by RishabhPrabhu
  • 8. Indique las características de los punteros. Escriba un programa en C para ordenar un número dado usando punteros.

  • Características de los punteros:
    1. Los punteros ahorran espacio en la memoria.
    2. El tiempo de ejecución con punteros es más rápido, porque los datos se manipulan con la dirección, es decir, acceso directo a
      la ubicación de la memoria.
    3. Se accede a la memoria de manera eficiente con los punteros. El puntero asigna y libera el espacio de la memoria. La memoria se asigna dinámicamente.
    4. Los punteros se utilizan con estructuras de datos.
      Son útiles para representar arrays bidimensionales y multidimensionales .
    5. Podemos acceder a los elementos de cualquier tipo de array, independientemente de su rango de subíndices.
    6. Los punteros se utilizan para el manejo de archivos.
    7. Los punteros se utilizan para asignar memoria de forma dinámica.
    8. En C++, un puntero declarado a una clase base podría acceder al objeto de una clase derivada. Sin embargo, un puntero a una clase derivada no puede acceder al objeto de una clase base. El compilador generará un mensaje de error «no se puede convertir ‘A* a B*'», donde A es la clase base y B es la clase derivada.
  • 9. Diferenciar entre lo siguiente:

    • Lenguaje de alto nivel y lenguaje de bajo nivel :
      • Los lenguajes de alto nivel son casi lenguajes humanos. En otras palabras, estos son los lenguajes en los que el código está escrito en un lenguaje más entendido por los humanos que por las máquinas.
      • Los lenguajes de bajo nivel son casi lenguajes de máquina. En otras palabras, estos son los lenguajes en los que el código está escrito en un lenguaje más entendido por las máquinas que por los humanos.
    • Enlazador y cargador

      Diferencia entre enlazador y cargador

      Enlazador Cargador
      Linker genera el módulo ejecutable de un programa fuente. Loader carga el módulo ejecutable en la memoria principal para su ejecución.
      Linker toma el código objeto generado por un ensamblador, como entrada. El cargador toma el módulo ejecutable generado por un enlazador como entrada.
      Linker combina todos los módulos objeto de un código fuente para generar un módulo ejecutable. Loader asigna las direcciones a un módulo ejecutable en la memoria principal para su ejecución.
      Los tipos de Linker son Linkage Editor, Dynamic linker. Los tipos de cargador son carga absoluta, carga reubicable y carga dinámica en tiempo de ejecución.
    • Error lógico y error de tiempo de ejecución
      1. Errores de tiempo de ejecución: los errores que ocurren durante la ejecución del programa (tiempo de ejecución) después de una compilación exitosa se denominan errores de tiempo de ejecución. Uno de los errores de tiempo de ejecución más comunes es la división por cero, también conocida como error de división. Estos tipos de errores son difíciles de encontrar ya que el compilador no apunta a la línea en la que se produce el error.
        Para una mayor comprensión, ejecute el ejemplo que se proporciona a continuación.

        // C program to illustrate
        // run-time error
        #include <stdio.h>
        void main()
        {
            int n = 9, div = 0;
          
            // wrong logic
            // number is divided by 0,
            // so this program abnormally terminates
            div = n / 0;
          
            printf("resut = %d", div);
        }

        Error:

        warning: division by zero [-Wdiv-by-zero]
             div = n/0;

        En el ejemplo dado, hay división por error cero. Este es un ejemplo de error en tiempo de ejecución, es decir, errores que ocurren mientras se ejecuta el programa.

      2. Errores lógicos: en la compilación y ejecución de un programa, no se obtiene la salida deseada cuando se dan ciertos valores de entrada. Estos tipos de errores que proporcionan una salida incorrecta pero parecen estar libres de errores se denominan errores lógicos. Estos son uno de los errores más comunes que cometen los principiantes en programación.
        Estos errores dependen únicamente del pensamiento lógico del programador y son fáciles de detectar si seguimos la línea de ejecución y determinamos por qué el programa toma ese camino de ejecución.

        // C program to illustrate
        // logical error
        int main()
        {
            int i = 0;
          
            // logical error : a semicolon after loop
            for (i = 0; i < 3; i++)
                ;
            {
                printf("loop ");
                continue;
            }
            getchar();
            return 0;
        }

        Ninguna salida

    Publicación traducida automáticamente

    Artículo escrito por RishabhPrabhu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *