SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: y0mism0 en Domingo 26 de Noviembre de 2006, 04:29

Título: Varias Preguntas
Publicado por: y0mism0 en Domingo 26 de Noviembre de 2006, 04:29
HOla!

1. En primer lugar tengo una duda con los arrays. Porque no se puede poner esto
"int cad[]={1}" y si esto "int cad{1, 7}" ? (el primero es un vector y el segundo una matriz).
Cuando hay que asiganarle una cantidad de memoria fija a los arrays y cuando no hace falta, por ej cad[10]??? cuando puedes hacer esto "cad[]" o "cad[][]"??

2. porque no puedes hacer esto:?
#define MAX 5
typedef int a[MAX];
int a[MAX];
if(2<MAX)

Por ej, ninguna de estas 3 intrucciones me funciona, el compilador me dice que esta "missing..". No lo entiendo, si se supone q el preprocesador sustitye los el valor de MAX por 5 en todas las intrucciones.

Lo mismo, porque esto no me imprime 8?
#define HOLA 8
printf("HOLA");
porque esto si:
printf("%s",HOLA);

4. que quiere decir el compilador cuando te da un error de "Lvalue"?

Saludos.
Título: Re: Varias Preguntas
Publicado por: Eternal Idol en Domingo 26 de Noviembre de 2006, 10:27
Cita de: "y0mism0"
1. En primer lugar tengo una duda con los arrays. Porque no se puede poner esto
"int cad[]={1}" y si esto "int cad{1, 7}" ? (el primero es un vector y el segundo una matriz).

Lo primero si funciona; lo segundo no tiene sentido y parece al compilador la definicion de una funcion.

Cita de: "y0mism0"
2. porque no puedes hacer esto:?
#define MAX 5
typedef int a[MAX];
int a[MAX];
if(2<MAX)

Estas volviendo a definir a ... a es un tipo y estas tratando de definir una variable con ese tipo. Es como si hicieras int int ... y te falta el codigo para la comprobacion. Si cambias int a[MAX] por otra cosa que no sea a funciona perfectamente.

Cita de: "y0mism0"
Lo mismo, porque esto no me imprime 8?
#define HOLA 8
printf("HOLA");
porque esto si:
printf("%s",HOLA);

El texto entrecomillado no es reemplazado por el preprocesador. Entonces "HOLA" sigue siendo "HOLA".

Cita de: "y0mism0"
4. que quiere decir el compilador cuando te da un error de "Lvalue"?

Tendrias que poner exactamente cual es el error (si es el output del compilador mucho mejor).

http://en.wikipedia.org/wiki/Lvalue (http://en.wikipedia.org/wiki/Lvalue)
Título: Re: Varias Preguntas
Publicado por: Geo en Domingo 26 de Noviembre de 2006, 16:55
Cita de: "y0mism0"
HOla!

1. En primer lugar tengo una duda con los arrays. Porque no se puede poner esto
"int cad[]={1}" y si esto "int cad{1, 7}" ? (el primero es un vector y el segundo una matriz).
Tal como dice Eternal, lo primero debe funcionar.

Cita de: "y0mism0"
Cuando hay que asiganarle una cantidad de memoria fija a los arrays y cuando no hace falta, por ej cad[10]??? cuando puedes hacer esto "cad[]" o "cad[][]"??
Si no sabes de antemano cuántos elementos vas a necesitar en el array, lo mejor es no declarar su tamaño y manipularlo dinámicamente en el programa. Si estás seguro de que tendrás como máximo N elementos en el array, y van a estar presentes durante la mayor parte de la ejecución del programa, entonces es conveniente definir el tamaño de manera "fija" (estáticamente).

Cita de: "y0mism0"
4. que quiere decir el compilador cuando te da un error de "Lvalue"?
Normalmente se deberá a que estás intentando modificar el valor de algún elemento que no puede ser modificado, aunque mejor hazle caso a Eternal y coloca la salida de error del compilador).

