• Viernes 8 de Noviembre de 2024, 15:47

Autor Tema:  Problema Con Un Programa Muy Simple  (Leído 2303 veces)

mguerrerop

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Problema Con Un Programa Muy Simple
« en: Martes 22 de Abril de 2008, 20:05 »
0
Hola, necesito desesperadamente vuestra ayuda.
Se trata de un programa muy simple en C++, lo he revisado mil y una veces, y no veo el fallo. El caso es que creo un array bidimensional, y lo relleno, y al escribir la segunda fila, ésta sobreescribe la primera.
Os pongo el código, listo para pegar, compilar y ejecutar.


#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>


int main(){

int numvar=0; //número de variables del problema
int i,j,k; //variables auxiliares para bucles
int numrest=0; //numero de restricciones
float arrayrest[numrest][numvar]; //array de restricciones




do{
cout<<"Introduce el numero de variables:\n";
cin>>numvar;
}while(numvar<=0);
cout<<"\n";
cout<<"Introduce el numero de restricciones o ecuaciones:\n";
cin>>numrest;
for (i=0;i<numrest;i++){
cout<<"Introduccion de la restriccion ";
cout<<i+1;
cout<<":\n";
for (j=0;j<numvar;j++){
cout<<"Introduce el valor de la variable X";
cout<<j+1;
cout<<": ";
cin>>arrayrest[j];
}
}
for (i=0;i<numrest;i++){
cout<<"ATENCION !!!!\n";
cout<<"\nLa restricccion ";
cout<<i+1;
cout<<" es: \n";
for (j=0;j<numvar;j++){
if (arrayrest[j]<0){
cout<<"";
}
else {
cout<<"+";
}
cout<<arrayrest[j];
cout<<"X";
cout<<j+1;
}
cout<<"\n\n";
}
cout<<"La primera posicion del array bidimensional contiene: ";
cout<<arrayrest[0][0];



system ("PAUSE");
return (0);
}





Seguro que es una chorrada, pero estoy loco dándole vueltas y no veo el fallo.
Gracias por vuestra paciencia.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Un Programa Muy Simple
« Respuesta #1 en: Martes 22 de Abril de 2008, 20:20 »
0
Es verdad el codigo (no es standard por cierto) es una chorrada:

int numvar=0; //número de variables del problema
int i,j,k; //variables auxiliares para bucles
int numrest=0; //numero de restricciones
float arrayrest[numrest][numvar]; //array de restricciones

Esas variables siempre van a ser 0 ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Exodus_c217

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Problema Con Un Programa Muy Simple
« Respuesta #2 en: Miércoles 23 de Abril de 2008, 17:50 »
0
Primero que nada no se de donde sacaste esa función "do", el error radica en que para hacer un programa como ese tienes que usar dos ciclos "for" anidados, y tu los haces separados entonces viene el primero y escribe y luego el segundo lo sobre escribe, deberías de practicar mas tu sintaxis básica y no declarar tantas cabeceras para solo hacer un programa con una matriz, me imagino que tu compilador no es estándar o estas usando alguna versión de visual c++, bueno te dejo un ejemplo de como deberia ser tu codigo:

Código: Text
  1.  
  2. #include &#60;iostream&#62;
  3. using namespace std;
  4.  
  5. int main (){
  6.      cout &#60;&#60; &#34;introduzca el numero de variables:&#092;n&#34;;
  7.      cin &#62;&#62; numvar;
  8.      while (numvar&#62;=0){
  9.          cout&#60;&#60;&#34;Introduce el numero de restricciones o ecuaciones:&#092;n&#34;;
  10.          cin&#62;&#62;numrest;
  11.          for (i=0;i&#60;numrest;i++){
  12.              cout&#60;&#60;&#34;Introduccion de la restriccion &#34;;
  13.              cout&#60;&#60;i+1;
  14.              for (j=0;j&#60;numvar;j++){
  15.              cout&#60;&#60;&#34;Introduce el valor de la variable X&#34;;
  16.              cout&#60;&#60;j+1;
  17.              cin&#62;&#62;arrayrest[i][j];
  18.              }
  19.         }
  20.  
  21.  

Es solo para que te guies, no quiere decir que el programa este funcionando pero veras tus errores, primero tienes mas librerias de las que necesitas, segundo siempre debes respetar sangrias, porque si no c++ piensa que el otro ciclo for hay que ejecutarlo fuera del anterior, entonces te volveria a escribir i, bueno eso son algunos problemas, creo que tienes muchos mas, deberias de leer un buen curso de C++ como c con clase www.conclase.net/c/curso/index.php espero que te sirva, bye.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Un Programa Muy Simple
« Respuesta #3 en: Miércoles 23 de Abril de 2008, 18:02 »
0
Cita de: "Exodus_c217"
Primero que nada no se de donde sacaste esa función "do", el error radica en que para hacer un programa como ese tienes que usar dos ciclos "for" anidados

do/while es una estructura de repeticion basica del lenguaje C http://en.wikipedia.org/wiki/C_syntax#Iteration_statements ... yo personalmente prefiero usar for pero NO es necesario.

Cita de: "Exodus_c217"
segundo siempre debes respetar sangrias, porque si no c++ piensa que el otro ciclo for hay que ejecutarlo fuera del anterior, entonces te volveria a escribir i

No se de donde sacaste eso pero es totalmente erroneo, la sangria solo es para legibilidad, el compilador ignora los espacios.

"Unlike languages such as FORTRAN 77, C source code is free-form which allows arbitrary use of whitespace to format code, rather than column-based or text-line-based restrictions. Comments may appear either between the delimiters /* and */, or (in C99) following // until the end of the line."

http://en.wikipedia.org/wiki/C_language#Syntax

Cita de: "Exodus_c217"
me imagino que tu compilador no es estándar o estas usando alguna versión de visual c++, bueno te dejo un ejemplo de como deberia ser tu codigo

Seguro pero VC++ si lo es, eso de incluir iostream.h es tipico de Borland.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Exodus_c217

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Problema Con Un Programa Muy Simple
« Respuesta #4 en: Jueves 24 de Abril de 2008, 18:52 »
0
Bueno la funcion "do" se me fue un momento, pero eso si no creo que tenga mayor utilidad en el trabajo que esta haciendo, ahora con respecto a la sangría, creo que ya la programacion con Python me esta afectando con lo de las sangrias xD, visual C++ no es completamente estándar y para eso no hay que ser genio, no te respeta el ISO c++ v2.0 y me consta porque cuando quiero compilar un hola mundo en Visual C++ solo con la libreria iostream usando el namespace std me lanza errores.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Un Programa Muy Simple
« Respuesta #5 en: Jueves 24 de Abril de 2008, 19:15 »
0
Cita de: "Exodus_c217"
Bueno la funcion "do" se me fue un momento, pero eso si no creo que tenga mayor utilidad en el trabajo que esta haciendo, ahora con respecto a la sangría, el ciclo va dentro del otro ciclo y el esta cerrando el ciclo antes de iniciar el otro, o sea que si bien no reconoce los espacios si debería respetar las llaves, creo que ya la programacion con Python me esta afectando con lo de las sangrias xD, visual C++ no es completamente estandar y para eso no hay que ser genio, no te respeta el ISO c++ v2.0 y me consta porque cuando quiero compilar un hola mundo en Visual C++ solo con la libreria iostream usando el namespace std me lanza errores.

Exodus_c217 te aclaro que yo tengo muy poca paciencia, mejor que estes 200% seguro antes de afirmar algo.

No hay ninguna funcion do en C/C++, hay una estructura de repeticion llamada do/while, punto.

Las sangrias como decia son irrelevantes, otra cosa es que su codigo este mal (no me moleste en ir mas lejos de lo que señale ya que es evidentemente un error garrafal).

Que yo sepa solo hay un compilador que sea 100% standard y es el Comeau C/C++ que soporta export para los templates. Es muy probable que en tu genialidad estes hablando de versiones ANTIGUAS y OBSOLETAS de VC++.

Esto funciona hasta con la version .NET 2003 que es de hace 6 años:
Código: Text
  1.  
  2. #include &#60;iostream&#62;
  3.  
  4. void main()
  5. {
  6.   std::cout &#60;&#60; &#34;hola, obvio que esto funciona!&#34;;
  7.   using namespace std;
  8.   cout &#60;&#60; endl &#60;&#60; &#34;esto tambien ...&#34;;
  9. }
  10.  
  11.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Exodus_c217

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Problema Con Un Programa Muy Simple
« Respuesta #6 en: Jueves 24 de Abril de 2008, 19:23 »
0
Citar
cout<<"Introduce el valor de la variable X";
cout<<j+1;
cout<<": ";

No le encuentro mucho sentido a esta linea, indicas al usuario que ingrese el valor de x, pero no se para que sirve, o solo lo muestra en pantalla????

Otro error es que tu array bidimensional solo tiene dos espacios, porque lo estas declarando como 0,0 ya que numvar y numver son iguales a 0, o sea que solo tienes dos espacios para escribir.

Creo que ese es el motivo, pero ya lo había comentado Eternal Idol entonces como solo tienes un espacio ese es el que se escribe y sobreescribe una y otra vez.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Un Programa Muy Simple
« Respuesta #7 en: Jueves 24 de Abril de 2008, 19:30 »
0
Con un compilador como la gente ese codigo da error, no hay "dos espacios", un array sin elementos en sus dimensiones no existe. Ya fue suficiente, el codigo ese no tiene pies ni cabeza y su autor no parece que vaya a volver, que aprende a programar minimamente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.