Programação de Computadores

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Programação em Java Prof. Maurício Braga
Programação de Computadores
Programação de Computadores
Programação de Computadores
Programação de Computadores
UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA CIVIL INTRODUÇÃO À ALGORITMOS Professora: Fabíola Gonçalves.
Programação em Java Prof. Maurício Braga
Marco Antonio Montebello Júnior
Lógica e Estrutura de Dados Fundamentais Professor: Eduardo O. Teles
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTRODUÇÃO AOS APLICATIVOS JAVA Prof. Thiago Pereira Rique
Fluxograma INICIO Processo Decisão Exibe FIM.
Estrutura de Dados I Profº.: ABC Sampaio
Adaptado de material da profa. Maria Aparecida Livi
Adaptado de material da profa. Maria Aparecida Livi
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
Algoritmos Escher.
Paulo Henrique Graf Fernandes
Sintaxe de Fortran 25/abril/2006. Comandos Fortran PROGRAM PRINT READ STOP END.
Lógica de Programação Módulo II
Vetores, Matrizes e Funções
Estruturas de Dados Homogêneas Multidimensionais – Matrizes
Robson Godoi / Sandra Siebra
1MF. Vectores Tipo de dado usado para representar um CONJUNTO de dados do um mesmo tipo Estrutura de dados homogénea unidimensional Ex: Ler a nota de 3.
Algoritmos e Programação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
GAUSS COM PIVOTEAMENTO
Aula 07 Comandos de Repetição while e for
1 Estruturas de Programação Estruturas Condicionais Aula 5 IF (expressão teste) then ou IF (expressão teste) then ELSE END IF SELECT CASE (exp_select)
Técnica de Programação II Vetor e Matriz
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Variáveis, Tipos de Dados e Constantes
Vetores e Matrizes Laboratório de ICCN Marco Antonio Montebello Júnior
Aula prática 6 Vetores e Matrizes
Ameliara Freire O comando de entrada de dados é utilizado quando desejamos fornecer um valor para um nosso programa. Os dispositivos.
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Linguagem de Programação II Parte VII
Linguagem de Programação II Parte IX
UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA CIVIL INTRODUÇÃO À ALGORITMOS Professora: Fabíola Gonçalves.
Material Didático Unificado.
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Aula prática 6 Vetores e Matrizes
Vetores Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e.
Estrutura de dados - Vetores
Programação de Computadores Viviane Torres da Silva
Fundamentos de Programação
Aula 10 - Armazenamento de Dados em Registros
Vetores e Matrizes Ameliara Freire
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Computação Eletrônica
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
“Introdução a Computação” Capítulo II Estruturas de Dados
THOBER CORADI DETOFENO, MSC. Aula 10
Algoritmos e Estruturas de Dados I – Estruturas de Dados
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Linguagem de Programação II Parte VI Professora: Flávia Balbino da Costa.
Shell Script Parte 2.
Estruturas Homogêneas – Vetores e Matrizes
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
1Unidade 06 - Matriz Algoritmos e Linguagens de Programação Matriz Prof.: Guilherme Baião S. Silva Adaptações Prof. Edwar Saliba Júnior Março de 2007.
Fundamentos de Programação 1 Slides 6 – ‘Exercícios Gerais’ Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “Exercícios””
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Estruturas Homogêneas - Vetores
V ETORES E M ATRIZES Disciplina: Informática Aplicada Professor: Modesto Chaves.
Transcrição da apresentação:

Programação de Computadores Viviane Torres da Silva viviane.silva@ic.uff.br http://www.ic.uff.br/~viviane.silva/progIII

Variáveis Compostas Exemplo motivacional: Ler as notas de 3 alunos. Calcular a média da turma. Informar quantos alunos tiveram nota acima da média.

program notas implicit none real nota1, nota2, nota3, media integer maior read *, nota1, nota2, nota3 maior = 0 media = (nota1 + nota2 + nota3)/3 if (nota1 .GT. media) then maior = maior + 1 end if if (nota2 .GT. media) then if (nota3 .GT. media) then print *, ‘Média: ’, media print *, ‘Maiores: ’, maior  end E se fossem 40 alunos?

Variáveis Compostas É possível definir variáveis que guardam mais de um valor de um mesmo tipo. Essas variáveis são conhecidas como variáveis compostas, variáveis subscritas ou arranjos (array). Existem dois tipos principais de variáveis compostas: Vetores Matrizes

Vetores Um vetor é uma variável composta unidimensional. Ela contém espaço para armazenar diversos valores, e é acessada via um índice. A idéia de vetor é comum na matemática, com o nome de variável subscrita: x1, x2, ..., xn O que vimos até agora são variáveis com somente um valor: x = 7. No caso de vetores, uma mesma variável guarda ao mesmo tempo múltiplos valores: x1 = 7, x2 = 10, x3= 5 posição 1 2 3 4 5 6 7 X = 7 10 5 … valor

