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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Invertir un arreglo de enteros en lenguaje C.-
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Invertir un arreglo de enteros en lenguaje C.-  (Leído 9,697 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Invertir un arreglo de enteros en lenguaje C.-
« en: 14 Enero 2014, 22:00 pm »

Hola.
Esto debe ser sencillo pero no logro resolverlo, el caso es que no  me acepta esta línea de código.-

Código
  1. //for(i=longitud; i>=0; i--,j++)

Me da el siguiente error, no al compilar sino al ejecutar.-



Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void){
  5. unsigned int enteros[]={15,12,28,18,05,33,21},i=0, longitud=0, copia[7], j=0;
  6. longitud = sizeof enteros / sizeof *enteros;
  7.  
  8. printf("\n Original....:");
  9. for(i=0; i<longitud; i++){
  10. printf("%d ", enteros[i]);
  11. }
  12.  
  13. //for(i=longitud; i>=0; i--,j++){
  14. for(i=longitud; i>0; i--,j++){
  15. copia[j] = enteros[i];
  16. }
  17.  
  18. printf("\n\n Invertido...:");
  19. for(i=0; i<longitud; i++){
  20. printf("%d ", copia[i]);
  21. }
  22.  
  23. return 0;
  24. }

Bueno espero de vuestra ayuda.-       
Saludos.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #1 en: 14 Enero 2014, 22:07 pm »

¡Buenas!

En el segundo bucle, el primer índice es longitud, que está fuera de rango. Debería ser longitud - 1, y la condición de continuidad del for debería ser i >= 0

Cámbialo y nos cuentas como va.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #2 en: 14 Enero 2014, 22:13 pm »

El problema es que pusiste unsigned int.

¿Qué número POSITIVO no es mayor o igual a 0?
O pones i<longitud+1 o pones int en vez de unsigned int.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #3 en: 14 Enero 2014, 22:24 pm »

El problema es que pusiste unsigned int.

¿Qué número POSITIVO no es mayor o igual a 0?
O pones i<longitud+1 o pones int en vez de unsigned int.
Un consejo NOB2014, no uses variables unsigned si tienes que hacer condiciones. Puede provocar errores extraños si te despistas.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #4 en: 14 Enero 2014, 22:55 pm »

Hola.

Citar
¿Qué número POSITIVO no es mayor o igual a 0?
O pones i<longitud+1 o pones int en vez de unsigned int.

De acuerdo, inocente error el mío, i<longitud+1 no me funciona.
Quitando unsigned si.-

Gracias a los tres.- 
Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #5 en: 14 Enero 2014, 23:12 pm »

Hola.
Una consulta más, ¿tiene sentido hacer este mismo código con punteros teniendo en cuenta que el nombre de un arreglo es un apuntador, o el nombre de un arreglo es la dirección del primer elemento que contiene el arreglo?.-
Si esto es conveniente necesitaría toda la teoría posible porque estoy estudiando apuntadores y nunca pude resolver esta incógnita, y además ¿sería más conveniente con arreglos de punteros?.- 

Saludos y gracias.-
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re:
« Respuesta #6 en: 14 Enero 2014, 23:14 pm »

I<longitud*
Es la forma q veo para usar unsigned.

Enviado desde mi ST21i mediante Tapatalk
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #7 en: 15 Enero 2014, 02:09 am »

¿tiene sentido hacer este mismo código con punteros
Ya los estas utilizando. El operador "[]" es uno binario y requiere que uno de sus operandos (no importa cual) sea un puntero.

teniendo en cuenta que el nombre de un arreglo es un apuntador, o el nombre de un arreglo es la dirección del primer elemento que contiene el arreglo?
No exactamente.

El identificador de un array usualmente resulta en la dirección en memoria de (un puntero a) su primer elemento, por ejemplo al utilizar los operadores "[]" y "*". En tu caso:
Código
  1. copia[j] = enteros[i];
  2.  
  3. /* La forma equivalente utilizando el operador "*": */
  4. *(copia + j) = *(enteros + i);

Una de las excepciones es el operador sizeof, en tu caso:
Código
  1. longitud = sizeof enteros / sizeof *enteros;
Da el resultado correcto porque la primera instancia de "enteros" denota (referencia) al array y resulta en el numero de bytes utilizados para almacenarlo.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #8 en: 15 Enero 2014, 20:30 pm »

Hola.
.............................
¿tiene sentido hacer este mismo código con punteros?
.............................................................

Como apunto rir3760 ya lo estas haciendo.

Pero para que quede todo como punteros en lugar de declarar la variable copia como un array, tal vez sería más propio, que no obligatorio, declarala como como puntero directamente.

Vamos que en lugar de :


Código
  1.    int .....copia[7]...
  2.  

hacerlo como:

Código
  1.    .......................................
  2.    int  *copia;
  3.    longitud = sizeof enteros / sizeof (enteros[0]);
  4.    copia = malloc(longitud*sizeof (int));
  5.    ....................................
  6.        *(copia + j) = *(enteros + i);
  7.    .....................................
  8.    free(copia);
  9.    return 0;
  10. }
  11.  

Lo del enteros[0] es por complementar.

¡¡¡¡ Saluditos! ..... !!!!



« Última modificación: 16 Enero 2014, 20:03 pm por leosansan » En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Invertir un arreglo de enteros en lenguaje C.-
« Respuesta #9 en: 16 Enero 2014, 00:33 am »

Hola.
Muchas gracias a ambos, que lastima que todavía no llegué a estudiar memoria dinámica, creo que viene más allá de los apuntadores.-

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines