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

Enlace de descarga de papel : Papel | Sem 1 | 2016-17

Tecnología B.
(SEM-II) EXAMEN TEÓRICO 2016-17
SISTEMAS DE COMPUTACIÓN 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 30 puntos y la Sección C lleva 50 puntos.
  • Intenta todas las preguntas. Las marcas se indica frente a cada pregunta.
  • Asumir datos adecuados siempre que sea necesario.

Sección B

2. Intente cinco preguntas cualesquiera: (5*10 = 50)

a) i) ¿Cuál es el papel de la instrucción SWITCH en el lenguaje de programación C ? Explique con ejemplo.
Las declaraciones de cambio de caso son un sustituto de las declaraciones if largas que comparan una variable con varios valores integrales

  • La declaración de cambio es una declaración de bifurcación de múltiples vías. Proporciona una forma sencilla de enviar la ejecución a diferentes partes del código en función del valor de la expresión.
  • Switch es una declaración de control que permite que un valor cambie el control de ejecución.

Sintaxis:

switch (n)
{
    case 1: // code to be executed if n = 1;
        break;
    case 2: // code to be executed if n = 2;
        break;
    default: // code to be executed if n doesn't match any cases
}

Diagrama de flujo:
switch-case-en-java

Ejemplo:

// Following is a simple program to demonstrate
// syntax of switch.
#include <stdio.h>
int main()
{
    int x = 2;
    switch (x) {
    case 1:
        printf("Choice is 1");
        break;
    case 2:
        printf("Choice is 2");
        break;
    case 3:
        printf("Choice is 3");
        break;
    default:
        printf("Choice other than 1, 2 and 3");
        break;
    }
    return 0;
}
Producción:

Choice is 2

a) ii) ¿Qué es la recursividad ? Escriba un programa en C para generar la serie de Fibonacci .
El proceso en el que una función se llama a sí misma directa o indirectamente se llama recursividad y la función correspondiente se llama función recursiva. Usando el algoritmo recursivo, ciertos problemas se pueden resolver con bastante facilidad. Ejemplos de tales problemas son Towers of Hanoi (TOH) , Inorder/Preorder/Postorder Tree Traversals , DFS of Graph , etc.

¿Condición base en recursividad?
En el programa recursivo, se proporciona la solución al caso base y la solución del problema más grande se expresa en términos de problemas más pequeños.

int fact(int n)
{
    if (n < = 1) // base case
        return 1;
    else    
        return n*fact(n-1);    
}

En el ejemplo anterior, se define el caso base para n < = 1 y el valor mayor del número se puede resolver convirtiendo a uno más pequeño hasta alcanzar el caso base.

Programa en C para generar la serie de Fibonacci :

// Fibonacci Series using Recursion
  
#include <stdio.h>
  
int fib(int n)
{
    if (n <= 1)
        return n;
    return fib(n - 1) + fib(n - 2);
}
  
int main()
{
    int n = 9;
    printf("%d", fib(n));
    getchar();
    return 0;
}
Producción:

34

b) i) Diferenciar entre-

  1. Parámetros reales y formales :
    • 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.
  2. variables globales y externas
    • Como sugiere el nombre, se puede acceder a las variables globales desde cualquier parte del programa.
      • Están disponibles durante todo el tiempo de vida de un programa.
      • Se declaran en la parte superior del programa fuera de todas las funciones o bloques.
      • Declaración de variables globales : las variables globales generalmente se declaran fuera de todas las funciones y bloques, en la parte superior del programa. Se puede acceder a ellos desde cualquier parte del programa.
    • extern: 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.

b) ii) Describa los componentes básicos de una computadora con un diagrama de bloques prolijo.
Computadora digital: una computadora digital se puede definir como una máquina programable que lee los datos binarios pasados ​​como instrucciones, procesa estos datos binarios y muestra una salida digital calculada. Por lo tanto, las computadoras digitales son aquellas que trabajan sobre los datos digitales.

Detalles de los componentes funcionales de una computadora digital

  • Unidad de entrada: La unidad de entrada consta de dispositivos de entrada que están conectados a la computadora. Estos dispositivos toman la entrada y la convierten en un lenguaje binario que la computadora entiende. Algunos de los dispositivos de entrada comunes son teclado, mouse, joystick, escáner, etc.
  • Unidad central de procesamiento (CPU0): una vez que el dispositivo de entrada ingresa la información en la computadora, el procesador la procesa. La CPU se llama el cerebro de la computadora porque es el centro de control de la computadora. Primero obtiene instrucciones de la memoria y luego los interpreta para saber qué se debe hacer. Si es necesario, los datos se obtienen de la memoria o del dispositivo de entrada. Luego, la CPU ejecuta o realiza el cálculo requerido y luego almacena la salida o la muestra en el dispositivo de salida. La CPU tiene tres componentes principales que son responsables de diferentes funciones: unidad aritmética lógica (ALU), unidad de control (CU) y registros de memoria
  • Unidad Aritmética y Lógica (ALU): La ALU, como su nombre indica realiza cálculos matemáticos y toma decisiones lógicas. Los cálculos aritméticos incluyen suma, resta, multiplicación y división. Las decisiones lógicas implican la comparación de dos elementos de datos para ver cuál es mayor, menor o igual.
  • Unidad de control: La unidad de control coordina y controla el flujo de datos dentro y fuera de la CPU y también controla todas las operaciones de ALU, registros de memoria y también unidades de entrada/salida. También es responsable de llevar a cabo todas las instrucciones almacenadas en el programa. Decodifica la instrucción obtenida, la interpreta y envía señales de control a los dispositivos de entrada/salida hasta que la ALU y la memoria realizan correctamente la operación requerida.
  • Registros de memoria: un registro es una unidad temporal de memoria en la CPU. Estos se utilizan para almacenar los datos que utiliza directamente el procesador. Los registros pueden ser de diferentes tamaños (16 bits, 32 bits, 64 bits, etc.) y cada registro dentro de la CPU tiene una función específica como almacenar datos, almacenar una instrucción, almacenar la dirección de una ubicación en la memoria, etc. Los registros de usuario pueden ser utilizado por un programador de lenguaje ensamblador para almacenar operandos, resultados intermedios, etc. El acumulador (ACC) es el registro principal en la ALU y contiene uno de los operandos de una operación que se realizará en la ALU.
  • Memoria : La memoria adjunta a la CPU se utiliza para el almacenamiento de datos e instrucciones y se denomina memoria interna. La memoria interna se divide en muchas ubicaciones de almacenamiento, cada una de las cuales puede almacenar datos o instrucciones. Cada ubicación de memoria es del mismo tamaño y tiene una dirección. Con la ayuda de la dirección, la computadora puede leer fácilmente cualquier ubicación de la memoria sin tener que buscar en toda la memoria. cuando se ejecuta un programa, sus datos se copian en la memoria interna y se almacenan en la memoria hasta el final de la ejecución. La memoria interna también se denomina memoria primaria o memoria principal. Esta memoria también se denomina RAM, es decir, memoria de acceso aleatorio. El tiempo de acceso de los datos es independiente de su ubicación en la memoria, por lo que esta memoria también se denomina memoria de acceso aleatorio (RAM). Lea esto paradiferentes tipos de ram
  • Unidad de salida: La unidad de salida consta de dispositivos de salida que se conectan con la computadora. Convierte los datos binarios provenientes de la CPU a una forma comprensible para el ser humano. Los dispositivos de salida comunes son monitor, impresora, trazador, etc.

c) i) ¿Qué quiere decir con asignación de memoria dinámica ? Explique las funciones malloc() y calloc() en detalle.
Asignación dinámica de memoria en C: se puede definir como un procedimiento en el que el tamaño de una estructura de datos (como Array) se cambia durante el tiempo de ejecución.

C proporciona algunas funciones para lograr estas tareas. Hay 4 funciones de biblioteca proporcionadas por C definidas en el archivo de encabezado <stdlib.h> para facilitar la asignación de memoria dinámica en la programación de C. Están:

  1. malloc()
  2. llamar()
  3. libre()
  4. reasignar()
  1. malloc()

    El método «malloc» o «asignación de memoria» se utiliza para asignar dinámicamente un solo bloque grande de memoria con el tamaño especificado. Devuelve un puntero de tipo void que se puede convertir en un puntero de cualquier forma.

    Sintaxis:

    ptr = (cast-type*) malloc(byte-size)
    
    For Example:
    ptr = (int*) malloc(100 * sizeof(int));
    
    Since the size of int is 4 bytes, 
    this statement will allocate 400 bytes of memory. 
    And, the pointer ptr holds the address 
    of the first byte in the allocated memory.
    

    Si el espacio es insuficiente, la asignación falla y devuelve un puntero NULL.

    Ejemplo:

    #include <stdio.h>
    #include <stdlib.h>
      
    int main()
    {
      
        // This pointer will hold the
        // base address of the block created
        int* ptr;
        int n, i, sum = 0;
      
        // Get the number of elements for the array
        n = 5;
        printf("Enter number of elements: %d\n", n);
      
        // Dynamically allocate memory using malloc()
        ptr = (int*)malloc(n * sizeof(int));
      
        // Check if the memory has been successfully
        // allocated by malloc or not
        if (ptr == NULL) {
            printf("Memory not allocated.\n");
            exit(0);
        }
        else {
      
            // Memory has been successfully allocated
            printf("Memory successfully allocated using malloc.\n");
      
            // Get the elements of the array
            for (i = 0; i < n; ++i) {
                ptr[i] = i + 1;
            }
      
            // Print the elements of the array
            printf("The elements of the array are: ");
            for (i = 0; i < n; ++i) {
                printf("%d, ", ptr[i]);
            }
        }
      
        return 0;
    }
    Producción:

    Enter number of elements: 5
    Memory successfully allocated using malloc.
    The elements of the array are: 1, 2, 3, 4, 5,
    
  2. llamar()

    El método «calloc» o «asignación contigua» se utiliza para asignar dinámicamente el número especificado de bloques de memoria del tipo especificado. Inicializa cada bloque con un valor predeterminado ‘0’.

    Sintaxis:

    ptr = (cast-type*)calloc(n, element-size);
    
    For Example:
    ptr = (float*) calloc(25, sizeof(float));
    
    This statement allocates contiguous space in memory 
    for 25 elements each with the size of float.
    

    Si el espacio es insuficiente, la asignación falla y devuelve un puntero NULL.

    Ejemplo:

    #include <stdio.h>
    #include <stdlib.h>
      
    int main()
    {
      
        // This pointer will hold the
        // base address of the block created
        int* ptr;
        int n, i, sum = 0;
      
        // Get the number of elements for the array
        n = 5;
        printf("Enter number of elements: %d\n", n);
      
        // Dynamically allocate memory using calloc()
        ptr = (int*)calloc(n, sizeof(int));
      
        // Check if the memory has been successfully
        // allocated by malloc or not
        if (ptr == NULL) {
            printf("Memory not allocated.\n");
            exit(0);
        }
        else {
      
            // Memory has been successfully allocated
            printf("Memory successfully allocated using calloc.\n");
      
            // Get the elements of the array
            for (i = 0; i < n; ++i) {
                ptr[i] = i + 1;
            }
      
            // Print the elements of the array
            printf("The elements of the array are: ");
            for (i = 0; i < n; ++i) {
                printf("%d, ", ptr[i]);
            }
        }
      
        return 0;
    }
    Producción:

    Enter number of elements: 5
    Memory successfully allocated using calloc.
    The elements of the array are: 1, 2, 3, 4, 5,
    

c) ii) Escribir un programa para multiplicar dos arrays de dimensión 3*3 y almacenar el resultado en otra array.

// C program to multiply two square matrices.
  
#include <stdio.h>
  
const int MAX = 100;
  
// Function to print Matrix
void printMatrix(int M[][MAX], int rowSize, int colSize)
{
    for (int i = 0; i < rowSize; i++) {
        for (int j = 0; j < colSize; j++)
            printf("%d ", M[i][j]);
  
        printf("\n");
    }
}
  
// Function to multiply two matrices A[][] and B[][]
void multiplyMatrix(int row1, int col1, int A[][MAX],
                    int row2, int col2, int B[][MAX])
{
    int i, j, k;
  
    // Matrix to store the result
    int C[MAX][MAX];
  
    // Check if multiplication is Possible
    if (row2 != col1) {
        printf("Not Possible\n");
        return;
    }
  
    // Multiply the two
    for (i = 0; i < row1; i++) {
        for (j = 0; j < col2; j++) {
            C[i][j] = 0;
            for (k = 0; k < row2; k++)
                C[i][j] += A[i][k] * B[k][j];
        }
    }
  
    // Print the result
    printf("\nResultant Matrix: \n");
    printMatrix(C, row1, col2);
}
  
// Driven Program
int main()
{
    int row1, col1, row2, col2, i, j;
    int A[MAX][MAX], B[MAX][MAX];
  
    // Read size of Matrix A from user
    printf("Enter the number of rows of First Matrix: ");
    scanf("%d", &row1);
    printf("%d", row1);
    printf("\nEnter the number of columns of First Matrix: ");
    scanf("%d", &col1);
    printf("%d", col1);
  
    // Read the elements of Matrix A from user
    printf("\nEnter the elements of First Matrix: ");
    for (i = 0; i < row1; i++) {
        for (j = 0; j < col1; j++) {
            printf("\nA[%d][%d]: ", i, j);
            scanf("%d", &A[i][j]);
            printf("%d", A[i][j]);
        }
    }
  
    // Read size of Matrix B from user
    printf("\nEnter the number of rows of Second Matrix: ");
    scanf("%d", &row2);
    printf("%d", row2);
    printf("\nEnter the number of columns of Second Matrix: ");
    scanf("%d", &col2);
    printf("%d", col2);
  
    // Read the elements of Matrix B from user
    printf("\nEnter the elements of First Matrix: ");
    for (i = 0; i < row2; i++) {
        for (j = 0; j < col2; j++) {
            printf("\nB[%d][%d]: ", i, j);
            scanf("%d", &B[i][j]);
            printf("%d", B[i][j]);
        }
    }
  
    // Print the Matrix A
    printf("\n\nFirst Matrix: \n");
    printMatrix(A, row1, col1);
  
    // Print the Matrix B
    printf("\nSecond Matrix: \n");
    printMatrix(B, row2, col2);
  
    // Find the product of the 2 matrices
    multiplyMatrix(row1, col1, A, row2, col2, B);
  
    return 0;
}
Producción:

Enter the number of rows of First Matrix: 2
Enter the number of columns of First Matrix: 3
Enter the elements of First Matrix: 
A[0][0]: 1
A[0][1]: 2
A[0][2]: 3
A[1][0]: 4
A[1][1]: 5
A[1][2]: 6

Enter the number of rows of Second Matrix: 3
Enter the number of columns of Second Matrix: 2
Enter the elements of First Matrix: 
B[0][0]: 1
B[0][1]: 2
B[1][0]: 3
B[1][1]: 4
B[2][0]: 5
B[2][1]: 6

First Matrix: 
1 2 3 
4 5 6 

Second Matrix: 
1 2 
3 4 
5 6 

Resultant Matrix: 
22 28 
49 64 

