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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]  (Leído 2,972 veces)
S4ms3pi0l__

Desconectado Desconectado

Mensajes: 21


Ver Perfil
No puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]
« en: 17 Octubre 2017, 03:14 am »

He hecho este programa en C, pero no puedo sumar las parcelas, sólo el total de naranjas y mandarinas. Espero que podaís ayudarme. Lo que quiero es, de 'n' parcelas, imprimir el total de cada una. Aquí mi programa:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[]) {
  5. int n, i, j, a=0, b=0, parcela[50];
  6. do{
  7. printf("Ingrese la cantidad de parcelas: ");
  8. scanf("%d",&n);
  9. }while(n<=0);
  10. system("cls");
  11. for(i=1;i<=n;i++){
  12. printf("\nParcela #%d ",i);
  13. do{
  14. printf("\nIngrese la cantidad de naranjas: ");
  15. scanf("%d",&parcela[i]);
  16. }while(parcela[i]<=0);
  17. do{
  18. printf("Ingrese la cantidad de mandarinas: ");
  19. scanf("%d",&parcela[j]);
  20. }while(parcela[j]<=0);
  21. a=a+parcela[i];
  22. b=b+parcela[j];
  23. parcela[n]=parcela[i]+parcela[j];
  24. }
  25. printf("\nTotal produccion naranjas: %d ",a);
  26. printf("\nTotal produccion mandarinas: %d ",b);
  27. for(i=1;i<=n;i++){
  28. printf("\nParcela #%d: %d ",i, parcela[n]);
  29. }
  30. return 0;
  31. }
  32.  


· Los títulos deben ser descriptivos
>aquí las reglas del foro
-Engel Lex


« Última modificación: 17 Octubre 2017, 03:34 am por S4ms3pi0l__ » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: no puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]
« Respuesta #1 en: 17 Octubre 2017, 03:35 am »

donde modificas j? veo que lo usas como indicador de parcelas de mandarinas... pero siempre lo sobreescribes luego con las siguientes naranjas (i) no es preferible que uses una matriz bidimensional donde

siendo x el numero de parcela
Código:
matriz[x][0]; <-naranjas
matriz[x][1]; <-mandarinas


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
S4ms3pi0l__

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: No puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]
« Respuesta #2 en: 17 Octubre 2017, 03:53 am »

Ese era mí problema; me ha servido de mucha ayuda tu consejo, te lo agradezco mucho. Aquí dejo el código con el problema resuelto:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[]) {
  5. int n, x, i, a=0, b=0, parcela[50][50];
  6. do{
  7. printf("Ingrese la cantidad de parcelas: ");
  8. scanf("%d",&n);
  9. }while(n<=0);
  10. system("cls");
  11. for(i=1;i<=n;i++){
  12. printf("\nParcela #%d ",i);
  13. do{
  14. printf("\nIngrese la cantidad de naranjas: ");
  15. scanf("%d",&parcela[i][1]);
  16. }while(parcela[i][1]<=0);
  17. do{
  18. printf("Ingrese la cantidad de mandarinas: ");
  19. scanf("%d",&parcela[i][2]);
  20. }while(parcela[i][2]<=0);
  21. a+=parcela[i][1];
  22. b+=parcela[i][2];
  23. parcela[i][x]=parcela[i][1]+parcela[i][2];
  24. }
  25. printf("\nTotal produccion naranjas: %d ",a);
  26. printf("\nTotal produccion mandarinas: %d ",b);
  27. for(i=1;i<=n;i++){
  28. printf("\nParcela #%d: %d ",i, parcela[i][x]);
  29. }
  30. return 0;
  31. }
  32.  
« Última modificación: 17 Octubre 2017, 03:57 am por S4ms3pi0l__ » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: No puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]
« Respuesta #3 en: 17 Octubre 2017, 04:04 am »

no requieres 50 en tu segunda dimensión... y por otro lado... los indices empiezan en 0

puedes parecer una tontería pero a medida que crece el programa el tamaño afecta... allí necesitas declarar un array (si 50 es tu maximo) de 50*2*4 bytes (4 es la cantidad de bytes de int) es decir, meros 400Bytes... sin embargo declaras 50*50*4 siendo esto 10KBytes... estando 2 ordenes de magnitud sobre lo que necesitas... en este caso es irrelevante... pero facilmente se te puede escapar de las manos...

con hacer

Código:
int parcela[50][2];

parcela[0][0] = 4;
parcela[0][1] = 2;

a demás de ser más eficiente lo hace más legible y comprensible
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: No puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]
« Respuesta #4 en: 18 Octubre 2017, 22:23 pm »

