PROGRAMAÇÃO DE MICROPROCESSADORES 2009 / 2010

Documentos relacionados
PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012

PROGRAMAÇÃO DE MICROPROCESSADORES 2009 / 2010

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Computação e Programação Exame Época de recurso

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Introdução à Programação em C Input / Output

Aula 3 Constantes e funções de E/S

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

1 Exercícios com ponteiros

UNIVERSIDADE DA BEIRA INTERIOR

Computação 2. Aula 8. Profª. Fabiany Arquivos

1 Exercícios com ponteiros

Programação: Vetores

Relatório Trabalho Final Reservas de Viagens de Avião

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved.

1ª Lista de Exercícios

Algoritmos e Programação

3.1 - Funções para manipular dados de entrada e saída padrão

Linguagem C. André Tavares da Silva.

Aula 20: Matrizes (Parte 2)

Strings. Introdução. Definição de strings. Criação/Declaração de strings. Inicialização de strings. Manipulação de strings. Exemplos.

C Comandos de Controle

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2007/2008

DAS5102 Fundamentos da Estrutura da Informação

Faculdade de Computação

Conceito de procedimentos e funções

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Funções de Entrada e Saída

Computação 2. Diego Addan Aula 3. Funções

Linguagem C Entrada/Saída (console)

12 - Dados Estruturados Vetores, Matrizes e Strings

Algoritmos e Programação

Escreva a função e_caracter que verifica se um determinado caracter é um numero ou não. Escreva um Programa de teste da função.

Ponteiros e Tabelas. K&R: Capítulo 5

Introdução à Programação em C (II)

PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C

Modularidade - Funções e Procedimentos

INF 1620 P1-18/09/04 Questão 1 Nome:

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Conhecendo a Linguagem de Programação C

ponteiros INF Programação I Prof. Roberto Azevedo

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Sumário. Ficheiros. Ficheiros

Introdução à Programação. Strings

Computação Informática

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

J. L. Rangel 1. Escreva um programa em C que lê três números inteiros do teclado, e imprime os três números em ordem crescente.

Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

LINGUAGEM C: ARRAY: VETORES E MATRIZES

Linguagem C: Introdução

Comandos de entrada. e saída. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada.

1 Questões de Múltipla Escolha

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Transcrição:

Departamento de Engenharia Electrotécnica PROGRAMAÇÃO DE MICROPROCESSADORES 2009 / 2010 Mestrado Integrado em Engenharia Electrotécnica e Computadores 1º ano 2º semestre Trabalho nº 5 Funções e Vectores http://tele1.dee.fct.unl.pt/pm Paulo da Fonseca Pinto Luis Bernardo

1 Introdução Nos capítulos 5 e 6 do livro Linguagem C de Luís Damas, recomendado para a disciplina de Programação de Microprocessadores, são apresentados respectivamente os funções e vectores. Esta aula visa consolidar estas matérias através de um conjunto de exercícios. Faça todos os exercícios pedidos em ficheiros separados e GUARDE O CÓDIGO desenvolvido na memória USB. Durante a aula o docente pode pedir-lhe para mostrar o código desenvolvido. 2 Como escrever um ficheiro com funções? 2.1 ONDE COLOCAR AS FUNÇÕES? Uma pergunta pertinente quando se escreve o código de um programa com funções é saber onde colocar as funções e o main. Deve ser como está mostrado em baixo à esquerda, ou à direita? main () int i= 4, n=2; escreve_num (i, n); void escreve_num (int a, b) printf ("N1 = %d, N2 0 %d\n, a, b); void escreve_num (int a, b) printf ("N1 = %d, N2 0 %d\n, a, b); main () int i= 4, n=2; escreve_num (i, n); O compilador de C vai percorrendo o ficheiro do princípio ao fim, compilando o programa. Se usarmos o modo à esquerda, quando o compilador encontra a função escreve_num, como ainda não a conhece, admite que ela devolve int. É assim que o compilador de C funciona! Quando chega à função propriamente dita repara que devolve void, e que tem o mesmo nome de uma outra que ele já conhece mas que devolve int. Ora não se pode ter duas funções diferentes com o mesmo nome. O compilador detecta um erro! Existe uma solução: Escrever um protótipo da função escreve_num antes do main para indicar ao compilador que escreve_num devolve void. Ora quanto mais se escreve, mais se erra! Se a meio de programar decidirmos mudar alguma coisa na função temos de ir mudar o protótipo. Assim, deve-se usar o modo de escrita apresentado à direita. O main é sempre a última função no ficheiro e sempre que se chama uma função, chama-se para cima (isto é, o código dela está escrito em cima). Deste modo não são precisos os protótipos. SIMPLES, não é? 2

