Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#1071
Programación C/C++ / Re: ayuda en C
28 Noviembre 2012, 16:59 PM
Cita de: howaboutno en 28 Noviembre 2012, 16:29 PMsolo me tiene que comparar la ultima jugada de la matriz, a eso lo de jugada[t+9]
Con esto:
char ganadoras[11][3]={"333","444","555","666","222","111","336","446","556","331","332"};
Declaras un array de 11 elementos y cada uno es un array de 3 elementos de tipo char. El punto importante es: como cada elemento no tiene capacidad para el '\0' este se descarta, son secuencias de caracteres (no son cadenas) y por ello no puedes utilizar funciones para el manejo de cadenas que requieran del '\0' como strcmp.

Como realizar la comparación depende del tipo de la variable "jugada". Si el tipo es el mismo puedes utilizar "strncmp" o "memcmp" para comparar los primeros tres elementos (caracteres).

Para evitar adivinanzas mejor coloca la declaración de las variables que intentas comparar.

Un saludo
#1072
Programación C/C++ / Re: Duda de principiante
28 Noviembre 2012, 16:10 PM
Cita de: ZombieKiller96 en 28 Noviembre 2012, 15:34 PMen mis compiladores que utilizo no me permite, sino que tengo que agregarle
Código (cpp) [Seleccionar]
using namespace std; , por que es eso?
No debería.

Cuando utilizas la biblioteca estándar de C++ e incluyes alguna facilidad de esta, por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
Todos los nombres se colocan en el nombres de espacios estándar "std". Eso para evitar un conflicto con los objetos que tu declaras en el programa.

Para acceder a ellos (los de la biblioteca estándar) hay tres formas:

1) Indicando de forma explicita el nombre de espacios donde se encuentran con el operador de ámbito "::", por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>

int main()
{
   std::cout << "hola, mundo" << std::endl;
   
   return 0;
}


2) Agregando todo el contenido del nombre de espacios "std" al nombre de espacios global:
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
   cout << "hola, mundo" << endl;
   
   return 0;
}


3) Agregando solo lo necesario al nombre de espacios global con una sentencia "using", por ejemplo:
Código (cpp) [Seleccionar]

#include <iostream>
using std::cout;
using std::endl;

int main()
{
   cout << "hola, mundo" << endl;
   
   return 0;
}


Cita de: ZombieKiller96 en 28 Noviembre 2012, 15:34 PMy cuando se tiene que usar o no el endl ?
Si apenas empiezas asegúrate que cada linea que envíes a la salida estándar termine con el carácter de avance de linea. Las razones (bufer de la salida estándar y cuando este se vacía explicita o implícitamente) supongo lo veras mas adelante.

Cita de: ZombieKiller96 en 28 Noviembre 2012, 15:34 PMy la librería <stdlib.h> es lo mismo poner <cstdlib> ?
No. El nombre correcto en C++ es <cstdlib>.

Un saludo
#1073
Programación C/C++ / Re: Iniciandome en C
23 Noviembre 2012, 15:43 PM
Cita de: hlastras en 18 Noviembre 2012, 17:13 PM
En este mismo programa, hay que introducir un texto que se desconoce su longitud, puede ser 10 o 1000. Como puedo hacer que reserve la memoria necesaria, segun lo que introduces.
Primero reservas un bloque de memoria mediante la función malloc, si este se llena incrementas la capacidad con la función realloc (Prototipos de ambas en <stdlib.h>).

Cita de: hlastras en 18 Noviembre 2012, 17:13 PMSe puede programar un entorno grafico, asi con ventanas de windows y tal de una manera "sencilla" en C? porque siempre que busco algo sobre esto siempre me sale c++
Si apenas estas empezando en C seria mejor que dejaras el desarrollo de aplicaciones de ventana para mas adelante. O puedes revisar los temas relacionados mediante el motor de búsqueda de los foros.

Un saludo
#1074
Programación C/C++ / Re: ¿cual es el error?
23 Noviembre 2012, 15:13 PM
Cita de: asdavid en 23 Noviembre 2012, 10:54 AM
ahora me da error en la linea del main en la que llamo a la funcion:
""validar_nombre(cnombre[6]);""
invalid conversion from `char' to `char*'
El error se emite porque "cnombre[6]" es un elemento del array y es de tipo "char". Tu debes pasar la dirección en memoria del primer elemento del array, para ello basta con utilizar solo su nombre en la llamada:
validar_nombre(cnombre);
Y la próxima vez que actualices un programa y continúes con errores por favor publica su código fuente.

Un saludo
#1075
Programación C/C++ / Re: Duda Arboles - C
23 Noviembre 2012, 02:05 AM
Cita de: Jupiter34 en  9 Noviembre 2012, 23:20 PM
//Cuenta nodos impares
int contarImp(treenode *hoja,int imp){

    if (hoja!=NULL)
    {
        if(hoja->dato%2!=0)
        {
        imp++;
        }
        return contarImp(hoja->izq,imp);
        return contarImp(hoja->der,imp);
    }
    return imp;
}


Y el dato importante..en la llamada...

impar=contarImp(arb,imp+1);
No, no funciona. Imagina por un momento que se pasa un árbol vació, en ese caso la función termina de inmediato y debe reportar cero números impares.

Otro error en la función es tener dos sentencias de retorno dentro del condicional "if", una a continuación de la otra:
return contarImp(hoja->izq,imp);
return contarImp(hoja->der,imp); /* <== Nunca se ejecuta */


Para contar el numero de valores impares puedes utilizar, por ejemplo:
int contarImp(treenode *p)
{
   return p == NULL ? 0 : p->dato % 2 + contarImp(p->izq) + contarImp(p->der);
}


Un saludo
#1076
Programación C/C++ / Re: ¿cual es el error?
22 Noviembre 2012, 16:54 PM
Cita de: asdavid en 22 Noviembre 2012, 12:51 PMestoy intentando pasar una cadena de caracteres o array,desde una estructura a una función
La función no se distingue de cualquier otra que deba procesar una cadena almacenada en un array de caracteres (el primero es el contenido, el segundo el contenedor).

Tu función:
validar_nombre(i.nombre)
{
   printf("1");
   return;
}

Tiene varios errores como no indicar el tipo de retorno, no indicar el tipo del parámetro y omitir el valor de retorno de la función.

La definición debería ser:
int validar_nombre(char nombre[])
{
   /* Alguna operacion, por ejemplo: */
   printf("%s\n", nombre);
   
   return 1; /* O algun otro valor apropiado para el caso*/
}


Un saludo
#1077
Dos comentarios en relación al programa de Oblivi0n:

1) El lenguaje C no permite la anidación de funciones, esta es una extensión. Uno de los compiladores que la soportan es, si recuerdo correctamente, GCC. Para solucionarlo basta con sacar a "printNumbers" e "isInRange" de la función "main".

2) Los operadores lógicos y de comparación resultan en el valor uno si se cumple la condición y cero en caso contrario. En base a ello se puede reducir la función que comprueba el rango (también hay que sustituir el operador lógico OR por AND):
int isInRange(int num, int min, int max)
{
   return num >= min && num <= max;
}


Un saludo
#1078
Cita de: eaguel en 21 Noviembre 2012, 10:45 AM
El problema esta en que no puedo usar la librería libreria math.h
sino que tengo que usar el archivo .h que me dan que contiene:
#ifndef POTENCIA_H
#define POTENCIA_H

/*Textos a utilizar en la funcion printf*/
#define T_BASE              "BASE:\n"
#define T_EXPONENTE         "EXPONENTE:\n"
#define T_RESULTADO         "%d elevado a %d es %d\n"
...
Honestamente como ejemplo del uso de macros en C es, de parte de tu profesor, uno muy malo.

El objetivo de las macros es hacer el código fuente mas claro y fácil de seguir y, por ello, menos propenso a los errores. Considerando eso ultimo si comparamos:
printf(T_RESULTADO, a, b, c);

printf("%d elevado a %d es %d\n", a, b, c);

Resulta obvio que es mas difícil detectar errores en la llamada que utiliza la macro "T_RESULTADO" que en la que utiliza la literal.

Cita de: eaguel en 21 Noviembre 2012, 12:58 PMEl problema esta en que solo realiza printf y scanf todo el rato , para solucionarlo ¿podría introducir un blucle do-while no?
Correcto, debes cambiar el proceso de uno recursivo a uno iterativo. También hay que cambiar la función eliminando los parámetros y cambiando su tipo de retorno a "void".

El programa con las correcciones:
#include <stdio.h>

void potencia(void);

int main(void)
{
  potencia();
 
  return 0;
}

void potencia(void)
{
  int x;
  int y;
  long pot;
 
  puts("Indica la base:");
  scanf("%d", &x);
 
  puts("Indica el exponente:");
  scanf("%d", &y);
 
  printf("%d^^%d", x, y);
  pot = 1;
  while (y-- > 0)
     pot *= x;
  printf(" == %d\n", pot);
}


Edito: el uso de las macros te toca a ti. En buen plan: yo no las toco ni con un palito.

Un saludo
#1079
Programación C/C++ / Re: ayuda en c
21 Noviembre 2012, 19:36 PM
Cita de: howaboutno en 21 Noviembre 2012, 16:47 PMpara contar el numero de veces que se repite una palabra en una cadena como se haría? se que hay funciones para decirnos la posición, contar letras o numeros pero claro, esto ya sería una frase...todo introducido por teclado
Utilizando la función "strstr" (prototipo en <string.h>) mas aritmética de punteros.

Como la política de estos foros es no hacer tareas ajenas primero debes demostrar un esfuerzo significativo, en otras palabras publicar los avances que llevas.

Un saludo
#1080
Programación C/C++ / Re: Ayuda
21 Noviembre 2012, 19:26 PM
Cita de: Ferno en 21 Noviembre 2012, 06:10 AM
El problema evidente es que al asignar valores, no especificas cada posición del arreglo correctamente
Si lo hace pero al no utilizar la etiquetas de código (debería, supongo esta en las reglas de los foros) en su lugar aparece el texto en cursiva.

El porque no se ejecutan los bucle se debe a la condición e incremento de cada uno (estan al reves). Por ejemplo el ultimo:
for (i = 0; i++; i <= 9)
   printf ("%d \t", busqueda[i]);

Ello debido a que el resultado de la expresión "i++" es cero.

Debería ser:
for (i = 0; i <= 9; i++)
   printf ("%d \t", busqueda[i]);

Mismo caso con el otro bucle.

Un saludo