Declaração de Vetor Feita junto com as demais declarações de variáveis, no início do programa. Forma geral: <tipo> <nome>(< início>: <fim>) Caso o início do vetor seja omitido, o Fortran assume início igual a 1. Ex: Real x (5) Vetor de 5 posições onde os valores são do tipo Real 1 2 3 4 5 X =

Exemplos: Integer a(10) Integer b(3:8) Integer c Character*20 nome(-2:2) (em cada posição do vetor ficará um string de 20 caracteres) 1 2 3 4 5 6 7 8 9 10 a = 3 4 5 6 7 8 b = 1 c = -2 -1 0 1 2 nome =

Utilização Uma posição do arranjo é acessada pelo seu índice, seja para atribuir ou recuperar o valor. Exemplo: Integer nota(5) nota(1) = 1 nota(3) = 8 nota(2) = nota(1) + nota(3) print *, nota(2) 1 2 3 4 5 nota = 1 ? 8

Utilização Exemplo: Character*3 texto(5) texto (1) = ‘abc’ texto (2) = ‘def’ texto (3) = ‘ghi’ texto (4) = ‘jkl’ texto (5) = ‘mno’ 1 2 3 4 5 texto = abc def ghi jkl mno

Retornando ao exemplo dos 40 alunos… Faça um programa que lê a nota de 40 alunos, calcula a média e calcula quantas notas estão acima da média. No final o programa informa estes dois valores. program notas2 implicit none real nota(40), soma, media integer maior, i soma = 0 do i = 1, 40 read *, nota(i) soma = soma + nota(i) end do .... 1 2 3 4 5 …. 37 38 39 40 nota =

Retornando ao exemplo dos 40 alunos… program notas2 implicit none real nota(40), soma, media integer maior, i soma = 0 do i = 1, 40 read *, nota(i) soma = soma + nota(i) end do media = soma/40 maior = 0 if (nota(i) > media) then maior = maior + 1 end if print *, ‘Média: ’, media print *, ‘Maiores: ’, maior end Faça um programa que lê a nota de 40 alunos, calcula a média e calcula quantas notas estão acima da média. No final o programa informa estes dois valores. 1 2 3 4 5 …. 37 38 39 40 nota =

Exercício 1 Faça um programa em Fortran que lê dois vetores inteiros de tamanho 3 e soma cada posição uma a uma armazenando os resultados em outro vetor . program soma vetores implicit none integer vetorA(3), vetorB(3), i, vetorC(3) do i=1, 3 print *, 'digite o vetorA(', i, ') e o vetorB(', i, ')' read *, vetorA(i), vetorB(i) vetorC (i) = vetorA (i) + vetorB (i) print *, 'vetorC(', i, '): ', vetorC(i) end do end

Exercício 2 Faça um programa em Fortran que lê dez números inteiros e listar esses números em ordem crescente. program ordenacao implicit none integer numero(10), aux, i, j do i=1, 10 read *, numero(i) end do do j=1, 10 do i=j, 10 if (numero(i) .LT. numero (j)) then aux = numero (j) numero(j) = numero(i) numero(i) = aux end if print *, numero(i) end

Exercício 3 Faça um programa em Fortran que lê=eia dois vetores inteiros v1 e v2 de 10 posições. Um terceiro vetor é calculado da seguinte maneira: Para cada posição i de s, o usuário deve informar um valor n. Peque o valor M armazenado na posição v2(n) e some as M primeiras posições de v1 e armazene este valor em s(i).

Parte II

Melhorando o programa O Fortran fornece alguns comandos que podem ajudar na manipulação de variáveis compostas: Parameter DO implícito Parameter permite criar constantes que podem ser utilizadas para definir o tamanho de variáveis compostas. Desta forma, a alteração do tamanho consiste em alterar em somente um lugar. Depois integer tnota parameter (tnota=40) real nota(tnota) do i = 1, tnota read *, nota(i) end do ... Antes real nota(40) do i = 1, 40 read *, nota(i) end do ...

DO implícito Permite combinar de forma resumida o comando “do” com os comandos “print” ou “read”. Antes integer tnota parameter (tnota=40) real *,nota(tnota) do i = 1, tnota read *, nota(i) end do ... print *, nota(i) Depois integer tnota parameter (tnota=40) real *,nota(tnota) read *, (nota(i), i = 1, tnota) ... print *, (nota(i), i = 1, tnota)

