problema con funciones en C

Estado
Cerrado para nuevas respuestas

david1985

Nuevo Miembro
Miembro
#1
hola... estaba intentando hacer una funcion para un programa que cuente el numero de vocales que hay en una cadena de caracteres, ya se que es un poco chorrada pero estoy empezando y cosas mas dificiles se me hace un mundo...

mi problema es el siguiente: no se declarar bien una funcion y no se exactamente como se llama desde main.

PD: como se utiliza gets? es que cuando haga el bucle para recorrer el vector en busca de mis vocales me gustaría utilizar el gets en vez de scanf.
 

rob1104

Super Moderador
Super Moderador
#2
mi problema es el siguiente: no se declarar bien una funcion y no se exactamente como se llama desde main.
Hola, mira para declarar una función tienes que saber que parametros pasarle y que valor va a devolver, la sintaxis generalmente es:

Insertar CODE, HTML o PHP:
tipodefuncion nombredefuncion(parametros)

{

   codigo

   valorderetorno

}
En tu caso, le vas a pasar una cadena de caracteres y retornas un valor numerico, podrías declararla asi:

Insertar CODE, HTML o PHP:
int contarvocales(char cadena[100])

{

   codigodelafuncion

}
Si la creas antes de main, la puedes llamar simplemente escribiendo el nombre de la funcion y le pasas el argumento :D
Insertar CODE, HTML o PHP:
int main()

{

   char texto[100];

   int numdevocales;

   printf("escribe una cadena");

   gets(texto);

   numdevocales=contarvocales(texto); 

   printf("el texto tiene %i vocales",numdevocales);

   return 0;

}
Si la funcion la declaras después de main, debes crear el prototipo antes, te quedara algo asi:

Insertar CODE, HTML o PHP:
#includes.....

int contarvocales(char cadena[100]);

int main()

{

   codigo

}

int contarvocales(char cadena[100])

{

   codigo

}
PD: como se utiliza gets? es que cuando haga el bucle para recorrer el vector en busca de mis vocales me gustaría utilizar el gets en vez de scanf.
La funcion gets se usa muy similar a scanf, tal como te lo mostré en un codigo anterior

gets(variable)

De hecho para recorrer caracteres debes usar solamente gets, ya que scanf no te respetara espacios :D

Saludos
 

david1985

Nuevo Miembro
Miembro
#3
asi estaría bien?

include<stdio.h>

int numero_vocales (char V[100]);

main(){

char V[100];

printf("introduce una frase \n\n");

gets(V);

printf("el numero de vocales es : %i", numero_vocales);

}

int numero_vocales (char V[100])

int c=0,i;

for (i=0;V!='\0';i++)

{

if ((V=='a')||(V=='e')||(V=='i')||(V=='o')||(V=='u'))

c++;

}

return c;

}
 

rob1104

Super Moderador
Super Moderador
#4
Bien, tienes la idea, pero te faltaron varios detalles, así va de lujo, analizala:

Insertar CODE, HTML o PHP:
#include<stdio.h> //Es #include

int numero_vocales (char V[100]);

int main(){ //El ANSI C dice que main es tipo int

 *char V[100];

 *int numvocales; //Declaramos una variable entera

 *printf("introduce una frase \n\n");

 *gets(V);

 *numvocales=numero_vocales(V);//Asignamos

 *printf("el numero de vocales es : %i", numvocales);

 *getchar(); //Hacemos una pausa para que puedas ver

 *return 0; //al retornar 0 indicamos que todo esta correcto

}

int numero_vocales (char V[100]){//olvidaste el token

 *int c=0,i;

 *for (i=0;V[i]!='\0';i++)

 *{

 *if ((V[i]=='a')||(V[i]=='e')||(V[i]=='i')||(V[i]=='o')||(V[i]=='u'))

 * *c++;

 *}

 *return c;

}
 

david1985

Nuevo Miembro
Miembro
#5
esto no lo entiendo bien