2.2 AH! AS VARIÁVEIS GLOBAIS É proibido usar variáveis globais em Programação de Microprocessadores. Simples, não é? 3 A tabuada Pretende-se utilizar o código seguinte, sem alterar qualquer linha já escrita, para fazer a tabuada. Acrescente o que for preciso num ficheiro tabuada.c. /* * Tabuada * Ficheiro: tabuada.c */ #include <stdlib.h> /* define exit() para sair do programa */ int mult (int a, b) return a*b; main () int n; printf ("Que tabuada quer (1 a 9)? : "); if (scanf (" %d", &n)!= 1) /* Se não leu um elemento */ printf ("Leitura do limite inválida\n"); exit (1); /* Sai do programa */ if ((n < 1) (n > 9)) printf ( Número incorrecto. Tente outra vez\n ); exit (1); tabuada (n); O programa deve proceder como este exemplo. Pode depois mudar o código para ficar sempre a perguntar. Que tabuada quer (1 a 9)? : 5 5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45 Que tabuada quer (1 a 9)? : 3

4 A aversão aos a Pretende-se fazer um programa que manipule um vector de caracteres, chamado linha.c (não é uma string de caracteres). Existem as funções seguintes: A função main é simplesmente a chamada a procedimentos; menu contém o menu e devolve a opção escolhida pelo utilizador; limpar_vector (coloca em cada elemento do vector o carácter espaço em branco); ler_vector (pede ao utilizador que escreva um texto que coloca no vector. O texto é lido com getchar e todos os caracteres que o utilizador escrever acima do tamanho do vector são ignorados. Se o utilizador não escreveu os suficientes ficam os que estavam no vector); imprimir_vector (imprime o vector no ecrã usando putchar. Imprime todos os caracteres); substitui_vector (substitui todas as ocorrências de um carácter a pelo carácter b, em que a e b são fornecidos na lista de argumentos. Retorna o número de substituições feito, que a função main escreve no ecrã); conta_caracter (conta quantas ocorrências do carácter a existem no vector, retornando esse valor, que a função main escreve no ecrã). O vector tem tamanho TAM. 5 Padrões e padrões O objectivo do próximo programa é generalizar o problema anterior. Considere um vector a duas dimensões, uma matriz, de caracteres com a dimensão TAM x TAM. Chame ao ficheiro padrao.c. Considere que se numeram as linhas da primeira para a última (de cima para baixo) desde o valor zero a TAM-1 as colunas da esquerda para a direita do mesmo modo as diagonais do modo como mostra a figura seguinte (a diagonal principal tem a identificação de zero; as diagonais para cima são positivas; as diagonais para baixo são negativas) O que se pretende é que faça um programa que trabalhe sobre a matriz e que faça o seguinte: escrever_coluna esta função escreve o carácter a (parâmetro de entrada) na coluna i (também parâmetro de entrada); escrever_linha esta função escreve o carácter a (parâmetro de entrada) na linha i (também parâmetro de entrada); escrever_diagonal esta função escreve o carácter a (parâmetro de entrada) na diagonal i (também parâmetro de entrada); limpa_matriz esta função coloca todos os valores da matriz com o carácter a (parâmetro de entrada) escreve_matriz esta função escreve a matriz no ecrã para o utilizador ver os disparates que anda a fazer. menu esta função contém o menu das hipóteses anteriores main só chama funções 4

-2-1 2 1 0 Uma linha da matriz é, de facto, um vector. Mude então a função escrever_linha para que tenha como parâmetro de entrada um vector (cuja dimensão é dada como parâmetro) em vez de uma matriz. Será que pode mudar a função que trata as colunas do mesmo modo? Experimente Está num curso científico 6 Mais exercícios Se quiser mais exercícios com vectores e funções pode usar os seguintes enunciados de anos anteriores http://tele1.dee.fct.unl.pt/pm_2007_2008/laboratorio/pm_aula3_20072008.pdf e http://www.uninova.pt/~jab/pm/downloads/files/pm_aula4_20082009.pdf 5