Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - alejandrodiaz

#1
Primero quisiera aclarar que soy novato programando, estoy apenas aprendiendo punteros y por eso no se lo he integrado al siguiente codigo.

Estoy intentanto realizar un programa para el control de notas. Ya logré fijar y mostrar los nombres y apellidos de los estudiantes, luego introduje los nombres de las materias en una variable char en el Main, para luego copiarlos con strcpy a cada estructura (Me imagino que hay mejores formas de hacerlo pero esta es la que mi ignorancia me permite, por ahora)

Mi problema es que al introducir las notas, el nombre de la primera materia se mantiene pero el resto de los nombres se pierde, mostrandome ASCII. Verifiqué antes de llegar a esa parte del código y los nombres se guardan bien pero despues de alli se daña. Que consejos me dan?

Aca el código:


#include<stdio.h>
#include<string.h>
#define MAX 10

typedef struct asignaturas{
char nombre[MAX];
int nota[4];
}asignatura;

typedef struct estudiantes{
char nombre[MAX];
char apellido[MAX];
asignatura materia[3];
}escolar;

escolar DatosAlum();
escolar IntroNota(int cant_alum,int indice);


int main(){

int cant_alum, i,j;
char nom_mate[3][MAX];


printf("Introduzca cantidad de alumnos: \n");
scanf("%d",&cant_alum);

escolar alumno[cant_alum];       //Declarando variable tipo struct "escolar"

for(i=0;i<cant_alum;i++){
printf("Alumno nro %d: \n", i+1);    
alumno[i]=DatosAlum();               //Introduciendo nombres y apellidos de alumnos
}

printf("Introduzca nombre de materias: \n");
for(i=0;i<3;i++){
printf("Materia nro %d: ",i+1);
fflush(stdin);
gets(nom_mate[i]);
}

for(i=0;i<cant_alum;i++){
for(j=0;j<3;j++){
strcpy(alumno[i].materia[j].nombre,nom_mate[j]);     //Aca copìo y pego los nombres en  las estructuras.
}
}


printf("Introduzca notas: \n");
for(i=0;i<cant_alum;i++){
printf("Alumno: %s %s\n",alumno[i].nombre,alumno[i].apellido);
for(j=0;j<3;j++){
printf("Materia: %s \n",alumno[i].materia[j].nombre);  //Aqui se daña mi codigo
                                                               //El primer nombre se imprime bien, el resto sale mal.
alumno[i]=IntroNota(cant_alum,j);
printf("valor de j= %d",j);
}
}


getch();
return 0;
}

escolar DatosAlum(){
escolar alumno;

printf("Nombre: ");
fflush(stdin);
gets(alumno.nombre);

printf("Apellido: ");
fflush(stdin);
gets(alumno.apellido);

return alumno;
}

escolar IntroNota(int cant_alum,int indice){
escolar alumno;
int i;

for(i=0;i<4;i++){
printf("Nota %d: \n",i+1);
scanf("%d",&alumno.materia[indice].nota[i]);
}

return alumno;
}
#2
Como evaluación final, me mandaron a analizar un programa que simula una lista con datos aleatorios hecho en lenguaje C,

Uso Dev-C++

Tengo dudas del funcionamiento de varios codigos que me impiden verlo claramente, espero me puedan ayudar.

Mi primera duda está relacionada con el siguiente codigo:

#define MX 9
int d;

randomize();
   for(d=rand(MX);d; ){
        d=random(MX);
}


En el Dev-C++ no me funciona el randomize, buscando vi que podía usar el srand() el cual haciendo algunas pruebas si me funciona. Pero mi duda esta en el for, nunca lo he usado así y me cuesta entenderlo, ya que en las paginas veo es el tipico (i=0;i<10;i++). No sabía que la parte de incremento se podía dejar vacía, no se si este ciclo está bien, me lo pueden aclarar?

2da Duda:

El programa tiene un printf de la siguiente manera:


int k;

printf("%c", (k%10? ' ' : '\n'));


Pienso que este printf está mal porque %c es para caracteres y lo que está despues de la coma es una división, lo que no entiendo de ella es el signo de interrogación (k%10?), acaso eso hace que sea valido usar %c ??



#3
Buenas, estoy aprendiendo en C y realizando ejercicios básicos que consigo de la web

El ejercicio me pide que imprima dos columnas una que vaya del 1 al 100 y otra del 100 al 1

Quisiera que me mostrara las columas de este modo:


Columna 1        Columna 2
       1                   100
       2                     99
       3                     98
       4                     97


Cada columna lleva un for, y de la manera en que los aplico me queda una columna sobre otra.

He buscado pero no encuentro nada identico en la web, he leido que no existe una funcion para hacer esto en C, solo usando los espacios en printf (eso hice pero me queda una sobre otra)

Entonces, ¿Se puede imprimir dos columnas paralelas en lenguaje C?

Gracias!
#4
Buenas, estoy aprendiendo a programar en C y tengo muchas dudas con respecto a guardar datos en los arreglos multidimensionales.

// Tengo un ejercicio que dice: Un instituto desea controlar los resultados de los alumnos en las diferentes asignaturas de sus cursos de informatica, el programa debe leer las calificaciones obtenidas en las diferentes asignaturas y visualizar en pantalla el numero de cada estudiante seguipo por la media del estudiantes y una lista de las calificaiones parciales de ese estudiante.

el programa visualizará tambien la calificacion media de todos los estudiantes en cada asignatura. //


Es la primera vez que hago un ejercicio como este, siempre he hecho cosas sencillas, el caso es que mi codigo va bien hasta el punto en que tengo que guardar las notas en los arrays, ya que en el modo en que lo hago se me sobreescribe las notas de un alumno sobre otra.  Para el instituto que lo hago no es por semestres sino por trimestres, tres trimestres en un año.

Al final me da datos erroneos, de otras partes de la memoria. Se que deberia usar punteros y funciones pero como dije soy novato y me confundo. Quiero ver primero que funciona y luego darle orden.

como seria la forma correcta de guardar las notas para cada alumno y materia?

este es mi codigo



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

//Declarando variables globales para que el usuario establezca limites en los ciclos FOR//
int cant_alum;
int cant_mate;
int cant_nota;

int main()
{
   //Arrays para nombres de alumnos y materias ---Arrays de caracteres---//
   char nom_alum[cant_alum][30];
   char nom_mate[cant_mate][40];

   //Arrays para notas de trayectos ---not_tra1 = notas del trayecto1--- //
   
   int  not_tra1[4][cant_nota];    
   int  not_tra2[4][cant_nota];
   int  not_tra3[4][cant_nota];

   //Llamando a las variables globales//
   cant_alum;
   cant_mate;
   cant_nota;

   //Enteros usados en los ciclos FOR//
   int i;
   int j;
   int k;


//Inicia el programa//
       printf("Cuantos alumnos desea registrar?: ");
       fflush(stdin);
       scanf("%d", &cant_alum);

           for (i=1; i<cant_alum+1; i++){
               printf("Alumno nro %d: ",i);
               fflush(stdin);
               gets(nom_alum[i]);
   }

       printf("\nCuantas materias desea registrar?: ");
       fflush(stdin);
       scanf("%d",&cant_mate);

           for(i=1; i<cant_alum+1; i++){
               printf("Materia nro %d: ",i);
               fflush(stdin);
               gets(nom_mate[i]);
           }

   printf("\nCuantas evaluaciones fueron por trayecto?: ");
   fflush(stdin);
   scanf("%d", &cant_nota);


//PARTE 2: GUARDAR DATOS. MAL HECHO//

           for(i=1; i<cant_alum+1; i++){
               printf("\n\n********** Alumno nro %d : %s **********\n" , i, nom_alum[i]);

                       for(j=1; j<cant_mate+1; j++){
                           printf("\n\nIngrese las notas parciales de %s\n", nom_mate[j]);

                               printf("\n===== Trayecto 1 =====\n\n");
                                   for (k=1; k<cant_nota+1; k++){
                                       printf("Nota %d: ", k);
                                       fflush(stdin);
                                       scanf("%d",&not_tra1[k]);
                           }
                               printf("\n===== Trayecto 2 =====\n\n");
                                   for (k=1; k<cant_nota+1; k++){
                                       printf("Nota %d: ", k);
                                       fflush(stdin);
                                       scanf("%d",&not_tra2[k]);
                           }
                               printf("\n===== Trayecto 3 =====\n\n");
                                   for (k=1; k<cant_nota+1; k++){
                                       printf("Nota %d: ", k);
                                       fflush(stdin);
                                       scanf("%d",&not_tra3[k]);
                           }
                       }
                   }

printf("Esto se muestra sin error");

//Aca si aplico ciclos FOR con printf para mostrar los valores guardados en los arreglos, todos los datos mostrados son erroneos//


getch();
return 0;
}



Al analizar pienso que guardar las notas de la forma ejemplo:

scanf("%d", &not_tra1 [k]);  no está bien hecho, creo que deberia ser &not_tra1
  •  ... donde "X" sea la variable pero no se como organizarlo, de las maneras que las he hecho todas malas.

    tambien para los arreglos de trayectos tengo

    not_tra1[4][cant_nota]; Donde 4 quise definir la cantidad de trayectos pero se ahora se que es un error porque no dejo crecer la matriz en filas, quisiera que sea automatica pero dejando [ ] vacio me tira error.


    Y por ultimo veo que guardar todas las notas de los mismos alumnos y materias de un trayecto en un solo arreglo  es una cantidad de numeros desorganizada.. pero con tanto lio no se como avanzar

    Espero me puedan ayudar, soy muy novato como ven... Gracias!
#5
Buenas a todos

Es mi segunda duda con respecto a arrays de caracteres, perdonen mi ignorancia, me estoy iniciando en programacion con C..

Tengo un ejercicio de arrays el cual dice:

Contar el numero de veces que cada letra mayuscula se producen en una linea de texto leida por el teclado y decir que caracteres se encontraron y cuantas veces se repitió cada uno.

He logrado hacer que cuente la cantidad de mayusculas encontradas a través de éste bucle


while(cadena[i] != NULL)
{
if ((cadena[i] >= 'A' && cadena[i] <= 'Z'))
contador++;

i++;
}


Pero no sé como hacer para que me diga cuantas veces se repitió A,B,C etc..

Estoy usando una cadena unidimensional para guardar el texto del teclado.

Otra cosa muy importante y es lo que me está impidiendo continuar, ¿como se hace para mostrar un caracter almacenado en un elemento del array?

Me gustaria que mostrará el mensaje como:

0=H
1=O
2=L
3=A

y asi conocer en que indice se encuentra cada caracter para despues comparar cada uno con un if /else if, pero sin resultado positivos, he intentado con:


    char cadena[20];
    printf("ingrese una cadena:");
    scanf("%s", cadena);

    int i=0;
    for(i=0;i<20;i++){
        cadena[i]=i;
        printf("indice %d= %c\n",i,cadena[i])
    }
    getch();
    return 0;


Eso es lo más cerca que he estado de conseguir la lista pero me muestra simbolos y caritas  :huh:

Espero me hayan entendido y me puedan orientar.

OJO: ya busque en el foro "programacion c/c++", como "mayusculas" y solo me muestra cinco post, ninguno como éste.
#6
Buenas a todos

Soy muy novato programando y me estoy iniciando con lenguaje C, así que pido que disculpen mi gran ignorancia.

Tengo un ejercicio de arrays el cual dice:

Se tiene una lista de n nombres, escribir un programa que solicite el nombre de un alumno y busque el nombre del alumno en la lista.

Para esto no debo usar ni punteros ni registros, solo array y lo más básico de C (bucles etc).

He leído y he visto en youtube muchos ejercicios de comparación de cadenas pero siempre tienen un solo nombre establecido, no una lista, ejemplo:

char nombre[10] ="maria";
char nombre2[10];


Allí se supone que en "nombre2" se guarda lo que introduce el usuario y se compara usando ctrcmp con el array "nombre".

Hasta allí todo bien, pero mi pregunta es ¿si es posible tener mas nombres guardados en el array "nombre" y como hacerlo?

Quise guardar varios nombres en una array de este modo:

char [10]= "maria";"jose";"luis";

Pero luego supe que una array solo almacena un caracter por cada elemento (pense que almacenaba cadenas enteras en cada elemento). No sé si es que deba crear más arrays, pero en una lista con más de cien alumnos sería un codigo muy extenso.

En fin, espero me hayan entendido y me puedan ayudar.