Posts Tagged ‘Vídeos’
Ponteiros
terça-feira, 21/09/2010
Deixe um comentário
Video sobre ponteiros (para quem sabe inglês):
Categorias:Programação 2
Material Complementar, Vídeos
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:
😛
Categorias:Programação 2
Exercícios, Exercícios Resolvidos, Provas Passadas, Vídeos