numvocales=numero_vocales(V);//Asignamos

si ya devuelves c (el contador) con la funcion esto exactamente porque se hace asi, no valdria con hacer un printf e imprimir la funcion?

lo de return 0 nunca lo ponia por desconocimiento y me compilaba bien...

y lo de getchar() esta en otra libreria o vale con la de stdio.h

PD: para que pudiese verlo yo incluyo stdlib.h y al final de main pongo system ("pause");

es lo mismo o lo hago como tu e has dicho?

gracias por las ayudas

por cierto, me cuesta encontrar ajercicios para ir avanzando ya que por mi cuenta es un poco dificil aprender... si me puedes ayudar a encontrar algún ejercicio también te lo agradeceria
 

rob1104

Super Moderador
Super Moderador
#6
esto no lo entiendo bien

numvocales=numero_vocales(V);//Asignamos

si ya devuelves c (el contador) con la funcion esto exactamente porque se hace asi, no valdria con hacer un printf e imprimir la funcion?
Claro que valdria, pero tendrias que hacerlo de este modo:

printf("el numero de vocales es : %i", numero_vocales(V));

ya que recuerda que tienes que pasarle un parametro a la funcion, sino le pasas nada ¿en cual cadena de caracteres va a contar las vocales?; yo en lo personal prefiero declarar la variable y luego asignar, así tengo mejor ubicado donde cambiar el parametro de la funcion y de donde viene, pero si quieres ahorrar una linea de codigo... adelante :D



o de return 0 nunca lo ponia por desconocimiento y me compilaba bien...
No se cual compilador uses, pero a mi por ejemplo en visual C++, y en MinGW(Dev C++) me compila pero me da un warning, antiguamente en los compiladores de 16 bits como turbo c y borland C si aceptaba main() sin ningún tipo, incluso aceptaba void main(), pero si quieres que tus programas sean estandar, recomiendo que respetes el ANSI C

y lo de getchar() esta en otra libreria o vale con la de stdio.h
getchar() se encuentra en stdio.h, su funcion es hacer una pausa hasta que se pulse un caracter.

PD: para que pudiese verlo yo incluyo stdlib.h y al final de main pongo system ("pause");

es lo mismo o lo hago como tu e has dicho?
Es exactamente lo mismo, de hecho si programas solamente para Windows y en Windows es mas recomendable usar system("pause")...

por cierto, me cuesta encontrar ajercicios para ir avanzando ya que por mi cuenta es un poco dificil aprender... si me puedes ayudar a encontrar algún ejercicio también te lo agradeceria
Ahorita ando un poco corto de tiempo amigo, pero en cuanto pueda con gusto te ayudo, por el momento puedes intentar ingeniartelas, si quieres practicar funciones, empieza creando funciones simples, como esa de contar vocales, luego crea una que te cuente todos los caracteres de una palabra, que los invierta, que ordene una secuencia de numeros, que haga una operacion matematica compleja, en fin... practica mucho

Un saludo
 

david1985

Nuevo Miembro
Miembro
#7
muchisimas gracias por todo con gente como tu es simpre mucho mas facil, intentare hacer funciones mas complejasy si tengo algúna duda te lo consulto

PD: cuando puedas me podrías explicar lo de los punteros... es que no entiendo muy bien ni para que sirven ni para que se usan... gracias
 

david1985

Nuevo Miembro
Miembro
#8
mira haber si el siguiente ejercicio esta bien por favor...

#include <stdio.h>

#include <stdlib.h>

char nombre_al_reves (char V[50]);

main(){

char V[50];

printf ("escribe la frase que quieres que se ponga al reves \n\n");

gets (V);

printf ("la frase invertida es: %c",nombre_al_reves[V]);

system ("pause");

}

char nombre_al_reves (char V[50])

{

int i;

for (V=('\0'-1);i>=0;i--) //creo que esta mal!!!

printf ("&c",V);

}
 
Estado
Cerrado para nuevas respuestas
Arriba Pie