elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 ... 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 [151] 152 153 154 155 156 157 158 159 160
1501  Programación / Programación C/C++ / Re: Problemas con una funcion en c en: 18 Septiembre 2011, 18:02 pm
Si eres un principiante no deberías depurar un programa ya que esa aplicación te indicara donde se genera un error pero NO el porque de este.

Tienes que darle un buen repaso a tu material de referencia ya que hay errores de concepto, si no tienes un libro de calidad revisa los temas fijos del foro.

Lo usual en matemáticas para un rango:
Código:
0 <= a <= 9
No es valido en C, en este debes comparar con cada limite utilizando el operador lógico AND de esta forma:
Código:
0 <= (numero - 48) && (numero - 48) <= 9

La sentencia de retorno no es una llamada a función, no necesitas los paréntesis en cada "return N;".

La función de potencia no la utilizas y esta mal diseñada (verifica que pasa si el exponente es cero) debería ser:
Código
  1. int pot(int base, int exp)
  2. {
  3.   if (exp > 0)
  4.      return base * pot(base, exp - 1);
  5.   else
  6.      return 1;
  7. }

Todas las comparaciones en la forma:
Código
  1. if (0 <= (numero - 48) <= 9)
Hay que cambiarlas por:
Código
  1. if (numero >= '0' && numero <= '9')

Toma eso como un empujón, suerte.

Un saludo
1502  Programación / Programación C/C++ / Re: Ayuda con tablas bidimensionales! en: 15 Septiembre 2011, 14:52 pm
Cuando se declara una funcion en la forma:
Código
  1. int fn(char a[]) ...
  2.  
  3. /* O tambien */
  4. int fn(char a[N]) ...

En realidad se procesa como:
Código
  1. int fn(char *a) ...

Es por ello que indicar el numero de elementos en el array (el parametro "a") no es necesario.

Un saludo
1503  Programación / Programación C/C++ / Re: Ejecutar funcion System() sin retorno en: 15 Septiembre 2011, 14:47 pm
Utiliza el comando:
Código
  1. system("start C:\\windows\\notepad.exe");

Antes de utilizar esa funcion debes incluir el encabezado <cstdlib>.

Un saludo
1504  Programación / Programación C/C++ / Re: Un desafío para los interesados en: 14 Septiembre 2011, 01:34 am
Segun los dos enunciados no pueden utilizarse arrays.

Un saludo
1505  Programación / Programación C/C++ / Re: Un desafío para los interesados en: 13 Septiembre 2011, 20:56 pm
El rango es totalmente intencionado, lo he puesto precisamente para que no coja en las variables numéricas primitivas. Ahí está la gracia del problema.
OK.

Un detalle es, al no haber limites, se estaria tratando no con un numero sino una secuencia de caracteres (solucion recursiva).

Un saludo
1506  Programación / Programación C/C++ / Re: Un desafío para los interesados en: 13 Septiembre 2011, 15:04 pm
Un problema con un valor como ese (diez a la cien) es el rango. Seria mejor utilizar [0, ULONG_MAX] (hay que incluir <limits.h>) y de esa forma se mantiene dentro del estándar de C (C90).

Un saludo
1507  Programación / Programación C/C++ / Re: Programacion en C basico en: 13 Septiembre 2011, 14:56 pm
No debes utilizar "%c" en la llamada a scanf ya que esta lee un solo carácter, en su lugar debes utilizar "%s" para leer una palabra. Y hay que eliminar el operador "dirección de" (el '&') ya que no es necesario cuando se trata de un array.

En la declaración del array su inicialización esta mal y no es necesaria (scanf no permite una validación rigurosa, en el mejor de los casos se debe comprobar su valor de retorno). El primer condicional "if" esta mal al comparar "n" cuando debería ser "n[ i ]". También el for esta mal.

Hay que agregar la comprobación para verificar que el numero de caracteres en la palabra sea par.


Y no debes incluir el encabezado <string.h>, de nuevo consigue un buen libro.