Saludos,
JJ (Geo).
Título: Re: Varias Preguntas
Publicado por: y0mism0 en Lunes 27 de Noviembre de 2006, 01:33
Respecto a la pregunta 1, la escribi mal. Queria decir, que por que se puede poner esto: "int cad[]={1}" o esto "int cad[]"  y no esto "int cad[][]" o esto "int cad[][]={1,2}" ?
Por eso preguntaba tambien, que cuando se pueden dejar los arrays sin poner el tamaño completo, y cuando no. En este caso si pongo "int cad [8][8]", si me funciona. Si lo dejo como lo puse, el compilador me marca este error "Size of the type is unknown or zero"...

Eternal Idol, no entiendo lo que me dijiste de que me falta el codigo para la comprobación.

Otra pregunta, porque no me deja poner "cad[j]=i^2" y si "cad[j]=i*i;" ?? Como esque el compilador no reconoce el caracter ^ de elevado?

Saludos.
Título: Re: Varias Preguntas
Publicado por: Geo en Lunes 27 de Noviembre de 2006, 02:23
Cita de: "y0mism0"
Respecto a la pregunta 1, la escribi mal. Queria decir, que por que se puede poner esto: "int cad[]={1}" o esto "int cad[]"  y no esto "int cad[][]" o esto "int cad[][]={1,2}" ?
Por eso preguntaba tambien, que cuando se pueden dejar los arrays sin poner el tamaño completo, y cuando no. En este caso si pongo "int cad [8][8]", si me funciona. Si lo dejo como lo puse, el compilador me marca este error "Size of the type is unknown or zero"...
El tamaño del primer subíndice no es necesario, pero si todos los subsecuentes, por ejemplo, esto si lo puedes hacer:
Código: Text
  1.  
  2. int cad1[ ][ 10 ] = { 0... };
  3. int cad2[ ][ 5 ][ 5 ] = { 1, ... };
  4.  
  5.  

Cita de: "y0mism0"
Otra pregunta, porque no me deja poner "cad[j]=i^2" y si "cad[j]=i*i;" ?? Como esque el compilador no reconoce el caracter ^ de elevado?
Mmmh, aquí hay doble confusión. El compilador no debiera dar problemas para compilar eso, ¿qué error te da?. Y por otro lado en C/C++ no existe ningún operador para elevar un número a alguna potencia, ^ es el operador xor :P.

Saludos,
JJ (Geo).
Título: Re: Varias Preguntas
Publicado por: y0mism0 en Lunes 27 de Noviembre de 2006, 03:42
ok.
Mira este programa:

#include<stdio.h>
#include<conio.h>
void main()
{
int a[]; //"Error: Size of a in unknown or zero"
int i;
for(i=0;i<10;i++)
a=i*2;
printf("%d",a);
}
POrque me da este error??


Otra cosa, alguna explicacion para que este programa me ejecute una instruccion no permitida y se me cierre?

#include<stdio.h>
void main()
{
int cad[10][10];
int i,j;
for(i=0;i<10;i++)
{

   for (j=0;j<10;j++)
   {
      scanf("%d",cad[1][1]);

}}}



Respecto a lo del ^, no me da ningun error, simplemente me devuelve unos valores distintos de si pongo i*i...  ^ es el operador de xor?? se puede utilizar en sentecias logicas dentro de if por ej??



Ah, y una ultima cosa, como podria hacer un programa que lea un entero de n cifras, y almacene sus cifras en un arreglo de n dimensiones? Lo estaba pensando hacer con divisiones entre 10 y conversiones de tipo para truncar, pero no me sale, alguna idea para aislar cada cifra y meterla en un array?



Saludos.
Título: Re: Varias Preguntas
Publicado por: Eternal Idol en Lunes 27 de Noviembre de 2006, 08:15
Cita de: "y0mism0"
Eternal Idol, no entiendo lo que me dijiste de que me falta el codigo para la comprobación.
Código: Text
  1.  
  2. if(2&#60;MAX)
  3.  
  4.  

Teniendo solo ese codigo, sin completar el compilador da error.