Arquivo

Posts Tagged ‘Vídeos’

Ponteiros

terça-feira, 21/09/2010 Deixe um comentário

Video sobre ponteiros (para quem sabe inglês):

Primeira Prova de Programação 2 (2010/1)

terça-feira, 21/09/2010 Deixe um comentário

Pratique o que você aprendeu resolvendo algumas provas passadas:

Clique aqui para ver a Primeira Prova de Programação 2 (2010-1)

Veja a resolução da prova a seguir:

(Observação: As respostas a seguir não manipulam arquivos de entrada)

Arquivo entrada_saida.c:

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

Curso *le_curso (int n) {
 /* A funcao recebe como parametro o numero de cursos */
 int i;
 Curso *v = (Curso *)malloc (n * sizeof (Curso));

 for (i = 0; i < n; i++) {
 /* Leitura de cada curso, a ser gravada em v[i] */
 scanf ("%s", v[i].codigo);
 scanf ("\n%[^\n]", v[i].nome);
 scanf ("%d", &v[i].n_vagas);
 scanf ("%d", &v[i].n_inscritos);
 }
 return v;
}

void le_candidato (Curso *cursos, int n, char *cod) {
 int i, pos;

 for (i = 0; i < n && strcmp (cursos[i].codigo, cod) != 0; i++);

 if (i >= n) {
 printf ("ERRO: Codigo do curso (%s) inexistente.\n", cod);
 exit (1);
 }

 pos = i;

 /* Se chegar ateh aqui, o curso que eu quero esta na posicao pos */
 cursos[pos].v = (Candidato **)malloc (cursos[pos].n_inscritos * sizeof (Candidato *));

 for (i = 0; i < cursos[pos].n_inscritos; i++) {
 cursos[pos].v[i] = (Candidato *)malloc (sizeof (Candidato));
 scanf ("\n%[^\n]", cursos[pos].v[i]->nome);
 scanf ("%s", cursos[pos].v[i]->inscr);
 scanf ("%lf", &cursos[pos].v[i]->nota);
 }
}

void imprime_dados (Curso *v, int n) {
 int i, j;

 for (i = 0; i < n; i++) {
 printf ("COD: %s\n", v[i].codigo);
 printf ("NOME: %s\n", v[i].nome);
 printf ("VAGAS: %d\n", v[i].n_vagas);
 printf ("INSCRITOS: %d\n", v[i].n_inscritos);
 for (j = 0; j < v[i].n_inscritos; j++) {
 printf ("\tNOME: %s\n", v[i].v[j]->nome);
 printf ("\tINSCRICAO: %s\n", v[i].v[j]->inscr);
 printf ("\tNOTA: %.2f\n", v[i].v[j]->nota);
 }
 }
}

Arquivo entrada_saida.h:

/* Biblioteca das funcoes implementadas em entrada_saida.c */

Curso *le_curso (int n);
void le_candidato (Curso *cursos, int n, char *cod);
void imprime_dados (Curso *v, int n);

Arquivo estruturas.h:

/* Arquivo com as estruturas Candidato e Curso */

typedef struct {
 char nome[50];
 char inscr[20];
 double nota;
} Candidato;

typedef struct {
 char codigo[10];
 char nome[50];
 int n_vagas;
 int n_inscritos;
 Candidato **v; /* vetor que armazenará os alunos inscritos no curso */
} Curso;

Arquivo funcoes.c:

#include <stdio.h>
#include "estruturas.h"

void ordena_notas (Candidato **v, int n) {
 int i, trocou = 1;
 Candidato *aux;

 while (trocou) {
 trocou = 0;
 for (i = 0; i < n-1; i++) {
 if (v[i]->nota < v[i+1]->nota) {
 aux = v[i];
 v[i] = v[i+1];
 v[i+1] = aux;
 trocou = 1;
 }
 }
 }
}

void aprovados (Curso c) {
 int i;

 ordena_notas (c.v, c.n_inscritos);

 printf ("Aprovados em %s:\n", c.codigo);
 for (i = 0; i < c.n_vagas && i < c.n_inscritos; i++) {
 printf ("\t%s %.2f\n", c.v[i]->nome, c.v[i]->nota);
 }

 printf ("Suplentes em %s:\n", c.codigo);
 for (; i < c.n_vagas+10 && i < c.n_inscritos; i++) {
 printf ("\t%s %.2f\n", c.v[i]->nome, c.v[i]->nota);
 }

}

Arquivo funcoes.h:

void ordena_notas (Candidato **v, int n);
void aprovados (Curso c);

Arquivo main.c:

#include <stdio.h>
#include "estruturas.h"
#include "entrada_saida.h"
#include "funcoes.h"

int main () {
 int n, i;
 Curso *v;
 char cod[10];

 printf ("Digite o numero de cursos: ");
 scanf ("%d", &n);

 v = le_curso (n);

 for (i = 0; i < n; i++) {
 scanf ("%s", cod);
 le_candidato (v, n, cod);
 }

 imprime_dados (v, n);

 for (i = 0; i < n; i++) {
 aprovados (v[i]);
 }

 return 0;
}

Por fim, os alunos de 2010/1 se preparando para a primeira prova de Programação 2:

😛