Hola, se me ocurrió mejorar el código de S4ms3pi0l  con punteros en lugar de arrays, echarle un ojo por favor, tengo pensado implementarlo también con estructuras de datos y listas enlazadas,  lo hago por aprender y practicar básicamente.


Se veis alguna cosa que pueda mejorar os agradezco cualquier comentario.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int preguntarNaranjas();
  5. int preguntarMandarinas();
  6. int preguntarParcelas();
  7. void printResumen(int ** parcela, int numeroParcelas);
  8. int ** initParcelaPointer(int numeroParcelas);
  9.  
  10. int main(int argc, char *argv[]) {
  11.  
  12. int parcelas = preguntarParcelas();
  13.  
  14. int **parcelaPointer = initParcelaPointer(parcelas);
  15.  
  16. int i;
  17. int * temp;
  18.  
  19. for(i = 0 ; i < parcelas ; i++){
  20. printf("\nParcela #%d ",i);
  21.  
  22. int mandarinas = preguntarMandarinas();
  23.  
  24. int naranjas = preguntarNaranjas();
  25.  
  26. temp = (int*) parcelaPointer[i];
  27.  
  28. *temp = mandarinas;
  29.  
  30. temp++;
  31.  
  32. *temp = naranjas;
  33. }
  34.  
  35. printResumen(parcelaPointer, parcelas);
  36.  
  37. return 0;
  38. }
  39.  
  40. int ** initParcelaPointer(int numeroParcelas){
  41. int **parcelaPointer;
  42.  
  43. parcelaPointer = (int **) malloc(sizeof(int *) * numeroParcelas);
  44.  
  45. int i;
  46.  
  47. for(i = 0 ; i < numeroParcelas ; i++){
  48. parcelaPointer[i] = (int *) malloc(sizeof(int *) * 2);
  49. }
  50.  
  51. return parcelaPointer;
  52. }
  53.  
  54. void printResumen(int ** parcela, int numeroParcelas){
  55. int totalNaranjas = 0;
  56. int totalMandarinas = 0;
  57. int totalProduccionParcela = 0;
  58.  
  59. int i;
  60. for(i = 0 ; i < numeroParcelas ; i++){
  61. totalProduccionParcela = 0;
  62.  
  63. totalMandarinas += *parcela[i];
  64. totalProduccionParcela += *parcela[i];
  65.  
  66. parcela[i]++;
  67.  
  68. totalNaranjas += *parcela[i];
  69. totalProduccionParcela += *parcela[i];
  70.  
  71. printf("\nParcela #%d: Produccion: %d ",i, totalProduccionParcela);
  72. }
  73.  
  74. printf("\nTotal produccion naranjas: %d ",totalNaranjas);
  75. printf("\nTotal produccion mandarinas: %d ",totalMandarinas);
  76. }
  77.  
  78. int preguntarParcelas(){
  79. int numeroParcelas;
  80.  
  81. do{
  82. printf("Ingrese la cantidad de parcelas: ");
  83. scanf("%d",&numeroParcelas);
  84. }while(numeroParcelas<=0);
  85.  
  86. return numeroParcelas;
  87. }
  88.  
  89. int preguntarNaranjas(){
  90. int numeroNaranjas;
  91.  
  92. do{
  93. printf("\nIngrese la cantidad de naranjas: ");
  94. scanf("%d",&numeroNaranjas);
  95.  
  96. }while(numeroNaranjas <= 0);
  97.  
  98. return numeroNaranjas;
  99. }
  100.  
  101. int preguntarMandarinas(){
  102. int numeroMandarinas;
  103.  
  104. do{
  105. printf("\nIngrese la cantidad de mandarinas: ");
  106. scanf("%d",&numeroMandarinas);
  107. }while(numeroMandarinas <= 0);
  108.  
  109. return numeroMandarinas;
  110. }
  111.  
En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: No puedo sumar las parcelas, sólo el total de naranjas y mandarinas [C]
« Respuesta #5 en: 20 Octubre 2017, 22:49 pm »

Hola,  lo comentado, el mismo código pero con  linked list y estructuras de datos.

