Foros del Web » Programación para mayores de 30 ;) » .NET »

Estructura anidada y arreglos

Estas en el tema de Estructura anidada y arreglos en el foro de .NET en Foros del Web. hola buenas estoy aprendiendo este lenguaje y me dieron un trabajo en el cual me he quedado estancado en este punto espero si me pueden ...
  #1 (permalink)  
Antiguo 04/06/2008, 14:17
 
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 15 años, 11 meses
Puntos: 0
Estructura anidada y arreglos

hola buenas estoy aprendiendo este lenguaje y me dieron un trabajo en el cual me he quedado estancado en este punto espero si me pueden dar una mano no creo que sea algo muy complicado.

nesesito crear una clase que tenga estos atributos
ID integer
Nombre String
y estos metodos

Guardar
Recorrer
Eliminar

devo de aplicar una estructura y arreglos que es lo que nos estan pasando ahora

asi que hice algo como esto

Cita:
Public Class Proveedor

Public Structure prov
Public id() As Integer
Public nombres() As String
End Structure


Public Sub guardar(ByVal id2 As Integer, ByVal nombres2 As String)
Dim respuesta As Boolean
respuesta = True
Dim largo As Integer
Dim prov As Proveedor.prov
ReDim prov.id(0)
ReDim prov.nombres(0)


largo = prov.id.Length - 1


If String.IsNullOrEmpty(prov.nombres(0)) = True Then
prov.id(largo) = id2
prov.nombres(largo) = nombres2
Else
largo = largo + 1
ReDim prov.id(largo)
ReDim prov.nombres(largo)
prov.id(largo) = id2
prov.nombres(largo) = nombres2
End If
ahi declare la estructura y ingreso los datos desde un formulario
el problema lo tengo aqui cuando deseo ver los datos me dice de error:

la variable id se usa antes que se le haya asignado un valor, podria darse una exepcion nula en tiempo de ejecucion

Cita:
Public Function recorrer(ByVal largo As Integer)
Dim respuesta As Boolean
Dim prov As Proveedor.prov
Dim nombre As String
Dim id As Integer

Try
nombre = prov.id(largo)
id = prov.nombres(largo)
Catch ex As Exception
respuesta = False

End Try
Return respuesta
End Function
yo creo que el problema esta en que trato de mostrar y no hay nada en la estructura, pero tambien cuando trato de ingresar un dato y luego ver si el dato esta ingresado me sale el mismo error

o si no, lo otro es que no se como entrar a la estructura desde una funcion, guardar en memoria eso y luego entrar desde otra funcion y hacer uso de esa informacion

agradeceria mucho su ayuda gracias

Última edición por Pollodrilo; 04/06/2008 a las 14:29
  #2 (permalink)  
Antiguo 04/06/2008, 14:33
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Estructura anidada y arreglos

El error creo que te lo tira por querer utilizar un struct que no está inicializado... Y fuera de eso, no entiendo porque usas una estructura dentro de la clase, cuando las variables podrian estar ya dentro de la clase... Y así evitarte los redims y esas cosas, que tampoco creo que sean necesarios.

1) Hasta donde yo se, redim es para cambiar el valor de una variable.
2) podrias crear tu clase con los atributos sueltos, total tu clase ya representa a un proveedor, no hace falta el struct.

Luego, este método no está muy bien hecho me parece...
Código:
Public Sub guardar(ByVal id2 As Integer, ByVal nombres2 As String)
          Dim respuesta As Boolean
          respuesta = True
          Dim largo As Integer
          Dim prov As Proveedor.prov
          ReDim prov.id(0)
          ReDim prov.nombres(0)
  
  
          largo = prov.id.Length - 1
  
  
          If String.IsNullOrEmpty(prov.nombres(0)) = True Then
              prov.id(largo) = id2
              prov.nombres(largo) = nombres2
          Else
              largo = largo + 1
              ReDim prov.id(largo)
              ReDim prov.nombres(largo)
              prov.id(largo) = id2
              prov.nombres(largo) = nombres2
          End If
creo que podrias reemplazarlo por:
Código:
     Public Sub guardar(ByVal unId As Integer, ByVal unNombres As String)
If String.IsNullOrEmpty(unNombre) Then
id = unId
nombre = unNombres
         Else
throw new Exception("nombre de proovedor invalido")
         End If
Otra cosa ¿que se supone debería hacer un proveedor cuando le mandas el mensaje recorrer?

Nada, espero que te sirva
Saludos
Guille
  #3 (permalink)  
Antiguo 04/06/2008, 14:45
 
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Estructura anidada y arreglos

ok gracias lo tratare de implementar, ahh y lo de abajo todavia no lo terminaba por que me daba error.
la idea era envez de devolver un boleano era devolver una estructura que contuviera los datos que tiene la estructura de la clase proveedor y ademas un boleano que me indicara cuando el arreglo ya no le quedara mas informacion para que mi formulario dejara de pedir. era una forma recursiva.

la verdad soy muy nuevo en esto y es mi primer programa que ago en .net y me confudo jeje
  #4 (permalink)  
Antiguo 04/06/2008, 14:53
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Estructura anidada y arreglos

¿Sabes algo de programación orientada a objetos? ¿Que es un objeto? ¿Que es una clase?
Me parece que ese es el problema... :S

Saludoss
  #5 (permalink)  
Antiguo 04/06/2008, 15:11
 
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Estructura anidada y arreglos

algo mas o menos basico entiendo por obgeto cualquier cosa que interactua con el usuario se puede ver es como la parte mas tangible y la clase es el alma la parte logica.

esta bien no?
  #6 (permalink)  
Antiguo 04/06/2008, 20:24
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Estructura anidada y arreglos

Mmm no. Basicamente, y llendo a lo técnico para que entiendas, podría hacer la siguiente comparacion:

Struct <-------------------------------------> Clase
Pedazo de memoria de un struct <---> objeto


Seguramente estabas acostumbrado a hacer algo como

Código:
struct proveedor * proveedor = (struct proveedor*) malloc(sizeof(struct proveedor))

En .net usando objetos, el análogo sería

Código:
Proveedor proveedor = new Proveedor();
La diferencia básica que podrás ver por el momento, es que en las clases defines funciones (que llamaremos métodos) y los objetos pueden ejecutar esos métodos como si fueran funciones dentro del struct.

o sea, antes para guardar un proveedor deberías de haber hecho en C:

Código:
guardar(proveedor);
y en C#, con objetos:

Código:
proveedor.guardar();
En objetos decimos que le mandas el mensaje "guardar" al proveedor. Es como si estuvieras hablando con el objeto.

Estaría bueno que en tu trabajo cuentes tus inquietudes al respecto, o consigas un libro de programación orientada a objetos y leas algo... Igual no es un tema fácil de asimilar solo con un libro, pero bueno...

Saludoss
Guille
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:47.