d) Convierta los siguientes números:
(i) (10101011101.011) 2 =() 16

  • (10101011101.011) 2
    = (55D.6) 16
  • (ii) (916.125) 10 =() 4

  • (916.125) 10
    = (32110.02) 4
  • (iii)(123) 10 =() 2

  • (123) 10
    = (1111011) 2
  • (iv) (574.32) 8 =() 2

  • (574,32) 8
    = (101111100,01101) 2
  • (v) (1011.10) 2 =() 10

  • (1011,10) 2
    = (11,5) 10
  • e) i) Escriba un programa para imprimir todos los números primos del 1 al 300.

    // C program to check if a
    // number is prime
      
    #include <stdio.h>
      
    int main()
    {
        int n = 1, i, flag = 1;
      
        for (n = 1; n <= 300; n++) {
            flag = 1;
            // Iterate from 2 to n/2
            for (i = 2; i <= n / 2; i++) {
      
                // If n is divisible by any number between
                // 2 and n/2, it is not prime
                if (n % i == 0) {
                    flag = 0;
                    break;
                }
            }
      
            if (flag == 1) {
                printf("\n%d is a prime number", n);
            }
        }
        return 0;
    }
    
    Producción:

    1 is a prime number
    2 is a prime number
    3 is a prime number
    5 is a prime number
    7 is a prime number
    11 is a prime number
    13 is a prime number
    17 is a prime number
    19 is a prime number
    23 is a prime number
    29 is a prime number
    31 is a prime number
    37 is a prime number
    41 is a prime number
    43 is a prime number
    47 is a prime number
    53 is a prime number
    59 is a prime number
    61 is a prime number
    67 is a prime number
    71 is a prime number
    73 is a prime number
    79 is a prime number
    83 is a prime number
    89 is a prime number
    97 is a prime number
    101 is a prime number
    103 is a prime number
    107 is a prime number
    109 is a prime number
    113 is a prime number
    127 is a prime number
    131 is a prime number
    137 is a prime number
    139 is a prime number
    149 is a prime number
    151 is a prime number
    157 is a prime number
    163 is a prime number
    167 is a prime number
    173 is a prime number
    179 is a prime number
    181 is a prime number
    191 is a prime number
    193 is a prime number
    197 is a prime number
    199 is a prime number
    211 is a prime number
    223 is a prime number
    227 is a prime number
    229 is a prime number
    233 is a prime number
    239 is a prime number
    241 is a prime number
    251 is a prime number
    257 is a prime number
    263 is a prime number
    269 is a prime number
    271 is a prime number
    277 is a prime number
    281 is a prime number
    283 is a prime number
    293 is a prime number
    

    e) ii) Cualquier año se ingresa a través del teclado. Escriba un programa para determinar si el año es bisiesto o no .

    // C program to check if a given
    // year is leap year or not
      
    #include <stdbool.h>
    #include <stdio.h>
      
    bool checkYear(int year)
    {
        // If a year is multiple of 400,
        // then it is a leap year
        if (year % 400 == 0)
            return true;
      
        // Else If a year is multiple of 100,
        // then it is not a leap year
        if (year % 100 == 0)
            return false;
      
        // Else If a year is multiple of 4,
        // then it is a leap year
        if (year % 4 == 0)
            return true;
        return false;
    }
      
    // driver code
    int main()
    {
        int year;
      
        // Get the year
        printf("Enter the year: ");
        scanf("%d", &year);
        printf("%d", year);
      
        // Check if year is leap year
        checkYear(year)
            ? printf("\nLeap Year")
            : printf("\nNot a Leap Year");
        return 0;
    }
    
    Producción:

    Enter the year: 2018
    Not a Leap Year
    

    f) ¿Qué quiere decir con paso de parámetros ? Analice varios tipos de mecanismos de paso de parámetros en C con ejemplos .

    La asignación de valores a las variables definidas en la definición de la función en tiempo de ejecución se conoce como paso de parámetros. 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 denominanlos argumentos reales y los parámetros de B se llaman argumentos formales .

    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
      

      g) i) Definir tipos de datos en C . Discuta los tipos de datos primitivos en términos de memoria ocupada, especificador de formato y rango.

      Cada variable en C tiene un tipo de dato asociado. Cada tipo de datos requiere diferentes cantidades de memoria y tiene algunas operaciones específicas que se pueden realizar sobre él. Vamos a describirlos brevemente uno por uno:

      Los siguientes son ejemplos de algunos tipos de datos muy comunes utilizados en C:

      • char: El tipo de datos más básico en C. Almacena un solo carácter y requiere un solo byte de memoria en casi todos los compiladores.
      • int: como sugiere el nombre, una variable int se usa para almacenar un número entero.
      • float: Se utiliza para almacenar números decimales (números con valor de punto flotante) con precisión simple.
      • double: Se utiliza para almacenar números decimales (números con valor de coma flotante) con doble precisión.

      Los diferentes tipos de datos también tienen diferentes rangos hasta los cuales pueden almacenar números. Estos rangos pueden variar de un compilador a otro. A continuación se muestra una lista de rangos junto con los requisitos de memoria y los especificadores de formato en el compilador gcc de 32 bits.

      Tipo de datos Memoria (bytes) Rango Especificador de formato
      corto 2 -32, 768 a 32, 767 %hd
      int corto sin firmar 2 0 a 65, 535 %hu
      int sin firmar 4 0 a 4, 294, 967, 295 %u
      En t 4 -2, 147, 483, 648 a 2, 147, 483, 647 %d
      largo tiempo 4 -2, 147, 483, 648 a 2, 147, 483, 647 %ld
      int largo sin firmar 4 0 a 4, 294, 967, 295 % lu
      mucho tiempo 8 -(2^63) a (2^63)-1 %lld
      int largo largo sin firmar 8 0 a 18, 446, 744, 073, 709, 551, 615 %llu
      carácter firmado 1 -128 a 127 %C
      carácter sin firmar 1 0 a 255 %C
      flotar 4 %F
      doble 8 %lf
      largo doble 12 %Lf

      g) ii) Escriba un programa para imprimir el siguiente patrón:

      A
      AB
      ABC
      ABCD
      ABCDE
      ABCDEF
      

      #include <stdio.h>
        
      int main()
      {
        
          char ch = 'A';
          int i, j;
        
          for (i = 0; i < 5; i++) {
              for (j = 0; j <= i; j++) {
                  printf("%c", ch + j);
              }
        
              printf("\n");
          }
        
          return 0;
      }
      Producción:

      A
      AB
      ABC
      ABCD
      ABCDE
      

      h) Enumere varias operaciones y modos de archivos en C. Escriba un programa para copiar el contenido de un archivo a otro archivo.
      Modos de apertura de archivos en C:

      • “r” – Archivo de búsquedas. Si el archivo se abre con éxito, fopen() lo carga en la memoria y establece un puntero que apunta al primer carácter que contiene. Si el archivo no se puede abrir, fopen( ) devuelve NULL.
      • “w” – Archivo de búsquedas. Si el archivo existe, su contenido se sobrescribe. Si el archivo no existe, se crea un nuevo archivo. Devuelve NULL, si no puede abrir el archivo.
      • “a” – Archivo de búsquedas. Si el archivo se abre con éxito, fopen() lo carga en la memoria y configura un puntero que apunta al último carácter que contiene. Si el archivo no existe, se crea un nuevo archivo. Devuelve NULL, si no puede abrir el archivo.
      • “r+” – Busca archivos. Si se abre con éxito, fopen() lo carga en la memoria y configura un puntero que apunta al primer carácter que contiene. Devuelve NULL, si no puede abrir el archivo.
      • “w+” – Busca archivos. Si el archivo existe, su contenido se sobrescribe. Si el archivo no existe, se crea un nuevo archivo. Devuelve NULL, si no puede abrir el archivo.
      • “a+” – Busca archivos. Si el archivo se abre con éxito, fopen() lo carga en la memoria y configura un puntero que apunta al último carácter que contiene. Si el archivo no existe, se crea un nuevo archivo. Devuelve NULL, si no puede abrir el archivo.

      Programa en C para copiar el contenido de un archivo a otro archivo:

      #include <stdio.h>
      #include <stdlib.h> // For exit()
        
      int main()
      {
          FILE *fptr1, *fptr2;
          char filename[100], c;
        
          printf("Enter the filename to open for reading \n");
          scanf("%s", filename);
        
          // Open one file for reading
          fptr1 = fopen(filename, "r");
          if (fptr1 == NULL) {
              printf("Cannot open file %s \n", filename);
              exit(0);
          }
        
          printf("Enter the filename to open for writing \n");
          scanf("%s", filename);
        
          // Open another file for writing
          fptr2 = fopen(filename, "w");
          if (fptr2 == NULL) {
              printf("Cannot open file %s \n", filename);
              exit(0);
          }
        
          // Read contents from file
          c = fgetc(fptr1);
          while (c != EOF) {
              fputc(c, fptr2);
              c = fgetc(fptr1);
          }
        
          printf("\nContents copied to %s", filename);
        
          fclose(fptr1);
          fclose(fptr2);
          return 0;
      }
      Producción:

      Enter the filename to open for reading 
      Cannot open file
      

      Producción:

      Enter the filename to open for reading
      a.txt
      Enter the filename to open for writing
      b.txt
      Contents copied to b.txt 
      

    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 *