Cualquier comentario es bienvenido.

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6.  typedef struct{
  7. int naranjas;
  8. int mandarinas;
  9. }type_parcela;
  10.  
  11. typedef struct{  
  12. type_parcela * val;
  13. void * next;
  14. }node;
  15.  
  16. int preguntarNaranjas();
  17. int preguntarMandarinas();
  18. int preguntarParcelas();
  19. void printResumen(node * produccion);
  20. type_parcela * crearParcela(int naranjas, int mandarinas);
  21. void push(node * head, type_parcela * val) ;
  22. void producir(node *produccion);
  23.  
  24.  
  25.  
  26.  
  27. int main(int argc, char *argv[]) {
  28.  
  29. int numeroParcelas = preguntarParcelas();
  30.  
  31. int i;  
  32. node *produccionTotal = (node *) malloc(sizeof(node*));
  33.  
  34. for(i = 0 ; i < numeroParcelas ; i++){
  35. producir(produccionTotal);
  36. }
  37.  
  38. printResumen(produccionTotal);
  39.  
  40. return 0;
  41. }
  42.  
  43. void producir(node *produccion){
  44.  
  45. int mandarinas = preguntarMandarinas();
  46.  
  47. int naranjas = preguntarNaranjas();  
  48.  
  49. push(produccion, crearParcela(naranjas, mandarinas));
  50. }
  51.  
  52.  
  53. void push(node * head, type_parcela * val) {
  54.    node * current = head;
  55.  
  56.    while (current->next != NULL) {
  57.        current = current->next;
  58.    }
  59.  
  60. if(!current->val){
  61. //el elemento actual no tiene un valor asignado
  62. current->val = val;
  63. return ;
  64. }
  65.  
  66.    /* now we can add a new variable */
  67.    current->next = malloc(sizeof(node*));
  68.    ((node*)current->next)->val = val;
  69.    ((node*)current->next)->next = NULL;
  70. }
  71.  
  72.  
  73.  
  74. type_parcela * crearParcela(int naranjas, int mandarinas){
  75.  
  76. type_parcela * parce = (type_parcela *) malloc(sizeof(type_parcela*));
  77.  
  78. parce->naranjas = naranjas;
  79. parce->mandarinas = mandarinas;
  80.  
  81. return parce;
  82. }
  83.  
  84.  
  85. void printResumen(node * produccion){
  86. int totalNaranjas = 0;
  87. int totalMandarinas = 0;
  88. int totalProduccionParcela = 0;
  89.  
  90. int i = 0;
  91.  
  92. node * current = produccion;
  93.  
  94.    while (current) {
  95. totalNaranjas += current->val->naranjas;
  96. totalMandarinas += current->val->mandarinas;
  97. totalProduccionParcela = current->val->naranjas + current->val->mandarinas;
  98.  
  99. printf("\nParcela #%d: Produccion: %d ",i, totalProduccionParcela);
  100. i++;
  101.  
  102.        current = current->next;
  103.    }
  104.  
  105.  
  106. printf("\nTotal produccion naranjas: %d ",totalNaranjas);
  107. printf("\nTotal produccion mandarinas: %d ",totalMandarinas);
  108. }
  109.  
  110.  
  111.  
  112.  
  113. int preguntarParcelas(){
  114. int numeroParcelas;
  115.  
  116. do{
  117. printf("Ingrese la cantidad de parcelas: ");
  118. scanf("%d",&numeroParcelas);
  119. }while(numeroParcelas<=0);
  120.  
  121. return numeroParcelas;
  122. }
  123.  
  124. int preguntarNaranjas(){
  125. int numeroNaranjas;
  126.  
  127. do{
  128. printf("\nIngrese la cantidad de naranjas: ");
  129. scanf("%d",&numeroNaranjas);
  130.  
  131. }while(numeroNaranjas <= 0);
  132.  
  133. return numeroNaranjas;
  134. }
  135.  
  136. int preguntarMandarinas(){
  137. int numeroMandarinas;
  138.  
  139. do{
  140. printf("\nIngrese la cantidad de mandarinas: ");
  141. scanf("%d",&numeroMandarinas);
  142. }while(numeroMandarinas <= 0);
  143.  
  144. return numeroMandarinas;
  145. }
  146.  
  147.  
En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como puedo sumar esto???
Programación Visual Basic
Belial & Grimoire 6 2,169 Último mensaje 20 Julio 2007, 06:08 am
por matoreggae
AYUDA SOLO DESEO SUMAR LAS CONDICIONES (IF,ELSE)
.NET (C#, VB.NET, ASP)
trunca 8 3,684 Último mensaje 7 Abril 2009, 18:56 pm
por DarkItachi
Wepcrack: Exito Total; Conexion: Solo con otro pc
Hacking Wireless
ilomo 0 2,405 Último mensaje 23 Febrero 2012, 17:36 pm
por ilomo
Total Boox: paga sólo lo que lees
Noticias
wolfbcn 0 1,281 Último mensaje 2 Noviembre 2012, 21:34 pm
por wolfbcn
Como puedo sumar valores usando 1 solo txtbox en C#
.NET (C#, VB.NET, ASP)
Ila26 8 10,681 Último mensaje 2 Septiembre 2014, 05:01 am
por elezekiel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines