Autor
|
Tema: Invertir un arreglo de enteros en lenguaje C.- (Leído 9,711 veces)
|
NOB2014
Desconectado
Mensajes: 366
|
Hola. Esto debe ser sencillo pero no logro resolverlo, el caso es que no me acepta esta línea de código.- //for(i=longitud; i>=0; i--,j++)
Me da el siguiente error, no al compilar sino al ejecutar.- #include <stdio.h> #include <string.h> int main(void){ unsigned int enteros[]={15,12,28,18,05,33,21},i=0, longitud=0, copia[7], j=0; longitud = sizeof enteros / sizeof *enteros; for(i=0; i<longitud; i++){ } //for(i=longitud; i>=0; i--,j++){ for(i=longitud; i>0; i--,j++){ copia[j] = enteros[i]; } for(i=0; i<longitud; i++){ } return 0; }
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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
Mensajes: 3.412
ASMático
|
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
Mensajes: 1.211
|
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
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola. ¿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
Mensajes: 366
|
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
Mensajes: 3.412
ASMático
|
|
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
Mensajes: 1.639
|
¿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: copia[j] = enteros[i]; /* La forma equivalente utilizando el operador "*": */ *(copia + j) = *(enteros + i);
Una de las excepciones es el operador sizeof, en tu caso: 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
Mensajes: 1.314
|
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 : int .....copia[7]...
hacerlo como: ....................................... int *copia; longitud = sizeof enteros / sizeof (enteros[0]); copia = malloc(longitud*sizeof (int)); .................................... *(copia + j) = *(enteros + i); ..................................... free(copia); return 0; }
Lo del enteros[0] es por complementar. ¡¡¡¡ Saluditos! ..... !!!!
|
|
« Última modificación: 16 Enero 2014, 20:03 pm por leosansan »
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
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.-
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con arreglo de enteros
Programación C/C++
|
Calensito
|
3
|
3,211
|
6 Octubre 2010, 15:33 pm
por Calensito
|
|
|
Una duda concatenando un arreglo de enteros[C]
Programación C/C++
|
flacc
|
7
|
8,783
|
16 Julio 2012, 05:55 am
por BlackZeroX
|
|
|
pregunta sobre enteros en lenguaje c
Programación C/C++
|
mataliebres
|
3
|
2,380
|
20 Febrero 2015, 00:33 am
por mataliebres
|
|
|
Lenguaje C:apuntador a arreglo de enteros y arreglo de apuntadores a enteros.
Programación C/C++
|
NOB2014
|
2
|
2,679
|
27 Noviembre 2015, 12:59 pm
por NOB2014
|
|
|
Arreglo de apuntadores vs. arreglo común en lenguaje C.
Programación C/C++
|
NOB2014
|
1
|
3,285
|
1 Octubre 2016, 23:29 pm
por dato000
|
|