Exercício 1 Faça um programa em Fortran usando “parameter” e “do implícito” que lê o nome e a nota de 10 alunos e informe: O nome do aluno que obteve menor nota e a sua nota O nome do aluno que obteve maior nota e a sua nota A média da turma Nome dos alunos com nota acima de 9,0 O número de alunos que tiveram nota acima da média Dica: Utilizar um vetor para guardar as notas e um vetor para guardar o nome dos alunos.

program ordenacao idade implicit none integer nPessoas, j, i parameter (nPessoas=10) real nota(nPessoas), aux, media character*20 nome(nPessoas), aluno read *, (nome(i), i = 1, nPessoas) read *, (nota(i), i = 1, nPessoas) aux = 0 do j=1, nPessoas if (nota(j) .GT. aux) then aux = nota(j) aluno = nome(j) end if end do print *, aluno, ‘obteve a maior nota: ', aux aux = 10 do j=1, nPessoas if (nota(j) .LT. aux) then aux = nota(j) aluno = nome(j) end if end do print *, aluno, 'obteve a menor nota: ', aux

aux = 0 do j=1, nPessoas aux = aux + nota(j) end do media = aux / nPessoas print *, 'a media ‚: ', media aux = 0 do j=1, nPessoas if (nota(j) .GT. 9) then print *, nome(j) ,'obteve nota acima de 9.0' end if end do if (nota(j) .GT. media) then aux = aux +1 print *, ‘num notas acima da media:’, aux end

Exercício 2 Faça um programa em Fortran usando “parameter” e “do implícito” que lê o nome e a idade de dez pessoas e lista as pessoas em ordem decrescente de idade.

program ordenacao idade implicit none integer nPessoas, j, i, aux parameter (nPessoas=10) integer idade(nPessoas) character*20 nome(nPessoas), aux2 read *, (nome(i), i = 1, nPessoas) read *, (idade(i), i = 1, nPessoas) do j=1, nPessoas do i=j, nPessoas if (idade(i) .GT. idade (j)) then aux = idade(j) idade(j) = idade(i) idade(i) = aux aux2 = nome(j) nome(j) = nome(i) nome(i) = aux2 end if end do print *, (nome(i), idade(i), '; ', i = 1, nPessoas) end

Exercício 3 Faça um programa em Fortran usando “parameter” e “do implícito” que lê duas listas de nomes de tamanho 10 e informe quais nomes ocorrem nas duas listas. OBS. Não permita que o programa repita a mesma informação

program ordenacao idade implicit none integer nPessoas, j, i, k, l, aux parameter (nPessoas=3) character*20 lista1(nPessoas), lista2(nPessoas), lista3(nPessoas) print*, 'entre com os nomes da lista 1' read *, (lista1(i), i = 1, nPessoas) print*, 'entre com os nomes da lista 2' read *, (lista2(i), i = 1, nPessoas) l=1 aux=0 do j=1, nPessoas do i=j, nPessoas if (lista1(i) .EQ. lista2(j)) then do k=1, nPessoas if (lista1(i) .EQ. lista3(k)) then aux=1 end if end do if (aux .EQ. 0) then lista3(l) = lista1(i) l=l+1 print*, 'este nome aparece nas duas listas:', lista1(i) read* end

Parte III

Matrizes Uma matriz é uma variável composta multidimensional. Ela é equivalente a um vetor, contudo permite a utilização de diversas dimensões acessadas via diferentes índices. Em diversas situações matrizes são necessárias para correlacionar informações. Matrizes podem ser vistas como tabelas Matriz 3x4

Exemplo Assumindo que um aluno é avaliado com 3 notas, seria necessário um vetor de três posições para guardar as notas de cada aluno... Contudo, assumindo que uma turma tem 5 alunos, seria necessária uma matriz bidimensional para guardar as notas de todos os alunos de uma turma... Nota(2,3) = 7.5 (terceira nota do segundo aluno foi 7,5) Nota 1 Nota 2 Nota 3 Nota 1 Nota 2 Nota 3 Aluno1 Aluno2 Aluno3 Aluno4 Aluno5 7,5

Exemplo Ainda, assumindo que um curso tem duas turmas, seria necessária uma matriz tridimensional para guardar as notas de todos os alunos de todas as turmas do curso... Nota(2,3,1) (2a linha, 3a coluna, 1a profundidade) Nota do aluno 2 na prova 3 da turma A foi 7.5 7.5 Turma B Turma A Aluno1 Aluno2 Aluno3 Aluno4 Aluno5 N1 N2 N3

Declaração x y z x: linha, y: coluna e z: profundidade Real nota(5, 3, 2) Matriz tridimensional Integer matriz(10:15, 1:3) Matriz bidimensional posições de 10 a 15 , de 1 a 3 Exemplo: Integer nota(2,2) Nota(1,1) = 5 Nota(2,2) = 3 Nota(2,1) = nota(1,1) + nota(2,2) Nota(1,2) = nota(1,1) * nota(2,2) Print *, nota(1,2) – nota(2,1)

DO implícito para matrizes Matriz A tem 2 linhas e três colunas e serão lidos primeiro os elementos por colunas e depois por linhas, i.e., A(1,1); A(1,2); A(1,3); A(2,1); A(2,2); A(2,3) read *, (( A(i,j), j=1, 3) , i=1, 2 )

Exercício 1 Faça um programa em Fortran que lê a ordem de uma matriz quadrada (até 100). Em seguida lê os seus valores e finalmente calcula a sua transposta (at(i, j) = a(j, i)) e exibe para o usuário o resultado. Ordem é o tamanho da linha = tamanho da coluna da matriz quadrada

program transposta implicit none integer ordem, i, j, param parameter (param=100) integer A(param,param), T(param,param) print *, 'informe a ordem:' read *, ordem print *, 'inclua os valores da matriz A:' read *, ( (A(i,j), j=1, ordem), i=1, ordem ) C t(i, j) = a(j, i) do i=1, ordem do j=1, ordem T(i,j) = A(j,i) end do print *, 'valores da transposta sao:' print *, ( (T(i,j), j=1, ordem), i=1, ordem ) end

Exercício 2 Faça um programa em Fortran que lê duas matrizes tamanho 2x3 e 3x2 e multiplica essas matrizes Dica: c(i, j) = somatório de a(i,k) * b(k,j) para todo k. program soma de matrizes implicit none C lendo as matrizes integer A(2,3), B(3,2), i, j, k, C(2,2) print *, 'valores da matriz A:' read *, (( A(i,j), j=1, 3) , i=1, 2 ) print *, 'valores da matriz B:' read *, (( A(i,j), j=1, 2) , i=1, 3 )

Continuação C dica: c(i, j) = Somatorio de a(i,k) * b(k,j) para todo k do i=1, 2 do j=1, 2 C(i,j)=0 do k=1, 3 C(i,j) = C(i,j) + (A(i,k) * B(k,j)) end do print *, 'valores da primeira linha da matriz C sao:' print *, (C(1,i), i = 1, 2) print *, 'valores da segunda linha da matriz C sao:' print *, (C(2,i), i = 1, 2) end

Exercício 3 Faça um programa em Fortran que lê o nome e as 3 notas para cada aluno de cada turma de um curso. Cada turma tem 2 alunos e o curso tem 2 turmas. Ao final, o programa deve permitir que o usuário informe: A) o nome de um aluno e o programa liste a média desse aluno B) o usuário informe uma média e o programa liste todos os alunos que têm médias acima desse valor. nota (numAluno, numNota, numTurma); numero de alunos = 2, número de notas = 3 e número de turmas = 2

program matriz notas implicit none integer numAlunos, numNotas, numTurmas, i, j, k, opcao parameter(numAlunos=2, numNotas=3, numTurmas=2) real nota(numAlunos, numNotas, numTurmas), soma, somaNotas real mediaEmUmaNota, media, valor, somaMediasNotas, mediaNotas character*20 nome(numAlunos), aluno do i=1, numAlunos print *, 'informe o nome do aluno:' read *, nome(i) print *, 'as tres notas para cada turma:' C primeiro as notas de uma turma e depois as notas de outra turma read *,((nota(i,j,k),j=1,numNotas),k=1,numTurmas) end do print *, '1 para saber a media de um aluno;' print *, '2 para saber quais alunos tem media acima de um valor;' print *, '0 para abortar.' read *, opcao

if (opcao .EQ. 0) then GO TO 10 else if (opcao .EQ. 1) then GO TO 11 else if (opcao .EQ. 2) then GO TO 12 end if C Imprimindo a media de um aluno 11 print *, 'de qual aluno voce quer a media?' read *, aluno do i=1, numAlunos if (aluno .EQ. nome(i)) then do j=1, numNotas do k=1, numTurmas soma = soma + nota(i,j,k) end do mediaEmUmaNota = soma / numTurmas soma = 0 somaNotas = somaNotas + mediaEmUmaNota media = somaNotas / numNotas print *, 'a media do(a) aluno(a) eh: ', media

C Imprimindo todos os alunos com media acima de um determinado valor 12 print *, 'informe o valor:' read *, valor soma=0 somaMediasNotas=0 media=0 do i=1, numAlunos do j=1, numNotas do k=1, numTurmas soma = soma + nota(i,j,k) end do mediaEmUmaNota = soma / numTurmas soma = 0 somaNotas = somaNotas + mediaEmUmaNota media = somaNotas / numNotas somaMediasNotas = 0 if (media .GE. valor) then print *, 'aluno(a) ', nome(i), 'tem media ', media end if media = 0 10 end