Bienvenido: ( Identificarse | Registrarse )      
Foros de Trucos Windows
 
Closed TopicStart new topicStart Poll

Outline · [ Estándar ] · Lineal+

> problema con funciones en C, menudo lio!

david1985
post Jun 11 2007, 11:06 AM
Publicado: #1


Miembro Avanzado
***

Grupo: Members
Mensajes: 76
Registrado: 31-May 07
Miembro nº: 202.258



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? esque cuando haga el bucle para recorrer el vector en busca de mis vocales me gustaria utilizar el gets en vez de scanf.




User is offlineProfile CardPM
Go to the top of the page
+Quote Post
rob1104
post Jun 11 2007, 06:00 PM
Publicado: #2


Xbox Live... The best thing ever happened around videogames
Group Icon

Grupo: Moderadores
Mensajes: 1.665
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342



QUOTE
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:
CODE
tipodefuncion nombredefuncion(parametros)
{
  codigo
  valorderetorno
}


En tu caso, le vas a pasar una cadena de caracteres y retornas un valor numerico, podrias declararla asi:
CODE
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
CODE

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 despues de main, debes crear el prototipo antes, te quedara algo asi:
CODE
#includes.....
int contarvocales(char cadena[100]);
int main()
{
  codigo
}
int contarvocales(char cadena[100])
{
  codigo
}


QUOTE
PD: como se utiliza gets? esque cuando haga el bucle para recorrer el vector en busca de mis vocales me gustaria 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 wink.gif

Saludos thumbsup.gif


User is offlineProfile CardPM
Go to the top of the page
+Quote Post
david1985
post Jun 11 2007, 06:44 PM
Publicado: #3


Miembro Avanzado
***

Grupo: Members
Mensajes: 76
Registrado: 31-May 07
Miembro nº: 202.258



asi estaria 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[i]!='\0';i++)
{
if ((V[i]=='a')||(V[i]=='e')||(V[i]=='i')||(V[i]=='o')||(V[i]=='u'))
c++;
}
return c;
}




User is offlineProfile CardPM
Go to the top of the page
+Quote Post
rob1104
post Jun 11 2007, 06:54 PM
Publicado: #4


Xbox Live... The best thing ever happened around videogames
Group Icon

Grupo: Moderadores
Mensajes: 1.665
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342



Bien, tienes la idea, pero te faltaron varios detalles, asi va de lujo, analizala:
CODE
#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;
}

thumbsup.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
david1985
post Jun 11 2007, 07:04 PM
Publicado: #5


Miembro Avanzado
***

Grupo: Members
Mensajes: 76
Registrado: 31-May 07
Miembro nº: 202.258



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 algun ejercicio tb te lo agradeceria
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
rob1104
post Jun 11 2007, 07:15 PM
Publicado: #6


Xbox Live... The best thing ever happened around videogames
Group Icon

Grupo: Moderadores
Mensajes: 1.665
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342



QUOTE
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, asi tengo mejor ubicado donde cambiar el parametro de la funcion y de donde viene, pero si quieres ahorrar una linea de codigo... adelante clap.gif


QUOTE
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 ningun tipo, incluso aceptaba void main(), pero si quieres que tus programas sean estandar, recomiendo que respetes el ANSI C biggrin20jy.gif
QUOTE
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.

QUOTE
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")...


QUOTE
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 algun ejercicio tb 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 thumbsup.gif thumbsup.gif

Un saludo
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
david1985
post Jun 11 2007, 07:28 PM
Publicado: #7


Miembro Avanzado
***

Grupo: Members
Mensajes: 76
Registrado: 31-May 07
Miembro nº: 202.258



muchisimas gracias por todo con gente como tu es simpre mucho mas facil, intentare hacer funciones mas complejasy si tengo alguna duda te lo consulto

PD: cuando puedas me podrias explicar lo de los punteros... esque no entiendo muy bien ni para que sirven ni para que se usan... gracias
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
david1985
post Jun 11 2007, 07:56 PM
Publicado: #8


Miembro Avanzado
***

Grupo: Members
Mensajes: 76
Registrado: 31-May 07
Miembro nº: 202.258



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[i]=('\0'-1);i>=0;i--) //creo que esta mal!!!

printf ("&c",V[i]);
}
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
Closed TopicTopic OptionsStart new topic

Collapse

> Topicos similares

Problema con WMP mmanya 79 7 Hoy, 08:52 PM
By: Caito
PROBLEMA AL PASAR ARCHIVOS POR BLUETOOTH chungopetaka 42 2 Hoy, 08:36 PM
By: chungopetaka
problema con Directx 9 chekoroll 108 5 Hoy, 09:00 AM
By: RedPhoenix
tengo un problema con la repreoduccion de un cd ... robertogago 29 1 Ayer, 08:59 PM
By: LordSauron
Problema con firefox. progando 39 1 Ayer, 07:40 PM
By: rioj