Autor Tema: Qué es el tipo de retorno void en C Paso parámetros funciones lenguajeC CU00550F  (Leído 2312 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes. Dejo una posible solución de los ejercicios planteados en la entrega CU00550F del curso aprende a programar con lenguaje C desde cero.

Citar
EJERCICIO Nº1

Refactoriza el código que hemos visto como ejercicio resuelto para que cumpla con estos requisitos:

a) La función entraDatos deberá tener como tipo de retorno int en lugar de void, de modo que devolverá el valor introducido por el usuario.

b) La función proceso ya no existirá y en su lugar tendremos dos funciones: calcularRaiz(int num) y calcularSumatorio (int num)

c) La función resultados ya no existirá y su cometido será realizado dentro del main.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int dato=0;
double raiz01, raiz02;
double suce=0.0;

int entraDato();
void calcularRaiz(int num);
void calcularSumatorio(int num);

int main() {
    int opcionUsuario=1;
    while(opcionUsuario != 2){
        printf("\n\n1: Calculo\n2: Salir\n\nElija opcion: ");
        scanf("%d",&opcionUsuario);
        if(opcionUsuario==1){
            entraDato();
            calcularRaiz(dato);
            calcularSumatorio(dato);
            printf("\nDato base: %d",dato);
            printf("\nRaiz01=%lf Raiz02=%lf",raiz01,raiz02);
            printf("\nValor sucesion: %lf",suce);
        }
    }

    return 0;
}

int entraDato(){
    do{
        printf("\nPor favor, introduzca numero entero entre 0 y 100: ");
        scanf("%d",&dato);
    }while(dato<0 || dato>100);

    return dato;
}

void calcularRaiz(int num){
    suce=0.0; //Borrado dato valor suce
    raiz01=sqrt(num);
    raiz02=-raiz01;
}

void calcularSumatorio(int num){
    suce=0.0;
    while(num>=0){
        suce=suce+sqrt(num);
        num=num-1;
    }
}


Citar
EJERCICIO Nº 2

Estudia el siguiente código y responde a las preguntas:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
// Ejercicios curso C aprenderaprogramar.com

//---------------------------------
void fun(int arr[]) {
int i;
for(i=0;i< 5;i++)
 arr[i] = arr[i] + 10;
}
//--------------------------------
void main() {
int arr[5],i;
clrscr();
printf("\nEnter the array elements : ");
for(i=0;i< 5;i++)
 scanf("%d",&arr[i]);

printf("\nPassing entire array .....");
fun(arr);  // Pass only name of array

for(i=0;i< 5;i++)
 printf("\nAfter Function call a[%d] : %d",i,arr[i]);

getch();
}

Citar
a) Busca información sobre conio.h, clrscr() y getch() ¿Forman parte del estándar de C?

No. La librería <conio.h>, es propiedad de Borland y sólo sus compiladores pueden usarla. Por lo tanto significa que conio.h, no es una librería estandar. La función pertenece a la librería conio.h cabe destacar que no es una librería estándar del lenguaje C. Lo mismo podríamos decir sobre la función getch().

Citar
b) Si el programa no te funciona, reescríbelo para que funcione.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Ejercicios curso C aprenderaprogramar.com

//---------------------------------
void fun(int arr[]) {
int i;
for(i=0;i< 5;i++)
 arr[i] = arr[i] + 10;
}
//--------------------------------
void main() {
int arr[5],i;
system("cls");
printf("\nEnter the array elements : ");
for(i=0;i< 5;i++)
 scanf("%d",&arr[i]);

printf("\nPassing entire array .....");
fun(arr);  // Pass only name of array

for(i=0;i< 5;i++)
 printf("\nAfter Function call a[%d] : %d",i,arr[i]);

getchar();
}

Sabiendo que getchar() nos sirve para capturar un carácter ingresado por medio del teclado,  no entiendo el sentido de la  invocación de la misma en este código.

Citar
c) ¿Qué objetivo tiene este programa? ¿Qué resultado debe devolver si se introducen los números 1, 2, 3, 4, 5?

El objetivo del programa es que el usuario pueda ingresar los valores de los arrays. Si se entran 1, 2, 3, 4 y 5 los arrays se inicializarán con los valores de los números entrados más 10 unidades en cada uno.

El resultado será:

Passing entire array .....
After Function call a[0] : 11
After Function call a[1] : 12
After Function call a[2] : 13
After Function call a[3] : 14
After Function call a[4] : 15

Citar
d) ¿Es válido un bucle for sin llaves delimitadoras { … } de las instrucciones a ejecutar?

Sí, es válido, pero no aconsejable porque obstruye a la buena compensión del código y su depuración.

Gracias.
« Última modificación: 12 de Julio 2016, 17:46 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! Todo bien. Se ha comentado en otro hilo que el segundo ejercicio lo que pretende es demostrar cómo en C el paso de arrays a funciones permite la manipulación del contenido del array dentro de la función.

getchar() es una función un tanto extraña. Esta función se supone que está prevista para leer un carácter, pero en realidad cuando se entran datos por teclado la entrada es un buffer que se mantiene en memoria y getchar no lee nada hasta que se pulsa enter. Además si se invoca getchar() de nuevo se utiliza el buffer y se extrae un nuevo caracter, lo cual resulta bastante extraño.

Este pequeño código no hace nada pero permite ver que al invocar getchar() se van extrayendo caracteres del buffer:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Ejercicios curso C aprenderaprogramar.com


void main() {
    int c;
    printf("Hola introduce una letra: ");
    c = getchar();
    while(c != EOF && c !='\0'){
         putchar(c);
         printf("\n");
         c = getchar();
    }
}

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".