Título: funcion recibe dos parametros Publicado por: ALONSOQ en 22 Agosto 2012, 16:53 pm Hola me piden el siguiente programa:Cree un programa en el que la función principal reciba dos parámetros, el primero numérico y el segundo una cadena de texto. Compruebe que son correctos, y si no lo son muestre un mensaje por pantalla indicando la sintaxis del programa.
He hecho esto, pero no se seguir, ¿podeis ayudarme por favor? Código
muchas gracias Título: Re: funcion recibe dos parametros Publicado por: 0xDani en 22 Agosto 2012, 18:30 pm No, eso no va asi, te dejo un ejemplo:
Código
Saludos. PD: Veo que has dejado de incluir conio.h en vano, bien hecho ;) Título: Re: funcion recibe dos parametros Publicado por: durasno en 23 Agosto 2012, 06:09 am Hola! Te voy a decir algo y espero no te lo tomes mal: una cosa es no entender un tema nuevo como el uso de los argumentos del main(que es lo que estas viendo ahora), pero otra cosa es avanzar con mas temas cuando aun no tenes claro lo basico. Creo que ya te marque en otro post ¿por que usas "*" delante del nombre de un arreglo? ¿seguro que entendes como usar bien los arreglos?. Tambien me sorprendio que hagas:
Código no encuentro sentido lo que quisiste hacer y tampoco creo que lo hayas analizado mucho: ¿por que el if dentro del for?... Te recomendaria que sigas practicando con lo basico antes de avanzar con mas temas Saludos Título: Re: funcion recibe dos parametros Publicado por: Fire544 en 24 Agosto 2012, 17:11 pm Hola ALONSOQ . Mira nunca debes pasar argumentos a una funcion con * es recomendable con [] y &, eso depende de los argumentos definidos en las definiciones de las funciones. Si quieres resolver tu problema tendrias que solamente verificar los argumentos pasados a tu codigo y no esperar datos de entradas.
Nota: Aun no se sabe el tipo de verificacion que se quiere, si es que tiene que haber obligatoriamente un argumento numerico o si solo se quiere salida por pantalla del numero de argumentos, bueno esto como quiera te servira !! Mira te dejo un ejemplo que creo que tambien soluciona tu inquietud: Código
Tambien podrias verificar los argc y si son <= a 2 entonces no serian correctos los argumentos y tambien pudieras tener una bunea solucion, pero expongo el codigo de arriba para que tengas una idea de los argv[] pasados a una funcion principal. Suerte !! ALONSOQ :xD Título: Re: funcion recibe dos parametros Publicado por: ALONSOQ en 26 Agosto 2012, 20:15 pm Hola ALONSOQ . Mira nunca debes pasar argumentos a una funcion con * es recomendable con [] y &, eso depende de los argumentos definidos en las definiciones de las funciones. Si quieres resolver tu problema tendrias que solamente verificar los argumentos pasados a tu codigo y no esperar datos de entradas. Nota: Aun no se sabe el tipo de verificacion que se quiere, si es que tiene que haber obligatoriamente un argumento numerico o si solo se quiere salida por pantalla del numero de argumentos, bueno esto como quiera te servira !! Mira te dejo un ejemplo que creo que tambien soluciona tu inquietud: Código
Tambien podrias verificar los argc y si son <= a 2 entonces no serian correctos los argumentos y tambien pudieras tener una bunea solucion, pero expongo el codigo de arriba para que tengas una idea de los argv[] pasados a una funcion principal. Suerte !! ALONSOQ :xD Muchas gracias fire 544 por tu respuesta, entiendo tu explicación y te la agradezco; y entiendo que en el bucle se requiere que las posiciones 1 y 2 del vector no estén vacías; pero lo que no se es indicarle al codigo que la primera sea un valor numérico y la segunda una cadena de texto ¿ puedes ayudarme con esto? gracias Título: Re: funcion recibe dos parametros Publicado por: Fire544 en 26 Agosto 2012, 20:30 pm Mira ALONSOQ puedes optar por concatenar los elementos de argv[] a variables chars de cualquier tamaño y luego verificar que cada posicion de este vector este en un rango de 65 >= 97 que son las posiciones del alfabeto en la tabla ASCII !!!
Mira algo como esto !!! Código
A si puedes hacer con la posicion 2 de argv[] y listo, no he probado el codigo pero creo que no tendras problemas !! Título: Re: funcion recibe dos parametros Publicado por: ALONSOQ en 29 Agosto 2012, 17:19 pm Vale, ya lo he entendido, los argumentos al programa se le pasan a traves del compilador dengtro del propio menu ejecutar/parametros ejemplo: 2 hola
argv[1] 2 argv[2] hola El codigo es este: Código
ahora solo faltaría que el programa verifique que el primer argumento es un numero, y el segundo una cadena ¿ alguna ayuda con esto? gracias Título: Re: funcion recibe dos parametros Publicado por: avesudra en 29 Agosto 2012, 17:30 pm ahora solo faltaría que el programa verifique que el primer argumento es un numero, y el segundo una cadena ¿ alguna ayuda con esto? gracias Código En C: Código En realidad con la función verificaSiEsNumero te vale (con la otra no), pero bueno. Esta tabla te ayudará a entender el código , si no lo entiendes dilo :) (http://www.asciitable.com/index/asciifull.gif) ¡Un saludo! Título: Re: funcion recibe dos parametros Publicado por: Fire544 en 29 Agosto 2012, 22:43 pm Vale, ya lo he entendido, los argumentos al programa se le pasan a traves del compilador dengtro del propio menu ejecutar/parametros ejemplo: 2 hola argv[1] 2 argv[2] hola El codigo es este: Código
ahora solo faltaría que el programa verifique que el primer argumento es un numero, y el segundo una cadena ¿ alguna ayuda con esto? gracias Para la proxima trata de leer bien las respuestas, en la primera respuesta que te doy, puedes hacer mucho con lo que te paso, pero no importa como quiera te paso algo mas correcto y mas entendible !!!. Aqui tienes una solucion correcta y factible mira, si no comprendes algo postea, pero fijate con el mismo procedimiento (subrutina/funcion) evaluo los dos casos !! Código
Listo espero que tengas Suerte !! ;-) Título: Re: funcion recibe dos parametros Publicado por: ALONSOQ en 31 Agosto 2012, 18:13 pm Estimado Fire,
finalmente a partir de lo que me has ayudado he redactado este código, que creo que funciona perfectamente. Una duda, probablemente por el bloqueo que tengo con tanto codigo; ¿ como recorre la cadena de letras y numeros que introduzco como argumentos 1 y 2 para leerleos. Porque con la función verificacadena, si no he entendido mal es para recorrer el argv? Muchíisimas gracias de nuevo un saludo Código
Título: Re: funcion recibe dos parametros Publicado por: avesudra en 31 Agosto 2012, 20:16 pm Fire544: en la función verifica cadena tuya no recorres la cadena, por lo que no sirve(según creo yo pues si el usuario mete una cadena alfanumérica ¿como la tratarías?) , además tienes un pequeño error en el if pues el operador lógico and no es & , si no &&.Por lo demás bien.
ALONSOQ:, tu función verificaCadena también tiene un error (en mi opinión)pues solo comprobais (los dos tú y Fire) el primer carácter y dependiendo de que sea retornais , que en principio está bien , pero si el usuario mete aaaa1452345 por ejemplo ¿se tomaría como cadena o como número? Arriba dejé unas funciones no sé si las habréis visto. Título: Re: funcion recibe dos parametros Publicado por: ALONSOQ en 31 Agosto 2012, 21:40 pm Fire544: en la función verifica cadena tuya no recorres la cadena, por lo que no sirve(según creo yo pues si el usuario mete una cadena alfanumérica ¿como la tratarías?) , además tienes un pequeño error en el if pues el operador lógico and no es & , si no &&.Por lo demás bien. ALONSOQ:, tu función verificaCadena también tiene un error (en mi opinión)pues solo comprobais (los dos tú y Fire) el primer carácter y dependiendo de que sea retornais , que en principio está bien , pero si el usuario mete aaaa1452345 por ejemplo ¿se tomaría como cadena o como número? Arriba dejé unas funciones no sé si las habréis visto. Gracias Avesudra por tu aportación; Por seguir ya en el mismo código que he enviado si en la cadena , en lugar de poner del 1 al 3, ponemos por ejemplo del 0 al 100, es decir Código
comprobaría los 100 primeros caracteres y entonces estaría bien, ¿ no es así? gracias Título: Re: funcion recibe dos parametros Publicado por: avesudra en 31 Agosto 2012, 21:51 pm comprobaría los 100 primeros caracteres y entonces estaría bien, ¿ no es así? Ese código está un poco mal.gracias
Así que esa función medianamente bien sería así si quieres hacerlo por fuerza sin punteros , tienes que pasarle el largo que tiene , porque si nó da un SEGMENTATION_FAULT como una casa( si quieres mirarlo pruébalo). Código ¡Un saludo! Título: Re: funcion recibe dos parametros Publicado por: ALONSOQ en 1 Septiembre 2012, 00:16 am Creo queme estoy haciendo un lío;
Entiendo que la función verificacadena, en la funcíón principal, analiza argv[1] y argv[2], sin embargo parece que no recorre todo el contenido, es decir tengo la duda de como recorre todos los caracteres de ambas posiciones para determinar si es número o cadena. en tu código entiendo avesudra que recorres toda la cadena, creo que lo que haces, dentro del bucle for, lo podríamos arreglar tambien con strlen(cadena). Lo que sí he comprobado es que si el en el segundo argumento introducimos a2 (habiendo introducido en el primero un número), devuelve que es correcto, cuando no debería. Avesudra ¿ como integrarías tu funcíon dentro del código que tengo hecho? te importaría incluirla? saludos saludos Título: Re: funcion recibe dos parametros Publicado por: avesudra en 1 Septiembre 2012, 01:29 am Creo queme estoy haciendo un lío; Por los líos no te preocupes , tranquilo que se resuelve todo :D , claro exactamente puedes usar strlen pero como se te vé verde no te he dicho nada de eso.Te integro mi función en tu codigo :Entiendo que la función verificacadena, en la funcíón principal, analiza argv[1] y argv[2], sin embargo parece que no recorre todo el contenido, es decir tengo la duda de como recorre todos los caracteres de ambas posiciones para determinar si es número o cadena. en tu código entiendo avesudra que recorres toda la cadena, creo que lo que haces, dentro del bucle for, lo podríamos arreglar tambien con strlen(cadena). Lo que sí he comprobado es que si el en el segundo argumento introducimos a2 (habiendo introducido en el primero un número), devuelve que es correcto, cuando no debería. Avesudra ¿ como integrarías tu funcíon dentro del código que tengo hecho? te importaría incluirla? saludos saludos Código
Título: Re: funcion recibe dos parametros Publicado por: ALONSOQ en 1 Septiembre 2012, 10:37 am Avesudra, el programa funciona perfectamente, pero hay que modificar una pequeña cosa para que de el resultado buscado, porque si no mantiene el error de 2 c2 correctos.
En verificaSi es Numero: i Código
Muchas gracias por tu aportación Título: Re: funcion recibe dos parametros Publicado por: avesudra en 1 Septiembre 2012, 16:06 pm Está igual ¿no? Lo único es que ahora retorna al revés :xD
Título: Re: funcion recibe dos parametros Publicado por: Fire544 en 2 Septiembre 2012, 17:32 pm Avesudra: Claro tienes razon, pero fijate en el siguiente post, donde recorro todos los elementos, de un array que ya he concatenado. Y no estas correcto cuando dices que no recorro los argv[]; ten en cuenta que estas accediendo a punteros de caracteres no a caracteres en un array de chars, pero como quiera fijate donde hago referencia a lo que dices.
Mira ALONSOQ puedes optar por concatenar los elementos de argv[] a variables chars de cualquier tamaño y luego verificar que cada posicion de este vector este en un rango de 65 >= 97 que son las posiciones del alfabeto en la tabla ASCII !!! Mira algo como esto !!! Código
A si puedes hacer con la posicion 2 de argv[] y listo, no he probado el codigo pero creo que no tendras problemas !! Suerte !! :xD Título: Re: funcion recibe dos parametros Publicado por: xiruko en 2 Septiembre 2012, 17:56 pm dejo aqui mi pequeño aporte por si sirve de ayuda. solo verifica que el primer argumento sea un numero, ya que el segundo al ser cualquier cadena esta tambien puede contener numeros o ser todo numeros no? si no es asi, y el segundo parametro tiene que contener solo las letras del abecedario dimelo y modificare el codigo en un momento.
Código
Citar Entrada: ./main 123a Salida: Numero de parametros incorrecto. Entrada: ./main 123a hola Salida: Primer parametro no es un numero. Entrada: ./main 123 hola Salida: Parametros correctos. un saludo! |