Con las correcciones (colocaría solo un fragmento pero se tiene que corregir casi todo):
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char n[10];
  7.   int i;
  8.  
  9.   printf("Ingresar Digitos\n");
  10.   scanf("%s", n);
  11.  
  12.   for (i = 0; n[i] == '0' + (i % 2); i++)
  13.      ;
  14.   if (n[i] == '\0' && i % 2 == 0)
  15.      puts("Cadena valida\n");
  16.   else
  17.      puts("Cadena NO valida\n");
  18.  
  19.   return 0;
  20.  
  21. }

En cuanto a Dev-C++ lo mejor es cambiar a otro entorno (no recuerdo uno (salvo ese) que no soporte la generacion de la pausa de forma automatica).

Un saludo
1508  Programación / Programación C/C++ / Re: Programacion en C basico en: 13 Septiembre 2011, 05:42 am
En ese caso debes leer la entrada como cadena y comparar los caracteres pares contra '0' y los impares contra '1'.

Mas o menos asi:
Código
  1. char cad[ALGUN_VALOR];
  2. int i;
  3.  
  4. /* Se lee la cadena almacenando esta en "cad" */
  5.  
  6. for (i = 0; cad[i] == '0' + (i % 2); i++)
  7.   ;
  8. if (cad[i] == '\0')
  9.   puts("Cadena valida");
  10. else
  11.   puts("Cadena NO valida");

Muy limitado pero funciona. Una vez manejes mas del lenguaje la podrias mejorar (por ejemplo descartando el espacio blanco al principio de la cadena).

Un saludo
1509  Programación / Programación C/C++ / Re: Programacion en C basico en: 13 Septiembre 2011, 00:55 am
Revisa los temas fijos de este foro, descarga un buen libro de C y estudia este paso a paso.

Ello porque en el programa tienes muchos errores de concepto:

* Evita el uso de conio (no es necesario en tu programa) y define la función principal como "int main(void) ..." o "int main() ..." indicando su valor de retorno con al menos "return 0;".

* En C y C++ cuando se declara un array se indica su numero de elementos N y se accede a estos mediante los indices 0 a N-1. Tu iteras siete veces (de forma inocua) pero lo correcto, de nuevo, son seis.

* La llamada:
Código
  1. scanf ("%d",& R);
Técnicamente es correcta pero es un error lógico ya que solo lees el valor del primer elemento del array (deberia ser "&R[ i ]" o su equivalente "R + i").

* Después comparas "R" contra diversos valores lo cual no es correcto ya que "R" en el contexto en que se utiliza resulta en la dirección en memoria del array, deberías utilizar "R[ i ]".


Finalmente no puedes utilizar scanf y similares para leer números en base 2, en su lugar utiliza fgets para leer una linea de texto y strtol para obtener el numero.

Un saludo
1510  Programación / Programación C/C++ / Re: ayuda en operacion con matriz en: 12 Septiembre 2011, 00:39 am
Si necesitas ayuda empieza dando todas las facilidades para que eso sea posible publicando el programa completo y utilizando las etiquetas "code" para visualizar correctamente el código fuente.

Un error en tu programa es realizar divisiones entre valores enteros (tipo int):
Código
  1. a = (fil[1] / totalc);
  2. /* ... */
  3. P = ( (matris[1][1]) / (totalc) );
En ambos casos si el primer operando de la división es menor que el segundo el resultado sera cero. Para evitarlo debes convertir uno de ellos al tipo "double", por ejemplo:
Código
  1. a = (double) fil[1] / totalc;
  2. /* ... */
  3. P = (double) matris[1][1] / totalc;

Y no necesitas de las variables "a" y "P", puedes colocar la expresión (la división) como argumento de la función "printf". Por ultimo el especificador de formato para el tipo "double" es "%f" (utilizas "%lf" en la primera llamada).

Un saludo
Páginas: 1 ... 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 [151] 152 153 154 155 156 157 158 159 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines