Autor
|
Tema: Problema con registro y funciones (Leído 3,117 veces)
|
Jesusinfo
Desconectado
Mensajes: 38
Copartícipe del conocimiento
|
Buenas amigos, estoy trabajando con estructuras pero la verdad estoy un poco confundido, ya que quiero llevar mi estructuras a arrays, pero no consigo pasarla por referencia aqui esta el codigo sencillo donde almancena una sola persona y una sola nota: #include <iostream> #include <string> using namespace std; struct lista_estudiantes{ string nombres; int notas; }; void llenar (lista_estudiantes& lista){ cout<<"DAME EL NOMBRE: "<<endl; cin>>lista.nombres; cout<<"DAME LA NOTA DEL ESTUDIANTE"<<endl; cin>>lista.notas; } void imprimir(lista_estudiantes lista){ cout<<"\nNombre del estudiante: "<<lista.nombres<<endl; cout<<"NOTA: "<<lista.notas<<endl<<endl; } int menu (){ int opc; cout<<"1.LLENAR\n2.IMPRIMIR\n3.SALIR"<<endl; cin>>opc; return opc; } int main(){ struct lista_estudiantes lista; int opc; do{ opc=menu(); switch (opc){ case 1: llenar(lista); break; case 2: imprimir(lista); break; case 3: cout<<"GRACIAS POR ENTRAR AL PROGRAMA "<<endl; break; } } while(opc !=3); system ("pause"); }
Bien ese ejercicio quiere que haga lo siguiente: 1.Almacene N cantidad de estudiante 2. Con 5 notas 3. Y lo imprima pero no comprendo como pasar por referencia, lo intente hacer de esta manera #include <iostream> #include <string> using namespace std; int num; struct lista_estudiantes{ string nombres; int notas; }; void llenar (lista_estudiantes& lista){ cout<<"Dame la cantidad de estudiante a insertar"<<endl; cin>>num; for(int i=0; i<num; i++){ cout<<"DAME EL NOMBRE: "<<endl; cin>>lista[i].nombres; for (int x=0; x<6; x++){ cout<<"DAME LA NOTA DEL ESTUDIANTE"<<endl; cin>>lista[x].notas; } } } void imprimir(lista_estudiantes lista){ for(int i=0;i<num;i++){ cout<<"\nNombre del estudiante: "<<lista[i].nombres<<endl; for(int x=0;x<6;i++){ cout<<"NOTA: "<<lista[x].notas<<endl<<endl<<endl; } } } int menu (){ int opc; cout<<"1.LLENAR\n2.IMPRIMIR\n3.SALIR"<<endl; cin>>opc; return opc; } int main(){ struct lista_estudiantes lista[1000]; int opc; do{ opc=menu(); switch (opc){ case 1: llenar(lista); break; case 2: imprimir(lista); break; case 3: cout<<"GRACIAS POR ENTRAR AL PROGRAMA "<<endl; break; } } while(opc !=3); system ("pause"); }
la verdad estoy muy confundido les agradecería su ayuda.
|
|
« Última modificación: 22 Octubre 2016, 03:33 am por Jesusinfo »
|
En línea
|
|
|
|
eduardo1012
Desconectado
Mensajes: 32
|
#include<stdlib.h> #include<iomanip> #include<iostream> #include<conio.h> using namespace std; typedef struct{ char nombre[20]; int notas; }Dato; void recibe(Dato *,int); void imprime(Dato *,int); int main(){ int n; Dato *_dato; printf("Cantidad de estudiantes: "); cin>>n; _dato=(Dato *)malloc(n*sizeof(Dato)); recibe(_dato,n); imprime(_dato,n); free(_dato); getch(); } void recibe(Dato *_dato,int n){ for(int i=0; i<n; i++){ cout<<"Nombre del estudiante:"; fflush(stdin); cin.getline((_dato+i)->nombre,20, '\n'); //gets(_dato[i].nombre); cout<<endl<<"Nota: "; cin>>(_dato+i)->notas; //scanf("%d",&_dato[i].edad); } } void imprime(Dato *_dato,int n){ for(int i=0; i<n; i++){ cout<<endl<<(*(_dato+i)).nombre; cout<<endl<<(*(_dato+i)).notas; } }
Buscas hacer es algo asi no?
|
|
« Última modificación: 20 Octubre 2016, 00:38 am por eduardo1012 »
|
En línea
|
|
|
|
Jesusinfo
Desconectado
Mensajes: 38
Copartícipe del conocimiento
|
Correcto algo asi, pero de verdad, de verdad no entiendo el codigo, aunque se ve tan sencillo no se que hace sentencias como esta _dato=(Dato *)malloc(n*sizeof(Dato)); recibe(_dato,n); free(_dato); getch(); fflush(stdin); cin.getline((_dato+i)->nombre,20, '\n'); cin>>(_dato+i)->notas;
Disculpa mi falta de conocimiento, no se si es mucho pedir que me explicaras eso porfavor, la verdad todavia no entiendo como transformar mi struct en arrays y pasarlo por referencia a las funciones
|
|
|
En línea
|
|
|
|
eduardo1012
Desconectado
Mensajes: 32
|
_dato =(Dato *)malloc(n *sizeof(Dato ));/*al ser una estructura dinámica, tu tienes que reservar memoria para esta es lo mismo que con los arrays tu tienes un int[5]; declarado, pero esto tu lo defines, no el usuario al reservar memoria es algo similar a int[n], con malloc y realloc asignas la memoria dinámica, no se si me entidas?*/ recibe(_dato,n); /*Esta es una función, que puedes invocar en el main, La función recibe la cantidad de estudiantes a registrar y los registra.*/ /*asi como reservas memoria, la tienes que liberar, y el usuario reservo memoria dinámica para la estructura*/ /*Forma parte de la librería conio.h */ /*limpia el buffer, para cuando reciba los nombres */ cin.getline((_dato+i)->nombre,20, '\n'); /*escaneas nombre la posición de i es lo mismo que escribir //gets(_dato[i].nombre);*/ cin>>(_dato+i)->notas; /*es lo mismo escaneas notas en la posición de i es lo mismo que escribir //scanf("%d",&_dato[i].edad); */
No se si me entiendas? Puedo explicarlo mejor si deseas, tu pregunta con confianza.
|
|
|
En línea
|
|
|
|
Jesusinfo
Desconectado
Mensajes: 38
Copartícipe del conocimiento
|
Entendi algunas cosas pero dejare donde tengo dudas en realidad amigo _dato=(Dato *)malloc(n*sizeof(Dato)); /*entendi lo de reservar memoria pero que funcion hace (n*sizeof(dato)) que funcion hace el *, y el sizeof no entendi enrealidad esto si puedes explicarmelo mejor porfavor?*/ recibe(_dato,n); /*Entiendo que es una funcion pero porque cuando creas la funcion utilizas void recibe(Dato *_dato,int n) en la parte de parametros Dato * _dato y no Dato& _dato?? */ free(_dato); /*se utiliza siempre en la funcion main casi al final?*/ fflush(stdin); /*No entiendo la parte de buffer podrias explicarme mejor esta parte que todavia no comprendo que hace :( */ cin.getline((_dato+i)->nombre,20, '\n'); cin>>(_dato+i)->notas; /* En estas dos lo que me confunde es el ->notas, podrias explicarme eso */
Esas dudas las tengo amigo, y otra pregunta, el ejercicio que intento hacer es necesario las librerías nombradas no se puede hacer con la librería iostream únicamente? y es necesario utilizar las reservas de memorias? como indagando e investigando vi que para hacer una estructura arrays era de la siguiente forma : struct variable { int dato1; char dato2; float dato3; }; variable *_variable = new variable[n];
hice unos ejercicios sencillos y funciono el problema es a la hora de utilizar funciones, como pasar por parametros o referencia dicha estructura en forma de arrays, no se si me explico?
|
|
|
En línea
|
|
|
|
eduardo1012
Desconectado
Mensajes: 32
|
#include<stdlib.h> #include<iomanip> #include<iostream> using namespace std; typedef struct{ char nombre[20]; int notas; }Dato; int main(){ int n; Dato *_dato; cout<<"Cuantos estudiantes ingresaras: "; cin>>n; _dato =(Dato *)malloc(n *sizeof(Dato )); for(int i=0; i<n; i++){ cout<<"Nombre del estudiante:"; cin.getline((_dato+i)->nombre,20, '\n'); //gets(_dato[i].nombre); cout<<endl<<"Nota: "; cin>>(_dato+i)->notas; //scanf("%d",&_dato[i].edad); } for(int i=0; i<n; i++){ cout<<endl<<(*(_dato+i)).nombre; cout<<endl<<(*(_dato+i)).notas; } }
Se me borro todo lo que escribi ,pero te dejo el código mas simple, para que puedas analizarlo, cualquier cosa mándame mensaje. Elimina cosas al código, modifícalo para que veas como funciona.
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Linea 29 del código original for(int x=0;x<6;i++){
He visto ese y he parado. Revisa el código no sea que todo sea por errores como ese.
Revisándolo mejor no deberías tener ese for para las notas. Tu estructura es un nombre y una nota, por tanto tal y como haces cin>> lista .nombres debes, sin el for, hacer cin>>lista.notas
|
|
« Última modificación: 20 Octubre 2016, 12:25 pm por MAFUS »
|
En línea
|
|
|
|
Jesusinfo
Desconectado
Mensajes: 38
Copartícipe del conocimiento
|
Encontré la manera de pasar la struct como parámetro, osea yo asumo que esta como parámetro y logre hacer lo buscado de manera mas sencilla comparado a lo explicado anteriormente en el post, bueno considero que es mas sencillo ya que trabajo con una sola libreria y lo entiendo pues , les dejare el código para que me digan su opinión. También quisiera saber como utilizar getline, o alguna manera de captar el [ESPACIO] e imprimirlo o sea me explico cin>>leerV -> 'Fulano de tal' cout<<leerV. entonces al momento de imprimir, imprima fulano de tal. con los espacios correspondientes. #include <iostream> #include <string> using namespace std; int num; int cantidad_notas=5; struct lista_estudiantes{ string nombres; }estudiantes[100]; void llenar (lista_estudiantes[], int notas[]){ cout<<"\nDIME LA CANTIDAD DE ESTUDIANTES QUE DESEAS UTILIZAR: "<<endl; cin>>num; cout<<endl<<endl; for(int i=0;i<num;i++){ cout<<"DAME EL NOMBRE DEL ESTUDIANTE "<<i+1<<endl<<endl;; cin>>estudiantes[i].nombres; for(int x=0; x<cantidad_notas; x++){ cout<<"NOTA "<<x+1<<": "; cin>>notas[5*i+x]; cout<<endl; } cout<<endl; } } void imprimir(lista_estudiantes[], int notas[]){ for(int i=0;i<num; i++){ cout<<"\nNombre del estudiante: "<<estudiantes[i].nombres<<endl; for(int x=0; x<cantidad_notas; x++){ cout<<""<<notas[5*i+x]<<endl; } cout<<endl; } } void insertar(lista_estudiantes[], int notas[]){ cout<<"Dame el nombre del nuevo estudiante: "<<endl; cin>>estudiantes[num].nombres; for(int i=0;i<5;i++){ cout<<"NOTA "<<i+1<<": "; cin>>notas[5*num+i]; } num++; } int menu (){ int opc; cout<<"1.LLENAR\n2.IMPRIMIR\n3.INSERTAR\n4.SALIR"<<endl; cin>>opc; return opc; } int main(){ int notas[500]; int opc; do{ opc=menu(); switch (opc){ case 1: llenar(estudiantes, notas); break; case 2: imprimir(estudiantes, notas); break; case 3: insertar(estudiantes, notas); break; case 4: cout<<"GRACIAS POR ENTRAR AL PROGRAMA"<<endl; break; } } while(opc !=4); system ("pause"); }
|
|
« Última modificación: 22 Octubre 2016, 03:32 am por Jesusinfo »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Funciones para manipular el registro utilizando la API
Programación Visual Basic
|
Slasher-K
|
6
|
7,077
|
26 Diciembre 2005, 12:48 pm
por #Borracho.-
|
|
|
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
|
lipman
|
9
|
23,979
|
19 Mayo 2011, 23:39 pm
por Littlehorse
|
|
|
Problema con Funciones en C
Programación C/C++
|
;c1v!c
|
8
|
3,378
|
17 Agosto 2011, 10:19 am
por satu
|
|
|
Problema con funciones
Programación C/C++
|
DickGumshoe
|
2
|
2,526
|
22 Enero 2012, 11:48 am
por DickGumshoe
|
|
|
Problema de Funciones en C
Programación C/C++
|
Erner
|
4
|
2,189
|
10 Mayo 2015, 15:49 pm
por DarK_FirefoX
|
|