C/Visual C - No entiendo esta explicacion

 
Vista:
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 05/10/2020 18:08:25
Hay dos cosas que no enteidno me he quedado atascado en el libro

1º Me pone que las funciones devuelven un valor

main devuelve int si el numero es 0 se ejecuto correctamente sino error
printf devuelve int numero de caracteres escritos
strcpy/strncpy devuelve char* cadena si todo va bien NULL si va bien
ftell devuelvoe long(size_t) posicion en el fichero en bytes o -1L en caso de error

Entonces me pide un problema de

Crea un programa que escriba la raiz cuadrada de 10 y muestre la cantidad de cifras que sea han escrito en pantalla (Pista:mira el valor devuelto de printf)(presupongo que sera 3,3334...)

Entonces ¿que diferencia de este a un problema normal?

2º La recursividad que se usa en cosas como factorial pense que era el if-else de hacerse llamadas en bucle pero ahora me viene con esto y no veo diferencia a lo que hago con if-else pero llamandose a si mismo
o sea
1
2
3
4
5
6
7
8
9
10
11
long fact(int n){
if(n=1)
return 1;
return n=*fact (n-1);
}
int main(){
int num;
printf("Introduzca un numero entero:");
scanf("%d",&num);
printf("Su factorial es: %ld\n", fact(num); //ahora no me acuerdo si es Ld o 1d lo estoy escribiendo rapido
return 0;
¿estoy entendiendo bien esto?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No entiendo esta explicacion

Publicado por Nacho (76 intervenciones) el 05/10/2020 20:38:13
1º Si tienes que escribir una función que devuelva un valor tendrás que poner
1
2
3
4
5
6
int MiFuncion()
{
    int valor;
    ............
    return valor;
}
en vez de
1
2
3
4
void MiFuncion()
{
    ..........
}

2º En programación, una función recursiva es una función que se llama a sí misma. El if ese que pones es lo que se llama la condición base, la condición que hace que la función deje de llamarse a sí misma, porque si no no pararía nunca.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 06/10/2020 14:20:02
pero en el que tu dices es un int yo me refiero al caso de funciones printf spritnf fread, sscanf y cosas asi

yo creo que no puedo return printf vamos no es una varibale con un valor no funcionara
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por Rodrigo (119 intervenciones) el 06/10/2020 16:22:31
Cuando haces return variable en realidad estas devolviendo el valor que guarda la variable

Tambien puedes hacer return constante (ejemplo return 3; o return 4.5, o return 'z', etc.)

Tambien puedes hacer return printf pero ....

pero en el caso de las funciones tienes 2 alternativas, ambas alternativas generan un valor y tienes que decidirte cual de ellas te sirve:

- o bien haces return printf; y estaras devolviendo la direccion de memoria donde esta alojada printf

- o bien invocas a printf haciendo return printf( ... ); la magia de los parentesis, en que printf sera ejecutada y el valor que retorne sera usado en el return. Ahora si miras lo que tu mismo escribiste, veras que printf devuelve el numero de caracteres que se escribio, entonces return printf("hola") hara 2 cosas: escribir printf y ademas hacer que la funcion donde esta ese return devuelva 4 (porque "hola" tiene 4 caracteres visibles).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 06/10/2020 18:36:09
aa vale ahora si lo entiendo Gracias :)

Pues faltaria el 2º lo de la recursividad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 06/10/2020 19:07:30
vale no no funciona deberia devolver 1 y deuvle el numero que es
1
2
3
4
5
6
7
8
9
10
/*ejercicio 7.9.3.1 Crea un programa que escriba la raiz cuadrada de 10 y muestre la cantidad de cifras que se han escrito en pantalla
Pista mira el valor devuelto por printf*/
#include <stdio.h>
#include <math.h>
 
int main(){
	int m;
	m=sqrt(10);
	return printf("%d",m);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por Rodrigo (119 intervenciones) el 06/10/2020 21:35:00
ponlo dentro de otra funcion, y luego invoca esa funcion dentro de main.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 06/10/2020 21:47:14
nada no va
El problema es que no viene ningun ejemplo de esto y no puedo basarme en nada mas visual por mas que lo intento no puedo y no encuentro nada en internet pero ni en overflow ni la web del autor ni aqui ni en ningun sitio

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
 
char imprimir(int m){
	return printf("%d",m);
 
}
 
int main(){
	int m;
	int n;
	m=sqrt(10);
	imprimir(m);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por Rodrigo (119 intervenciones) el 06/10/2020 22:24:42
Invocas a imprimir, y esta imprime y devuelve un valor, pero tu no haces nada con ese valor.
Como sabes que no esta funcionando?

Deberias imprimir el valor que te retorna la funcion imprimir, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 06/10/2020 22:58:21
¿asi?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
 
char imprimir(int m){
	return printf("%d",m);
 
}
 
int main(){
	int m;
	int n;
	m=sqrt(10);
	printf("%d",imprimir(m));
}
y que hago con el prinft para que no escriba
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por Rodrigo (119 intervenciones) el 06/10/2020 23:50:29
por que no quieres que printf escriba?

El enunciado original era segun veo: "Crea un programa que escriba la raiz cuadrada de 10..."

y eso es lo que haces con el printf, lo que ocurre es que ahora que tienes el resultado, lo que retorna printf (no lo que escribe solamente) puedes hacer algo con ese resultado, por ejemplo imprimirlo, como lo haces ahora.

Tambien podrias asignarlo a alguna variable, compararlo, etc. No estas obligado a imprimirlo inmediatamente como lo tienes ahora.
Fijate en el enunciado de tu problema, tal vez no quieres escribirlo inmediatamente?

Una cosa podrias cambiar, la raiz de 10 es seguramente un numero decimal, tal vez quieres cambiar el tipo de m a double y cambiar el tipo en todas las partes que sea necesario y el %d cambiarlo por %f.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 07/10/2020 15:29:48
Porque no se la manera de hacer que no ejecute la funcion ademas de coger el valor

Que asi estaria bien pero quiero saber como porque habra funciones mas adelante o algun problema en el que no quiere que se ejecute
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por Rodrigo (119 intervenciones) el 07/10/2020 16:36:34
Si quieres obtener el valor que retorna una funcion estas obligado a ejecutarla.

Si la ejecucion escribe, destruye, pinta, o lo que sea que hace, no puedes evitarlo, porque necesitas ejecutarla para obtener el valor que retorna.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo esta explicacion

Publicado por carlos (95 intervenciones) el 07/10/2020 20:41:22
JOOOoooo
Vale, gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar