[C] Elementos de un array

Iniciado por Amelie, 22 Noviembre 2018, 03:04 AM

0 Miembros y 1 Visitante están viendo este tema.

Amelie

Hola, he implentado el siguiente código en lenguaje C para generar una lista de números consecutivos desde 1 a n:

#include <stdio.h>
   
int main(void){
    printf("Ingresar cantidad de elementos: ");
    int r;
    scanf("%d", &r);
    int i = 0;
    int array[r];
     
    do {
        array[r - 1] = r;
        r = r- 1;
        ++i;
    } while (r > 0);
    printf("Lista: \n");
    for(r = 0; r < i; ++r)
        printf("%d \n", array[r]);
    return 0;
}


Mi problema ahora es el siguiente: en el mismo código arriba, quiero crear un conjunto (digamos A), en el cuál todos los elementos del array se guarden en A de la forma siguiente:

int A[] = {1,2,3,4,5,6,7,8,9,10};

Esto en el caso de haber ingresado 10 por teclado. ¿Alguien podría ayudarme con este problema?
Saludos.  :-*

K-YreX

Creo que no entiendo bien la pregunta porque ese programa que tienes si lo ejecutas en introduces 10, ya te está creando un conjunto (que no se llama A, se llama array) en el que tienes los números almacenados en el orden que tú quieres que estén.
Entonces no sé dónde está el problema :huh:

Igual te refieres a que quieres guardar todo el contenido de <array> en otra variable <A>. Es eso??
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Amelie

Gracias por responder. Exactamente a eso último me refiero, guardar todo el contenido (sigamos con el ejemplo de 10) en otra variable, en este caso A. Esto debido a que en otro programa debo usar lo siguiente:

int A[] = {1,2,3,4,5,6,7,8,9,10};

Espero hacerme entender. Gracias por responder :)

K-YreX

Cuando declaras un array se puede inicializar directamente si conoces todos sus datos, es decir, puedes hacer esto:

int array[TAM] = {1,2,3,4,5,...};


Pero en tu caso que no puedes conocer esos valores antes de la ejecución del programa, tienes que declarar el nuevo array vacío y copiar después todos los valores. Como esta copia se hace después de haber declarado el nuevo array, entonces ya no puedes hacer la forma rápida que sería (en tu caso):

int array[TAM] = {1,2,3,4,5,...};
int nuevoArray[TAM] = array;  // Esto no es correcto.


En vez de eso, debes hacer una copia elemento a elemento (como ejemplo):

int array[10] = {0,1,2,3,4,5,6,7,8,9};
int nuevoArray[10];
for(size_t i = 0; i < 10; i++)
    nuevoArray[i] = array[i];


Con esto tendrías el siguiente resultado:
array[10] = {0,1,2,3,4,5,6,7,8,9}
nuevoArray[10] = {0,1,2,3,4,5,6,7,8,9}

Espero haberte ayudado con esto.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

AlbertoBSD

Por que no hacerlo al mismo tiempo?



#include <stdio.h>
   
int main(void){
    printf("Ingresar cantidad de elementos: ");
    int r;
    scanf("%d", &r);
    int i = 0;
    int array[r],A[r];
     
    do {
        array[r - 1] = r;
A[i] = r;
        r = r- 1;
        ++i;
    } while (r > 0);
    printf("Lista: \n");
    for(r = 0; r < i; ++r)
        printf("%d \t", array[r]);
    printf("\nLista: \n");
    for(r = 0; r < i; ++r)
        printf("%d \t", A[r]);
    return 0;
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Amelie

Muchas gracias por la ayuda, me sirvió en demasía, ya que pude resolver el problema  ;-) ;-) ;D

K-YreX

#6
Cita de: AlbertoBSD en 22 Noviembre 2018, 03:47 AM
Por que no hacerlo al mismo tiempo?


#include <stdio.h>
int main(void){
   printf("Ingresar cantidad de elementos: ");
   int r;
   scanf("%d", &r);
   int i = 0;
   int array[r],A[r];
   do {
         array[r - 1] = r;
         A[i] = r;
         r = r- 1;
         ++i;
   } while (r > 0);
   printf("Lista: \n");
   for(r = 0; r < i; ++r)
        printf("%d \t", array[r]);
   printf("\nLista: \n");
   for(r = 0; r < i; ++r)
        printf("%d \t", A[r]);
   return 0;
}

Aunque hay un pequeño error, como la serie de números va decreciendo se van guardando los valores desde el final del array hacia el principio. Con eso corregido quedaría así:

do {
       array[r - 1] = r;
A[r - 1] = r; // Esta era la instruccion que guardaba el array <A> al reves que el array <array>
       r = r- 1;
       ++i;
} while (r > 0);


PD: Un tanto extraña y poco convencional esa forma de almacenar un array aunque funcionar claro que funciona. Una alternativa:

#include <stdio.h>

int main(void){
   printf("Ingresar cantidad de elementos: ");
   int r;
   scanf("%d", &r);
   int i = 0;
   int array[r],A[r];

   for(size_t i = 0; i < r; i++){
       array[i] = i;
       A[i] = i;
   }

   printf("Lista: \n");
   for(size_t i = 0; i < r; i++)
       printf("%d \t", array[i]);
   
   printf("\nLista: \n");
   for(size_t i = 0; i < r; i++)
       printf("%d \t", A[i]);
   
   return 0;
}


Edit: De esta manera evitas modificar el tamaño de <r> ya que representa el tamaño del array. Aunque no se va a modificar el tamaño por modificar <r> pero si el código fuese más grande puedes pensar que <r> vale el tamaño del array y como lo has modificado no es así y podrías tener problemas.

Y por último, sabéis por qué si citas un código en C aparecen "&#160" en la tabulación del código?? Eso en códigos entre etiquetas cpp no pasa. Y hay alguna forma de usar el tabulador?? Ya que eso de tener que usar muchos espacios para tabular bien el código... :-\
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

AlbertoBSD

#7
La verdad tenia duda de si realmente esto es lo que buscabas ya que el termino

CitarEsto en el caso de haber ingresado 10 por teclado.

Era un poco confuso.


Si es rara la forma de capturar los datos

Ya que si ingresas 0, el programa da errores con do-while

Saludos

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

K-YreX

He editado esto en mi post anterior pero como veo que habéis respondido mientras lo hacía, lo pregunto de nuevo para que no quede en el olvido:
Citar
Y por último, sabéis por qué si citas un código en C aparecen "&#160" en la tabulación del código?? Eso en códigos entre etiquetas cpp no pasa. Y hay alguna forma de usar el tabulador?? Ya que eso de tener que usar muchos espacios para tabular bien el código... :-\
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

AlbertoBSD

Cita de: YreX-DwX en 22 Noviembre 2018, 04:09 AM
Y por último, sabéis por qué si citas un código en C aparecen "&#160" en la tabulación del código?? Eso en códigos entre etiquetas cpp no pasa. Y hay alguna forma de usar el tabulador?? Ya que eso de tener que usar muchos espacios para tabular bien el código... :-\

Realmente no  lo habia notado ya que casi no cito post completos.

Al parecer es error del Geshi.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW