Autor Tema: curso fundamentos de programación I, ejercicio en c arrays o arreglos (lenguajeC  (Leído 4410 veces)

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Buenas tardes amigos estoy siguiendo este curso entre el libro aprender a programar ( comprado en esta web) y la misma web, y en el libro te lleva  un recorrido distinto, te hace escribir código en c, mirar muchos ejemplos y la verdad es que se hace muy ameno y aprendes mucho y hoy me he decidido ha hacer mi primer pinito en c, y como me imaginaba me ha dado un poco de quebradero de cabeza pero bueno ahí lo llevo.

En una linea me da error al compilar codebloks y no hay manera os dejo el código a ver si me podéis ayudar, no sé si aquí va bien el código de codebloks ya que es el primero que pongo pero bueno ya me direis algo.

Saludos y gracias por vuestro tiempo

Ejercicio Nº 18 del libro página 155

Código: [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/*Algoritmo notas de clase, ejercicio 18, página 155 del libro aprender aprogramar*/

int main()
{
   int nota = 0;
   int i = 0;
   int aprobados = 0;
   int suspensos = 0;
   int dieces = 0;
   int ceros = 0;

    i = 1;
    while (i<=35){
        scanf("nota: %d", nota);
        if (i >= 5) {
            aprobados = aprobados +1;
        }
        else{
            suspensos = suspensos +1;
        }
        if (i = 10){
            dieces = dieces +1;
        }
        if (i = 0){
            ceros = ceros +1;
        }
        i = i + 1;


    }
    do
        printf("% de aprobados es: %d", (aprobados/35)*100);
        printf("% de suspensos es: %d", (suspensos/35)*100);  > Aquí  da error
        printf("Obtienen un 10 un total de ",dieces, "alumnos");
        printf("Obtienen un 0 un total de ", ceros, "alumnos");

        return 0;
}


   
« Última modificación: 24 de Mayo 2016, 14:25 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:curso fundamentos de programación I, Intento de ejercicio en c.
« Respuesta #1 en: 20 de Mayo 2016, 08:37 »
Hola Pandemia

Tienes varios errores:

Al usar while (i<=35) significa que la variable i es la variable de control del bucle. Es decir, que esta variable sirve para contar: 1, 2, 3, 4, 5, ... En cada pasada del bucle se incrementa en una unidad: i = i + 1;

if (i >= 5) {
            aprobados = aprobados +1;
        }

Aquí estás confundiendo la variable para contar con la nota del alumno. i no es la nota del alumno, es simplemente una variable que se usa para contar.

Fíjate en la solución propuesta. i es la variable para contar mientras que nota(i) es la nota del alumno. Esto significa que nota(1) sería la nota del primer alumno, nota(2) la nota del segundo alumno y así sucesivamente. Si lo haces en C, los índices de arrays en C empiezan por cero, por lo que la nota del primer alumno será nota(0), la segunda nota(1) y así. Tienes que tener cuidado con los índices de arrays en C: siempre empiezan en cero.

Tienes otro error aquí: scanf("nota: %d", nota);

Eso lo pides dentro del bucle, y ¿dónde usas esa variable después? No la usas. Si no la usas ¿por qué? ¿cómo vas a hacer cálculos si no usas la nota?


Para entender este ejercicio te propongo que vayas poco a poco.

Haz lo siguiente: crea un programa donde declares un array de 10 elementos de tipo numérico entero. Luego mediante un bucle, pide al usuario que introduzca los diez valores numéricos. Luego, mediante un bucle, muestra los diez valores numéricos por pantalla.

Una vez hagas eso pégalo aquí y te indicaré el siguiente paso.

Saludos

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Re:curso fundamentos de programación I, Intento de ejercicio en c.
« Respuesta #2 en: 23 de Mayo 2016, 22:38 »
Buenas noches Alex, llevo todo el finde semana con el ejercicio que me propusiste, buscando información haber si me desatascaba pero no hay manera, no logro pedir por pantalla y que salga el numero al introducirlo el usuario, me salen los números del array, el array lo he inicializado en 1 para que se vea del 1 al 10 ( ya que si no se iniciaría en 0 y se vería del 0 al 9 ) , ya te digo debe de ser una tontería pero no doy con ella es que aun estoy muy verde pero bueno no me rindo y seguiré intentando si me echas una mano te dejo el código para que le eches un vistazo.
Gracias por tiempo de antemano.

Saludos.

Código: [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int i = 1;
    int numeroAlumnos[10];




    for (i=1; i<=10; i++){

        numeroAlumnos[i]=i;
        printf("Introduce un valor numerico: %d\n", numeroAlumnos[i]);
        scanf("%d", numeroAlumnos);

        if (i <= 10){
            printf("Aqui mostramos los 10 valores numericos: %d\n", numeroAlumnos[i]);

        }

    }



   

Gracias de nuevo y ya me contaras donde meto la pata.   

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, entender los arrays en C no es fácil, pero con un poco de esfuerzo se puede lograr.

Lo primero que tienes que olvidarte es de empezar los índices de los arrays en 1.

En C (y en casi todos los lenguajes) los índices de array comienzan en cero.


Si declaras int numeroAlumnos[10]; los índices que puedes usar son 0, 1, 2, 3, 4, 5, 6, 7, 8, 9


No puedes usar el índice 10. Si lo haces, el resultado será erróneo (incluso aunque no te salte ningún mensaje de error). En otros lenguajes al intentar acceder a un índice que no existe te salta un error (sería preferible). En C no te salta un error. El programa parece que funciona pero está utilizando una dirección de memoria incorrecta y no responderá bien.

Por tanto: ahí tienes el fallo en tu programa. O al menos el primer fallo.

Corrígelo y cuando lo hayas corregido haz pruebas y vuelve a escribir con las dudas.

Nota: Si declaras int numeroAlumnos[3]; los índices que puedes usar son 0, 1, 2

Ponte varios ejemplos, siempre empezando con cero. Es un poco más lioso pero tienes que aprender esto para programar. Para plantear los programas (por ejemplo para plantear pseudocódigo) no te es necesario, pero para C sí te es necesario empezar en 0.

Saludos.

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Buenas tardes Alex, perdona por tardar tanto en contestar es que he estado liado con otras cosas pero ya estoy aquí otra vez, lo de que los arrays se inicializan en cero lo tengo claro, en el ejercicio que puse es una prueba que hice pero luego se me olvidó cambiar , fallo mio lo siento. El problema es que cuando pido el número por pantalla sale el primer array y de bajo puedo poner el número ,no sé cómo cambiarlo no hago nada más que hacer pruebas pero no hay manera, aquí te dejo el código haber si le puedes echar un vistazo y me sacas de la duda por favor. Gracias por tu tiempo me sirve de mucha ayuda.

Código: [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int i = 0;
    int numeroAlumnos[9];

    for (i=0; i<=9; i++)
    {

        numeroAlumnos[i]=i;
        printf("Introduce un valor numerico: %d\n", numeroAlumnos[i]);
        scanf("%d", numeroAlumnos);

        if (i <= 9)
        {
            printf("Aqui mostramos los 10 valores numericos: %d\n", numeroAlumnos[i]);

        }


    }

    return 0;


}


 

Saludos y gracias de nuevo.

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola Pandemia.

El problema lo tienes en esta línea:

Código: [Seleccionar]
printf("Introduce un valor numerico: %d\n", numeroAlumnos[i]);
Lo que estas haciendo es mostrar el valor de numeroAlumnos, así que para que no te muestre el valor que contiene, puedes dejar esa línea de la siguiente forma:

Código: [Seleccionar]
printf("Introduce un valor numerico: \n");
y si lo que quieres es poder introducir los número en la misma línea donde te pide la introducción del número, también puedes quitar el salto de línea "\n", porque despues de introducir el dato y pulses intro, se introducirá un salto de línea.

Saludos. ;D
« Última modificación: 08 de Junio 2016, 17:50 por pedro,, »

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Ok y lo tenía delante de mis narices y no me había dado cuanta, gracias por al ayuda como siempre me sacas de muchas dudas Pedro.

Saludos. :)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".