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

#1501
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:
0 <= a <= 9
No es valido en C, en este debes comparar con cada limite utilizando el operador lógico AND de esta forma:
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:
int pot(int base, int exp)
{
   if (exp > 0)
      return base * pot(base, exp - 1);
   else
      return 1;
}


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

Toma eso como un empujón, suerte.

Un saludo
#1502
Cuando se declara una funcion en la forma:
int fn(char a[]) ...

/* O tambien */
int fn(char a[N]) ...


En realidad se procesa como:
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
Utiliza el comando:
Código (cpp) [Seleccionar]
system("start C:\\windows\\notepad.exe");

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

Un saludo
#1504
Segun los dos enunciados no pueden utilizarse arrays.

Un saludo
#1505
Cita de: ghastlyX en 13 Septiembre 2011, 15:07 PMEl 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
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 C/C++ / Re: Programacion en C basico
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):
#include <stdio.h>
#include <string.h>

int main(void)
{
   char n[10];
   int i;
   
   printf("Ingresar Digitos\n");
   scanf("%s", n);
   
   for (i = 0; n[i] == '0' + (i % 2); i++)
      ;
   if (n[i] == '\0' && i % 2 == 0)
      puts("Cadena valida\n");
   else
      puts("Cadena NO valida\n");
     
   return 0;
   
}


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 C/C++ / Re: Programacion en C basico
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:
char cad[ALGUN_VALOR];
int i;

/* Se lee la cadena almacenando esta en "cad" */

for (i = 0; cad[i] == '0' + (i % 2); i++)
   ;
if (cad[i] == '\0')
   puts("Cadena valida");
else
   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 C/C++ / Re: Programacion en C basico
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:
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
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):
a = (fil[1] / totalc);
/* ... */
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:
a = (double) fil[1] / totalc;
/* ... */
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