elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  consulta asignar enteros a un valor logico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: consulta asignar enteros a un valor logico  (Leído 1,215 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
consulta asignar enteros a un valor logico
« en: 12 Diciembre 2018, 19:11 pm »

Queria saber si esta bien el modulo crear(nuevo) donde asigno enteros a una variable logica o hay otra forma mas "estetica"? gracias
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. const int MAX=32;
  8. typedef char tcad[MAX];
  9. typedef struct ambito{
  10. bool local;
  11. };
  12. typedef struct simbolo{
  13. tcad nombre;
  14. tcad tipo_dato;
  15. int tamanyo;
  16. int valor;
  17. ambito global;
  18. };
  19. typedef struct tnodo *pnodo;
  20. typedef struct tnodo{
  21. simbolo dato;
  22. pnodo sig;
  23. };
  24. typedef struct tlista{
  25. pnodo inicio;
  26. pnodo final;
  27. };
  28.  
  29. void iniciar(tlista &tabla);
  30. void crear(pnodo &nuevo);
  31. bool validar(tcad cadena);
  32. void agregar_final(tlista &tabla, pnodo nuevo);
  33. int cantidad(pnodo i);
  34. int total_bytes(pnodo i);
  35. void ordenar(tlista &tabla);
  36. void mostrar(tlista tabla);
  37. void nueva_cadena(tcad &cadena);
  38.  
  39. int main()
  40. {
  41. int opcion;
  42. tlista mitabla;
  43. pnodo nuevo;
  44. iniciar(mitabla);
  45. do{
  46. system("cls");
  47. cout<<"1. Agregar variable a la tabla"<<endl;
  48. cout<<"2. Mostrar cantidad de variables"<<endl;
  49. cout<<"3. Calcular bytes de la tabla"<<endl;
  50. cout<<"4. Ordenar tabla"<<endl;
  51. cout<<"5. Mostrar tabla"<<endl;
  52. cout<<"6. Salir"<<endl;
  53. cin>>opcion;
  54. switch(opcion){
  55. case 1: crear(nuevo);
  56. if(nuevo!=NULL)
  57. agregar_final(mitabla,nuevo);
  58. break;
  59. case 2: cout<<"Cantidad de variables: "<<cantidad(mitabla.inicio)<<endl;break;
  60. case 3: cout<<"Bytes totales de la tabla: "<<total_bytes(mitabla.inicio)<<endl;break;
  61. case 4: ordenar(mitabla);break;
  62. case 5: mostrar(mitabla);break;
  63. case 6: cout<<"FIN DEL PROGRAMA"<<endl;break;
  64. default: cout<<"Opcion incorrecta"<<endl;
  65. }
  66. system("Pause");
  67. }while(opcion!=6);
  68. }
  69.  
  70. void iniciar(tlista &tabla)
  71. {
  72. tabla.inicio=NULL;
  73. tabla.final=NULL;
  74. }
  75. //Aca es donde quiero que vean si esta bien lo de asignar valor entero  a esa variable logica nuevo->dato.global.local ya que ...
  76. void crear(pnodo &nuevo)
  77. {
  78.        int auxiliar;
  79. bool valido;
  80. nuevo=new tnodo;
  81. if(nuevo!=NULL){
  82. do{
  83. cout<<"Ingrese nombre variable: ";
  84. nueva_cadena(nuevo->dato.nombre);
  85. }while(validar(nuevo->dato.nombre)==false);
  86. cout<<"Ingrese tipo de dato: ";
  87. nueva_cadena(nuevo->dato.tipo_dato);
  88. cout<<"Ingrese  tamaño: ";
  89. cin>>nuevo->dato.tamanyo;
  90. cout<<"Ingrese valor: ";
  91. cin>>nuevo->dato.valor;
  92. do{
  93. cout<<"Ingrese ambito local(0)/global(1): ";
  94. cin>>auxiliar;
  95. if(auxiliar==0 || auxiliar==1){
  96. nuevo->dato.global.local=auxiliar;
  97. valido=true;
  98. }
  99. else
  100. valido=false;
  101. }while(valido==false);
  102. nuevo->sig=NULL;
  103. }
  104. else
  105. cout<<"MEMORIA INSUFICIENTE"<<endl;
  106. }
  107. //... de esta forma no me funciona :(
  108. void crear(pnodo &nuevo)
  109. {
  110. nuevo=new tnodo;
  111. if(nuevo!=NULL){
  112. do{
  113. cout<<"Ingrese nombre variable: ";
  114. nueva_cadena(nuevo->dato.nombre);
  115. }while(validar(nuevo->dato.nombre)==false);
  116. cout<<"Ingrese tipo de dato: ";
  117. nueva_cadena(nuevo->dato.tipo_dato);
  118. cout<<"Ingrese  tamaño: ";
  119. cin>>nuevo->dato.tamanyo;
  120. cout<<"Ingrese valor: ";
  121. cin>>nuevo->dato.valor;
  122. //JUSTO DESDE AQUI
  123. do{
  124. cout<<"Ingrese ambito local(0)/global(1): ";
  125. cin>>nuevo->dato.global.local;
  126. }while(nuevo->dato.global.local<0 || nuevo->dato.global.local>1);
  127. nuevo->sig=NULL;
  128. }
  129. else
  130. cout<<"MEMORIA INSUFICIENTE"<<endl;
  131. }
  132.  
  133. bool validar(tcad cadena)
  134. {
  135. int i;
  136. bool validado=true;
  137. if(islower(cadena[0]) || isupper(cadena[0])){
  138. for(i=1;i<strlen(cadena) && !validado;i++){
  139. if(isdigit(cadena[i]) || isupper(cadena[i]) || islower(cadena[i]) || cadena[i]=='_')
  140. validado=true;
  141. else
  142. validado=false;
  143. }
  144. }
  145. else
  146. validado=false;
  147. return validado;
  148. }
  149.  
  150. void agregar_final(tlista &tabla, pnodo nuevo)
  151. {
  152. if(tabla.inicio==NULL){
  153. tabla.inicio=nuevo;
  154. tabla.final=nuevo;
  155. }
  156. else{
  157. tabla.final->sig=nuevo;
  158. tabla.final=nuevo;
  159. }
  160. }
  161.  
  162. int cantidad(pnodo i)
  163. {
  164. if(i==NULL)
  165. return 0;
  166. else
  167. return cantidad(i->sig)+1;
  168. }
  169.  
  170. int total_bytes(pnodo i)
  171. {
  172. if(i==NULL)
  173. return 0;
  174. else
  175. return i->dato.tamanyo+total_bytes(i->sig);
  176. }
  177.  
  178. void ordenar(tlista &tabla)
  179. {
  180. pnodo i, j;
  181. simbolo cambio;
  182. bool ordenado=true;
  183. if(tabla.inicio!=NULL){
  184. while(ordenado){
  185. ordenado=false;
  186. for(i=tabla.inicio;i->sig!=NULL;i=i->sig){
  187. j=i->sig;
  188. if(i->dato.tamanyo>j->dato.tamanyo){
  189. cambio=i->dato;
  190. i->dato=j->dato;
  191. j->dato=cambio;
  192. ordenado=true;
  193. }
  194. }
  195. }
  196. }
  197. }
  198.  
  199. void mostrar(tlista tabla)
  200. {
  201. pnodo i;
  202. if(tabla.inicio!=NULL){
  203. for(i=tabla.inicio;i!=NULL;i=i->sig){
  204. cout<<"Nombre variable: "<<i->dato.nombre<<endl;
  205. cout<<"Tipo de dato: "<<i->dato.tipo_dato<<endl;
  206. cout<<"Tamaño: "<<i->dato.tamanyo<<" Bytes"<<endl;
  207. cout<<"Valor: "<<i->dato.valor<<" Bytes"<<endl;
  208. cout<<"Ambito: ";
  209. if(i->dato.global.local==true)
  210. cout<<"Global"<<endl;
  211. else
  212. cout<<"Local"<<endl;
  213. cout<<endl;
  214. }
  215. }
  216. else
  217. cout<<"Tabla vacia"<<endl;
  218. }
  219.  
  220. void nueva_cadena(tcad &cadena)
  221. {
  222. fflush(stdin);
  223. gets(cadena);
  224. fflush(stdin);
  225. }


« Última modificación: 12 Diciembre 2018, 19:19 pm por Beginner Web » En línea

7w7
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: consulta asignar enteros a un valor logico
« Respuesta #1 en: 12 Diciembre 2018, 19:34 pm »

Por qué esto??
Código
  1. typedef struct ambito{
  2. bool local;
  3. };
  4. typedef struct simbolo{
  5. //...
  6. ambito global;
  7. };
Primero que es más simple directamente crear una variable de tipo <bool> dentro de <simbolo>. Y segundo tal y como está ahí, si asignas <true> a <bool local>; entonces <ambito global> es igual a <true>. Osea a la inversa...

Y si no quieres asignar un <int> a un <bool> comprueba cada caso con <if>.
Código
  1. do{
  2. cout<<"Ingrese ambito local(0)/global(1): ";
  3. cin>>auxiliar;
  4. if(auxiliar==0)
  5. nuevo->dato.global.local=true;
  6. else if(auxiliar == 1)
  7.                nuevo->dato.global.local = false;
  8. }while(auxiliar != 0 && auxiliar != 1);
No sé si está bien asignado o es al revés ya que es un lio el "global.local".

PD: Hay un <system("pause")> por ahí que quedaría mejor con un <cin.get()>... :rolleyes:
Y para mí la mayor ventaja de C++ en comparación a C es el uso de <string> en vez de <char*>, así evitas tener que usar <fflush(stdin)> Y coger el valor con un <cin> o <getline()> y no tener que usar <gets()> (y mejor que <gets()> es usar <fgets()>). :-X


« Última modificación: 12 Diciembre 2018, 19:39 pm por YreX-DwX » En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: consulta asignar enteros a un valor logico
« Respuesta #2 en: 12 Diciembre 2018, 20:23 pm »

Código
  1. typedef struct ambito{
  2. bool local;
  3. };
Eso porque la consigna pedia una estructura ambito(local,global) y bueno ... pero si tienes razon, y con lo de  validar que solo sea 1 o 0 el dato entero est bien queda mejor asi como lo hiciste, muchas gracias
Código
  1. do{
  2. cout<<"Ingrese ambito local(0)/global(1): ";
  3. cin>>auxiliar;
  4. if(auxiliar==0)
  5. nuevo->dato.global.local=false;
  6. else if(auxiliar==1)
  7.        nuevo->dato.global.local=true;
  8. }while(auxiliar!=0 && auxiliar!=1);
En línea

7w7
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como hago para asignar un valor a un boton?
Programación Visual Basic
Zinc 1 1,806 Último mensaje 25 Abril 2006, 20:08 pm
por Cicklow
[javascript] Asignar un valor dinamico a un atributo
Desarrollo Web
erest0r 3 2,661 Último mensaje 16 Noviembre 2014, 02:17 am
por erest0r
(Solucionado) No consigo asignar valor a una variable en javascript
Desarrollo Web
Pantera80 1 3,531 Último mensaje 22 Febrero 2016, 20:43 pm
por Pantera80
Como asignar un valor a una variable js
Desarrollo Web
SrTrp 0 2,960 Último mensaje 27 Septiembre 2017, 19:32 pm
por SrTrp
Error lógico cuando compilo ejercicio - CONSULTA
Programación C/C++
Cero++ 6 1,955 Último mensaje 11 Diciembre 2018, 20:51 pm
por Cero++
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines