Algoritmo e Estrutura de Dados I

Slides:



Advertisements
Apresentações semelhantes
Um programa em C Bibliotecas Variáveis globais
Advertisements

Estruturas de Repetição
Linguagem C Marco Reis.
Aula 10 Algoritmos de Busca
Programação II Estruturas de Dados
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Universidade Federal do Espírito Santo Programação II Vetores Professora: Norminda Luiza.
Linguagem C Strings.
Linguagem C Funções.
Vetores, Matrizes e Funções
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Ponteiros em Linguagem C
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Linguagem C Estruturas de Seleção.
Estruturas de Dados Homogêneas Multidimensionais – Matrizes
Matrizes e Funções - Continuação
Fundamentos de Programação 1
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação II Estruturas de Dados Aula 02 - continuação
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 10 - Armazenamento de Dados em Registros
Aula 6 - Estruturas de Controle
Técnicas de Desenvolvimento de Programas
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Procedimentos e Funções
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Introdução à Linguagem C
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 6: Cadeias de Caracteres
Aula 10 Algoritmos de Busca
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Aula 5 - Exercícios Prof. Leandro M. Almeida.
Revisão Luis Antonio Tavares
Comando de Seleção switch
Programação de Computadores I – Arquivos
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Introdução a Programação
Algoritmo e Estrutura de Dados I
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Algoritmo e Estrutura de Dados I
Algoritmo e Estrutura de Dados I
Algoritmo e Estrutura de Dados I Aulas 12 – Linguagem C Strings Márcia Marra
Linguaguem de Programação II
Estruturas Homogêneas – Vetores e Matrizes
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Algoritmo e Estrutura de Dados I Aulas 14 – Linguagem C Matriz Márcia Marra
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
PCI- Vetores Profa. Mercedes Gonzales Márquez. Aula 5 - VetoresAlgoritmos e Estruturas de Dados I Sequência de valores todos do mesmo tipo Nome único.
Programação de Computadores I – Arquivos Profa. Mercedes Gonzales Márquez.
Algoritmo e Estrutura de Dados I Linguagem C – Comandos if-else-if e Switch Márcia Marra.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
1 CCO 016 FUNDAMENTOS DE PROGRAMAÇÃO Universidade Federal de Itajubá Prof. Dr. Edison Oliveira de Jesus.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C” 1.
Fundamentos de Programação 1 Linguagem C Slides 03 – ‘Vetores’ Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “Vetores” 1.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C” 1.
Transcrição da apresentação:

Algoritmo e Estrutura de Dados I Aulas 10 e 11 – Linguagem C Vetores e Ponteiros Márcia Marra marsha@dcc.ufmg.br

Vetores Declaração de vetores no C Exemplos de vetores: tipo nome_variavel[tamanho]; Exemplos de vetores: float balance[100]; char p[10]; int numeros[tam]; float exemplo[20]; Acesso pode ser realizado através de índices exemplo[0] exemplo[3] exemplo[1] exemplo[4] O que acontece no caso exemplo[30]?

Exemplo 1 – Leitura de números #include <stdio.h> int main () { int num[100]; /* Declara um vetor de inteiros de 100 posicoes */ int count=0; int totalnums; do printf ("\nEntre com um numero (-999 p/ terminar):"); scanf ("%d",&num[count]); count++; } while ( num[count-1] != -999); totalnums=count-1; printf ("\n\n\n\t Os números que você digitou foram:\n\n"); for (count=0;count<totalnums;count++) printf (" %d",num[count]); return(0); }

Exemplo 1 Existe algum problema com o programa anterior? O que acontece se tentarmos ler mais números do que a variável que foi alocada permite? BUGS!! Erros imprevisíveis! Como este programa poderia ser reescrito para resolver este problema?

Exemplo 1 – com restrição do número de valores lidos #include <stdio.h> int main () { int num[10]; /* Declara um vetor de inteiros de 100 posicoes */ int count=0; int totalnums; do printf ("\nEntre com um numero (-999 p/ terminar):"); scanf ("%d",&num[count]); count++; } while ( num[count-1] != -999 && count < 10); if (count < 10) totalnums=count-1; else totalnums=count; printf ("\n\n\n\t Os números que você digitou foram:\n\n"); for (count=0;count<totalnums;count++) printf (" %d",num[count]); return(0); }

Execução do Exemplo 1

Exemplo 2 A diretoria do ICEx deseja saber se existem alunos cursando, simultaneamente, Algoritmos e Estrutura de Dados I (AEDSI) e Cálculo Numérico (CN). Existem disponíveis na unidade de entrada os números de matrícula dos alunos de AEDSI (no máximo 150 alunos) e de CN (no máximo 220 alunos). Cada conjunto dos números de matrícula dos alunos de uma disciplina tem a matrícula fictícia 99999 no final. Formular um algoritmo que imprima o número de matrícula dos alunos que estão cursando estas disciplinas simultaneamente.

Exemplo 2 – Estrutura de Dados Este problema trata da verificação de ocorrência de um elemento de um conjunto em um outro conjunto. AEDS I ... 1 2 3 4 5 ... 150 151 CN ... 1 2 3 4 5 ... 220 221

Exemplo 2 (1/3) #include <stdio.h> int main() { int AEDSI[151]; int CN[221]; int i,j; // Leitura das matriculas de AEDSI i = 0; printf("Entre com a primeira matricula de AEDSI: "); scanf("%d", &AEDSI[i]); while (AEDSI[i] != 9999) { i++; printf("Entre com a proxima matricula de AEDSI: "); scanf("%d",&AEDSI[i]); }

Exemplo 2 (2/3) // Leitura das matriculas de CN i = 0; printf("Entre com a primeira matricula de CN: "); scanf("%d", &CN[i]); while (CN[i] != 9999) { i++; printf("Entre com a proxima matricula de CN: "); scanf("%d",&CN[i]); }

Exemplo 2 (3/3) i = 0; while (AEDSI[i] != 9999) { j = 0; while ( CN[j] != 9999 && AEDSI[i] != CN[j]) { j++; } if ( AEDSI[i] == CN[j]) { printf("Aluno %d esta matriculado em AEDSI e CN\n", AEDSI[i]); i++; return (0);

Exemplo 2 Para ler os números de matrículas dos alunos que cursam CN e AEDSI foi utilizado praticamente o mesmo código. O que poderia ser feito para evitar este uso repetido? Utilizar funções!!

Exemplo 2 utilizando funções (2/1) #include <stdio.h> // Funcao que le um determinado numero de matriculas ate que seja lida a matricula ficticia 9999 int leVetorMatricula ( int *x, char *nomeDisciplina) { int i; // Leitura das matriculas i = 0; printf("Entre com a primeira matricula de %s: ", nomeDisciplina); scanf("%d", &x[i]); while (x[i] != 9999) { i++; printf("Entre com a proxima matricula de %s: ", nomeDisciplina); scanf("%d",&x[i]); } return 0;

Exemplo 2 utilizando funções (2/2) int main() { int AEDSI[151]; int CN[221]; int i,j; char disciplinaAEDS[] = "AEDSI"; char disciplinaCN[] = "CN"; leVetorMatricula( AEDSI, disciplinaAEDS); leVetorMatricula( CN, disciplinaCN); i = 0; while (AEDSI[i] != 9999) { j = 0; while ( CN[j] != 9999 && AEDSI[i] != CN[j]) { j++; } if ( AEDSI[i] == CN[j]) printf("Aluno %d esta matriculado em AEDSI e CN\n", AEDSI[i]); i++; return (0);

Exemplo 2 – outra forma para passagem do vetor como parâmetro int leVetorMatricula ( int x[], char nomeDisciplina[]) { int i; // Leitura das matriculas i = 0; printf("Entre com a primeira matricula de %s: ", nomeDisciplina); scanf("%d", &x[i]); while (x[i] != 9999) { i++; printf("Entre com a proxima matricula de %s: ", nomeDisciplina); scanf("%d",&x[i]); } return 0;

Execução do exemplo 2

Exemplo 3 Escrever um algoritmo que faça reserva de passagens aéreas de uma companhia. Além da leitura do número de vôos e quantidade de lugares disponíveis, ler vários pedidos de reserva, constituídos do número da carteira de identidade do cliente e do número do vôo desejado. Para cada cliente, verificar se há disponibilidade no vôo desejado. Em caso afirmativo, imprimir o número da identidade do cliente e o número do vôo, atualizando o número de lugares dosponíveis. Caso contrário, avisar ao cliente da inexistência de lugares. Indicando o fim dos pedidos de reserva, existe um passageiro cujo número da carteira de identidade é 9999. Considerar fixo e igual a 37 o número de vôos da companhia.

Exemplo 3 – Estrutura de Dados Número dos Vôos Lugares Disponíveis

Exemplo 3 #include <stdio.h> // Define o numero de voos da companhia #define NUMVOOS 37 /* Funcao que lê um determinado numero de valores e armazena em um vetor */ int leVetor( int *x, int opcao) { int i = 0; if ( opcao == 1) printf("Entre com numero do primeiro voo: "); else printf("Entre com a disponibilidade de lugares no primeiro voo: "); scanf("%d", &x[i]); for (i = 1; i < NUMVOOS; i++) { printf("Entre com o numero do %d voo: ", i+1); printf("Entre com a disponibilidade de lugares no %d voo: ", i+1); scanf("%d",&x[i]); } return 0;

Exemplo 3 /* Funcao que realiza a busca de um numero de voo dentro do vetor com todos os voos disponiveis pela companhia aerea */ int buscaVoo( int *x, int voo, int *apont) { int resultado = -1; int i; // Percorre o vetor em busca do voo for (i = 0; i < NUMVOOS; i++) { if ( x[i] == voo ) { resultado = i; *apont = i; break; } return (resultado);

Exemplo 3 /* Funcao que verifica a disponibilidade de lugares em um determinado voo */ int verificaDisponibilidade(int *x, int posicaoVoo) { int resultado = 0; if ( x[posicaoVoo] > 0) { x[posicaoVoo] = x[posicaoVoo] - 1; resultado = 1; } return (resultado);

Exemplo 3 int main () { int voos[NUMVOOS]; int ldisp[NUMVOOS]; int apont, cliente, i, numeroVoo; // Leitura do numero dos voos leVetor(voos, 1); // Leitura da disponibilidade de lugares em cada voo leVetor(ldisp, 2); // Le o primeiro cliente printf("Entre com o numero da CI do cliente: "); scanf("%d", &cliente); // Le o voo para reserva printf("Entre com o numero do voo: "); scanf("%d", &numeroVoo);

Exemplo 3 while (cliente != 9999) { if (buscaVoo(voos, numeroVoo, &apont) != -1) { if (verificaDisponibilidade(ldisp, apont)) printf("\n\nVoo %d reservado para cliente %d\n", numeroVoo, cliente); else printf("\n\nVoo lotado! Tente novamente.\n"); } else { printf("\n\nVoo inexistente. Tente novamente.\n"); // Le o proximo cliente printf("Entre com o numero da CI do cliente: "); scanf("%d", &cliente); // Le o voo para reserva printf("Entre com o numero do voo: "); scanf("%d", &numeroVoo); return 0;

Execução do exemplo 3