ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas

Tamanho: px
Começar a partir da página:

Download "ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas"

Transcrição

1 Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Departamento de Computação ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Luiz Henrique Santos Professor - David Menotti Monitor - Kayran dos Santos Ouro Preto 18 de novembro de 2009

2 Sumário 1 Introdução Considerações iniciais Especificação do problema Algoritmo e estruturas de dados TAD - TPilha Função FPVazia Função PEhVazia Função PEmpilha Função PDesempilha Função PTamanho Funções de Verificação Função Prioridade Função VerificaExpressao Função ConverteToPosfix Função ResolveExpressao Main Análise de complexidade dos algoritmos Função FPVazia Função PEhVazia Função PEmpilha Função PDesempilha Função PTamanho Funções de Verificação Função Prioridade Função VerificaExpressao Função ConverteToPosfix Função ResolveExpressao Main Testes 19 5 Conclusão 21 Lista de Figuras 1 Conversão da expressão A*(B+C)/C Resolução da expressão AB+CD-/* Empilha, Desempilha, Pilha Vazia e Tamanho Avaliação de Expressões Conversão paraa forma PosFixa Resolução das expressões

3 Lista de Programas 1 TAD - TPilha Função FPVazia Função PEhVazia Função PEmpilha Função PDesempilha Função PTamanho Funções de Verificação Função Prioridade Função VerificaExpressao Função ConverteToPosfix Função ResolveExpressao Main

4 1 Introdução Consiste em utilizar os conceitos de pilhas e recursividade para a solução de um problema, o cálculo de expressões aritméticas. Esse trabalho é baseado em um dos problemas da Olímpiada Brasileira de Informática do Instituto de Computação da UNICAMP. 1.1 Considerações iniciais Ambiente de desenvolvimento do código fonte: Microsoft Visual C Professional Edition. Linguagem utilizada: Linguagem C. Ambiente de desenvolvimento da documentação: TeXnicCenter 1 BETA Editor de L A TEX. Na análise da ordem de complexidade dos algoritmos será analisado o pior caso sempre. Foram passados ponteiros de estruturas para as funções para economizar memória. 1.2 Especificação do problema A disseminação dos computadores se deve principalmente à capacidade de eles se comportarem como outras máquinas, vindo a substituir muitas destas. Esta flexibilidade é possível porque podemos alterar a funcionalidade de um computador, de modo que ele opere da forma que desejarmos: essa é a base do que chamamos programação. Sua tarefa é escrever um programa que faça com que o computador opere como uma calculadora simples. O seu programa deve ler expressões aritméticas e produzir como saída o valor dessas expressões, como uma calculadora faria. O programa deve implementar apenas um subconjunto reduzido das operações disponíveis em uma calculadora: somas, subtrações, multiplicações e divisões. Entrada A entrada deve ser lida de um arquivo a ser fornecido como parâmetro em linha de comando ( int main(int argc, char**argv) ) composta de vários conjuntos de testes, onde cada linha do arquivo contém uma expressão aritmética a ser avaliada, no seguinte formato: X 1 s 1 X 2 s 2 X 3 s 3...X m 1 s m 1 X m onde X i, 1 i m, é um operando ou uma nova expressão que pode conter parentesis de abertururaaa ( e fechamento ) ; s j, 1 j m, é um operador, representado pelos símbolos + -, * ou / ; Não há espaços em branco entre operandos e operadores. 1

5 O final da entrada é indicado pelo final do arquivo. Lembre-se de respeitar a ordem de precedência entre os operadores. Isto é, a multiplicação (*) e divisão (/) tem precedência sobre a adição (+) e subtração (-). Exemplo de Entrada 4 3+5*2 3*5+2 (3+5)*2 (20/(5*2)+7-(10*5)) Saída Para cada expressão de teste do arquivo de entrada, seu programa deve produzir três linhas. A primeira linha deve conter um identificador da expressão, no formato "Teste n", onde n é numerado a partir de 1. Na segunda linha deve aparecer o resultado encontrado pelo seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente. Exemplo de Saída Teste 1 4 Teste 2 13 Teste 3 17 Teste 4-39 Teste 5 55 (esta saída corresponde ao exemplo de entrada acima) Restrições Os operandos são valores inteiros limitados entre 0 e 100. [2] 2

6 2 Algoritmo e estruturas de dados 2.1 TAD - TPilha // Definição do TAD typedef char TChave ; typedef double TValor ; typedef struct 5 TChave Chave [ 2 ] ; TValor Valor ; int Dois ; TItem ; 10 typedef struct Celula Apontador ; typedef struct Celula TItem Item ; 15 Apontador pant ; TCelula ; typedef struct 20 Apontador pfundo ; Apontador ptopo ; int Tamanho ; TPilha ; Programa 1: TAD - TPilha Esse TAD TPilha foi criado para representar uma pilha simplesmente encadeada. Ele contem uma estrutura TChave do tipo char, uma estrutura TValor do tipo double, a estrutura TItem que tem um vetor de TChave de duas posições, um campo TValor e um campo Dois do tipo int que indica se o número tem 2 dígitos, uma estrutura Apontador que é do tipo ponteiro para Célula e uma estrutura TCelula que engloba TItem e possui um campo pant do tipo Apontador que aponta para a Célula abaixo. A estrutura TPilha possui 2 campos do tipo Apontador: pfundo, que é um apontador para o elemento no fundo da pilha e ptopo, que é um apontador para o elemento no topo da pilha. A pilha foi implementada com elemento cabeça. [3] 2.2 Função FPVazia //Função que f a z uma p i l h a v a z i a i n i c i a l i z a n d o a void FPVazia ( TPilha ppilha ) // aloca a c é l u l a cabeça 5 ppilha >ptopo = ( Apontador ) malloc ( sizeof ( TCelula ) ) ; // f a z o topo e o fundo apontarem pra e l a ppilha >pfundo = ppilha >ptopo ; //a c é l u l a cabeça não aponta para ninguém ppilha >ptopo >pant = NULL; 10 //o tamanho da p i l h a é 0 ppilha >Tamanho = 0 ; 3

7 Programa 2: Função FPVazia Essa função foi criada para inicializar uma pilha como vazia. Ela recebe como parâmetro um ponteiro para uma estrutura TPilha. Como foi usada uma implementação com elemento cabeça, devemos alocar o espaço para esse elemento. Fazemos os apontadores pfundo e ptopo apontarem para ele, fazemos esse elemento cabeça não apontar para ninguém e inicializamos o tamanho da pilha como Função PEhVazia //Função que v e r i f i c a se uma p i l h a é v a z i a int PEhVazia ( TPilha ppilha ) return ( ppilha >ptopo == ppilha >pfundo ) ; 5 Programa 3: Função PEhVazia Essa função foi criada para testar se uma PILHA é vazia. Se o ponteiro para o fundo apontar para a mesma célula que o ponteiro para o topo, a pilha está vazia. 2.4 Função PEmpilha //Função que empilha um item na p i l h a int PEmpilha ( TPilha ppilha, TItem pitem ) Apontador paux ; 5 // aloca o espaço paux = ( Apontador ) malloc ( sizeof ( TCelula ) ) ; // se nao c o n s e g u i r a l o c a r retorna 0 i f (paux == NULL) return 0 ; 10 // i n s e r e o item ppilha >ptopo >Item = pitem ; // f a z a c é l u l a apontar para o a n t i g o topo paux >pant = ppilha >ptopo ; 15 // f a z o topo apontar para a nova c é l u l a ppilha >ptopo = paux ; // incrementa o tamanho da p i l h a ppilha >Tamanho++; // retorna 1 indicando que o elemento f o i empilhado 20 return 1 ; Programa 4: Função PEmpilha Essa função foi criada para inserir um elemento na pilha. Pela definição de pilha, todo elemento deve ser inserido no seu topo. Ela recebe como parâmetros um ponteiro para uma estrutura TPilha e um ponteiro para uma estrutura TItem. Alocamos espaço para a nova célula, que será a célula cabeça e inserimos o item na célula apontado por ptopo. A nova célula criada deve apontar para o antigo topo e o novo topo é a célula alocada. Por fim, incrementamos o tamanho da pilha e retornamos 1 indicando q o elemento foi empilhado com sucesso. 4

8 2.5 Função PDesempilha //Função que desempilha um item da p i l h a int PDesempilha ( TPilha ppilha, TItem pitem ) 5 Apontador paux ; // se a p i l h a f o r v a z i a não pode se desempilhar i f ( PEhVazia ( ppilha ) ) return 0 ; 10 // guarda se a c é l u l a a s e r desempilhada paux = ppilha >ptopo ; // a t u a l i z a se o topo ppilha >ptopo = paux >pant ; // desempilha se o item 15 pitem = paux >pant >Item ; // l i b e r a sa a área de momoria do item desempilhado f r e e (paux) ; // decrementa o tamanho ppilha >Tamanho ; 20 // retorna 1 indicando q o item f o i dempilhado com s u cesso return 1 ; Programa 5: Função PDesempilha Essa função foi criada para retirar um elemento da pilha. Pela definição de pilha, o elemento retirado deve estar no topo da pilha. Ela recebe como parâmetros um ponteiro para uma TPilha e um ponteiro para TItem no qual será retornado o item retirado. Se a pilha for vazia não é possível retirar. Caso contrário, guardamos um ponteiro para a célula apontada por ptopo, que é a célula cabeça. A nova célula apontada por ptopo é a célula apontada pelo elemento cabeça. Passamos o item a ser desempilhado por ponteiro, que é o campo item da célula apontada pelo elemento cabeça. Por fim, liberamos a memória guardada e retornamos 1 indicando que o elemento foi desempilhado com sucesso. 2.6 Função PTamanho // Retorna o tamanho da p i l h a int PTamanho ( TPilha ppilha ) return ( ppilha >Tamanho) ; 5 Programa 6: Função PTamanho Essa função foi criada para retornar o tamanho da pilha. retorna o campo Tamanho da pilha. Ela simplesmente 5

9 2.7 Funções de Verificação // V e r i f i c a se o c a r a c t e r é um d í g i t o int EhNumero ( char ch ) return ( ch >= 48 && ch <= 57) ; // 0 a 9 5 // V e r i f i c a se o c a r a c t e r é um operador int EhOperador ( char ch ) 10 return ( ch == + ch == ch == ch == / ) ; // V e r i f i c a se o c a r a c t e r é um p a r e n t e s e s a b e r t o int EhParentesesAberto ( char ch ) 15 return ( ch == ( ) ; // V e r i f i c a se o c a r a c t e r é um p a r e n t e s e s fechado 20 int EhParentesesFechado ( char ch ) return ( ch == ) ) ; Programa 7: Funções de Verificação Essas funções foram criadas para identificar se um caracter é um operador, um número, um parêntese aberto ou um parêntese fechado. 2.8 Função Prioridade // V e r i f i c a a p r i o r i d a d e de um operador int P r i o r i d a d e ( char op ) i f ( op == ( ) 5 return 1 ; i f ( op == + op == ) return 2 ; 10 i f ( op == op == / ) return 3 ; return 0 ; Programa 8: Função Prioridade Essa função foi criada para verificar a prioridade de um operador. Ela recebe como parâmetro o operador, que é um caracter, identifica o operador e retorna a prioridade do operador que varia de 1 a 3. Parêntese aberto tem prioridade 1, soma e subtração 2 e multiplicação e divisão 3. Se o caracter não for nenhum desses a função retorna 0. 6

10 2.9 Função VerificaExpressao // V e r i f i c a se uma e s p r e s s ã o i n f i x a é v á l i d a. 1 >V 0 >F int V e r i f i c a E x p r e s s a o ( char Exp [ ] ) // i n t V e r i f i c a E x p r e s s a o ( char Exp ) 5 int i = 0 ; int NumParenteses = 0 ; //o primeiro c a r a c t e r da expressão nao pode s e r um operador i f ( EhOperador (Exp [ 0 ] ) ) return 0 ; 10 // enquanto nao chegar ao f i n a l da expressão while (Exp [ i ]!= \0 ) i f ( EhOperador (Exp [ i ] ) ) 15 // Dois operadores s e g u i d o s ou um operando e um p a r e n t e s e s fechado i f ( ( EhOperador (Exp [ i +1]) ) ( EhParentesesFechado (Exp [ i +1]) ) ) return 0 ; 20 else i f (EhNumero(Exp [ i ] ) ) i f (EhNumero(Exp [ i +1]) ) //3 números s e g u i d o s ou um número de 2 d i g i t o s seguido de p a r ê n t e s e a b e r t o 25 i f (EhNumero(Exp [ i +2]) ( EhParentesesAberto (Exp [ i +2]) ) ) return 0 ; //Numero de 2 d i g i t o s seguido de p a r e n t e s e s a b e r t o ( 30 i f (EhNumero(Exp [ i +1]) && ( EhParentesesAberto (Exp [ i +2]) ) ) return 0 ; //Numero de 1 d i g i t o seguido de p a r e n t e s e s a b e r t o ( i f ( EhParentesesAberto (Exp [ i +1]) ) 35 return 0 ; else i f ( EhParentesesAberto (Exp [ i ] ) ) // incrementa numero de p a r e n t e s e s 40 NumParenteses++; // ( s e g u i d o de operador ou ) i f ( ( EhOperador (Exp [ i +1]) EhParentesesFechado (Exp [ i +1]) ) ) return 0 ; 45 else i f ( EhParentesesFechado (Exp [ i ] ) ) // decrementa o número de p a r e n t e s e s NumParenteses ; 50 // ) s e g u i d o de número ou ( i f ( ( EhNumero(Exp [ i +1]) EhParentesesAberto (Exp [ i +1]) ) ) return 0 ; i ++; 55 7

11 // t e s t a se o número de p a r e n t e s e s a b e r t o é i g u a l ao de fechados i f ( NumParenteses!= 0) return 0 ; // expressao c o r r e t a 60 return 1 ; Programa 9: Função VerificaExpressao Essa função foi criada para avaliar uma expressão infixa. Se a função estiver escrita corretamente ela retorna 1 e se for encontrado algum erro a função ja retorna 0. Foram analisados as seguintes possibilidades de erro: Dois operadores seguidos ou um operando e um parêntese fechado; Três números seguidos ou um número válido seguido de parêntese aberto; Número incorreto de parênteses; Parêntese aberto seguido de operando ou parêntese fechado; Parêntese fechado seguido de número ou parêntese aberto; Parêntese aberto seguido de operando ou parêntese fechado. A função percorre a expressão infixa até encontrar o seu final, o caracter 0. Ela verifica todas as possibilidades de erro citadas acima para cada caracter da expressão e retorna 0 imediatamente se algum erro for encontrado. Ela também conta o número de parênteses abertos e fechados e verifica se são iguais após percorrer toda a expressão. Se nenhum erro for encontrado, a função retorna 1 indicando sucesso. 8

12 2.10 Função ConverteToPosfix // Converte uma expressão da forma i n f i x a para forma p o s f i x a int ConverteToPosfix ( char ExpInfixa [ ], TItem ExpPosfixa [ ] ) TPilha Pilha ; 5 TItem item ; int i = 0 ; // i n d i c e i n f i x a int j = 0 ; // i n d i c e p o s f i x a //Se a expressão não e s t i v e r correnao podemos c o n v e r t e r i f (! ( V e r i f i c a E x p r e s s a o ( ExpInfixa ) ) ) 10 return 0 ; FPVazia(& Pilha ) ; // enquanto nao chegar ao f i n a l da expressão while ( ExpInfixa [ i ]!= \0 ) 15 // se f o r numero copia pra saida i f (EhNumero( ExpInfixa [ i ] ) ) //número de d o i s d í g i t o s 20 i f (EhNumero( ExpInfixa [ i +1]) ) // d i g i t o das desenas no í n d i c e 0 ExpPosfixa [ j ]. Chave [ 0 ] = ExpInfixa [ i ] ; // d i g i t o das unidades no í n d i c e 1 25 ExpPosfixa [ j ]. Chave [ 1 ] = ExpInfixa [ i +1]; // s e t a o campo indicando que o n é de 2 d i g i t o s ExpPosfixa [ j ]. Dois = 1 ; i ++; 30 else ExpPosfixa [ j ]. Chave [ 0 ] = ExpInfixa [ i ] ; //número de 1 d i g i t o ExpPosfixa [ j ]. Dois = 0 ; // não é de 2 d i g i t o s 35 j ++; else i f ( EhOperador ( ExpInfixa [ i ] ) ) // se f o r operador desempilha até achar um com p r i o r i d a d e menor e copia pra s a i da 40 while (! ( PEhVazia(& Pilha ) ) && ( P r i o r i d a d e ( Pilha. ptopo >pant > Item. Chave [ 0 ] ) >= P r i o r i d a d e ( ExpInfixa [ i ] ) ) ) PDesempilha(&Pilha, &item ) ; ExpPosfixa [ j ]. Chave [ 0 ] = item. Chave [ 0 ] ; j ++; 45 item. Chave [ 0 ] = ExpInfixa [ i ] ; // copia o operador encontrado PEmpilha(&Pilha, &item ) ; 50 else i f ( EhParentesesAberto ( ExpInfixa [ i ] ) ) // se f o r ( empilha item. Chave [ 0 ] = ExpInfixa [ i ] ; PEmpilha(&Pilha, &item ) ; 9

13 55 else i f ( EhParentesesFechado ( ExpInfixa [ i ] ) ) // se f o r ) desempilha até achar ( PDesempilha(&Pilha, &item ) ; 60 while (! ( EhParentesesAberto ( item. Chave [ 0 ] ) ) ) ExpPosfixa [ j ]. Chave [ 0 ] = item. Chave [ 0 ] ; j ++; PDesempilha(&Pilha, &item ) ; 65 i ++; 70 // copia todos os simbolos r e s t a n t e s para a saida while (! ( PEhVazia(& Pilha ) ) ) PDesempilha(&Pilha, &item ) ; ExpPosfixa [ j ]. Chave [ 0 ] = item. Chave [ 0 ] ; 75 j ++; // Fecha a s t r i n g com \0 ExpPosfixa [ j ]. Chave [ 0 ] = \0 ; 80 return 1 ; Programa 10: Função ConverteToPosfix Essa função foi criada converter uma expressão da forma infixa para a forma posfixa. Ela recebe como parâmetros e expressão a ser convertiva e uma variável do tipo vetor de TItem pra retornar a expressão posfixa. A conversão da forma Infixa para Posfixa com uso se Pilhas é efetuado da seguinte maneira : 1. Inicializa uma Pilha vazia; 2. Percorre toda a expressão, copiando todos os símbolos encontrados diretamente para uma expressão de saída; Ao encontrar um operador: Enquanto a Pilha não estiver vazia e houver um operador com prioridade maior ou igual ao encontrado, desempilhe o operador e copie-o no saída; Empilhe o operador encontrado; Ao encontrar um parêntese de abertura empilhe-o; Ao encontrar um parêntese de fechamento, desempilhe um símbolo da Pilha e coloque o na expressão de saída. Faça isto até encontrar o parêntese de abertura correspondente; 10

14 Segue um exemplo de conversão da expressão A*(B+C)/C Figura 1: Conversão da expressão A*(B+C)/C 11

15 2.11 Função ResolveExpressao // Resolve uma dada expressão int ResolveExpressao ( TItem PosFix [ ], double Resultado ) TPilha Pilha ; 5 TItem item1, item2 ; char aux1, aux2 ; int i = 0 ; // i n i c i a l i z a a p i l h a como v a z i a 10 FPVazia(& Pilha ) ; // Enquanto não f o r o f i n a l da expressão while (! ( PosFix [ i ]. Chave [ 0 ] == \0 ) ) 15 // se f o r numero empilha o i f (EhNumero( PosFix [ i ]. Chave [ 0 ] ) ) aux1 = PosFix [ i ]. Chave [ 0 ] ; 20 // se o número f o r de 2 d i g i t o s i f ( PosFix [ i ]. Dois == 1) aux2 = PosFix [ i ]. Chave [ 1 ] ; //10 o d i g i t o das dezenas + d i g i t o das unidades 25 item1. Valor = 10 a t o i (&aux1 ) + a t o i (&aux2 ) ; else item1. Valor = a t o i (&aux1 ) ; //1 d i g i t o 30 // empilha o número PEmpilha(&Pilha, &item1 ) ; // se f o r operador desempilha os 2 u l t i m o s e empilha o r e s u l t a d o else i f ( EhOperador ( PosFix [ i ]. Chave [ 0 ] ) ) 35 // desempilha os d o i s ú l t i m o s número antes do operador PDesempilha(&Pilha, &item1 ) ; //X PDesempilha(&Pilha, &item2 ) ; //Y 40 // i d e n t i f i c a q u a l operador switch ( PosFix [ i ]. Chave [ 0 ] ) case : 45 // empilha Y X item2. Valor = item1. Valor ; PEmpilha(&Pilha, &item2 ) ; break ; 50 case / : // empilha Y/X item2. Valor/= item1. Valor ; PEmpilha(&Pilha, &item2 ) ; 55 break ; 12

16 case + : // empilha Y+X 60 item2. Valor += item1. Valor ; PEmpilha(&Pilha, &item2 ) ; break ; case : 65 // empilha Y X item2. Valor = item1. Valor ; PEmpilha(&Pilha, &item2 ) ; break ; 70 i ++; //o r e s u l t a d o encontra se no topo da p i l h a PDesempilha(&Pilha, &item1 ) ; Resultado = item1. Valor ; return 1 ; Programa 11: Função ResolveExpressao Essa função foi criada para Calcular o valor de uma expressão matemática na forma posfixa. Ela recebe como parâmetros a expressão posfixa e uma variável do tipo ponteiro para double na qual será retornado o resultado. A vantagem desta forma posfixa é que sabemos que, percorrendo a expressão da esquerda par a direita, ao encontrarmos um operador, sabemos que ele opera sobre as duas variáveis anteriores a ele. Para converter um caracter para o seu valor numérico utilizou-se a função atoi. Seja a expressão: AB+CD-/*, supondo A=7, B=3, C=6, D=4, E=9: As etapas para resolver esta expressão são as seguintes: Iniciamos com uma Pilha vazia; Varremos a expressão e, para cada elemento encontrado, fazemos: Se for operando, então empilhar seu valor; Se for operador, então desempilhar os dois últimos valores, efetuar a operação com eles e empilhar de volta o resultado obtido; No final do processo, o resultado da avaliação estaráno topo da pilha. 13

17 Segue abaixo a descrição passo a passo da resolução da expressão citada acima [1] Figura 2: Resolução da expressão AB+CD-/* 14

18 2.12 Main #include <s t d i o. h> #include <s t d l i b. h> #include "TExp. h" 5 int main ( int argc, char argv [ ] ) char ArquivoEntrada = argv [ 1 ] ; // arquivo de entrada double Resultado ; // r e s u l t a d o int i = 1 ; 10 char Exp [ 5 0 ] = "" ; // expressão TItem ExpPosfixa [ 5 0 ] ; // expressão p o s f i x a // abre o arquivo em modo de l e i t u r a FILE fp = fopen ( ArquivoEntrada, " r " ) ; 15 i f (! fp ) p r i n t f ( "Erro na a b e r t u r a do arquivo " ) ; e x i t ( 0 ) ; 20 // enquanto nao f o r o f i n a l do arquivo while (! f e o f ( fp ) ) // l ê a expressão f s c a n f ( fp, "%s \n",exp) ; 25 p r i n t f ( " Teste %d\n", i ) ; // V e r i f i c a se a expressão e s t a c o r r e t a e a c o nverte i f ( ConverteToPosfix (Exp, ExpPosfixa ) ) 30 // r e s o l v e a expressão ResolveExpressao ( ExpPosfixa, &Resultado ) ; // imprime o r e s u l t a d o p r i n t f ( "%.1 l f \n\n", Resultado ) ; 35 else p r i n t f ( " Expressao i n c o r r e t a \n\n" ) ; // caso a expressão nao e s t e j a c o r r e t a // incrementa o contador 40 i ++; f c l o s e ( fp ) ; return 0 ; Programa 12: Main O Main do tem a finalidade de utilizar as funções definidas para avaliar expressões matemáticas, conversão para a forma posfixa e a resolução da expressão. O Main consiste de um parser que lê expressões de um arquivo de entrada passado por linha de comando, resolve cada expressão do arquivo e exibe os resultados na tela. Caso a expressão não esteja correta ele exibe uma mensagem indicando qual teste falhou. 15

19 3 Análise de complexidade dos algoritmos 3.1 Função FPVazia Essa função possui 4 comandos. Dessa forma, obtemos a funcao de complexidade para a função: O(n) = 4 (1) Resolvendo a equação obtemos: f(n) = 4 Então a ordem de complexidade da função é O (f(n)), ou seja, O(1). 3.2 Função PEhVazia Essa funcão possui 1 comparação. Dessa forma, obtemos a função de complexidade para a função: O(n) = 1 (2) Resolvendo a equação obtemos: f(n) = 1 Então a ordem de complexidade da função é O (f(n)), ou seja, O(1). 3.3 Função PEmpilha Essa função possui 1 comparação e 6 comandos. Dessa forma, obtemos a função de complexidade para a função: O(n) = 7 (3) Resolvendo a equação obtemos: f(n) = 7 Então a ordem de complexidade da função é O (f(n)), ou seja, O(1). 3.4 Função PDesempilha Essa função possui 1 comparação e 6 comandos. Dessa forma, obtemos a função de complexidade para a função: O(n) = 7 (4) Resolvendo a equação obtemos: f(n) = 7 Então a ordem de complexidade da função é O (f(n)), ou seja, O(1). 3.5 Função PTamanho Essa função possui apenas 1 comando. Dessa forma, obtemos a função de complexidade para a função: O(n) = 1 (5) Resolvendo a equação obtemos: f(n) = 1 Então a ordem de complexidade da função é O (f(n)), ou seja, O(1). 16

20 3.6 Funções de Verificação Essas funções juntas possuem no pior caso 9 comparações. Dessa forma, obtemos a função de complexidade para a função: O(n) = 9 (6) Resolvendo a equação obtemos: f(n) = 9 Então a ordem de complexidade da função é O (f(n)), ou seja, O(1). 3.7 Função Prioridade Essa função possui no pior caso 5 comparações. Dessa forma, obtemos a função de complexidade para a função: O(n) = 5 (7) Resolvendo a equação obtemos: f(n) = 5 Então a ordem de complexidade da função é O (f(n)), ou seja, O1). 3.8 Função VerificaExpressao Essa função possui 2 comparações, 1 atribuição e um loop que percorre toda a expressão que contém 6 comparações no pior caso. Dessa forma, obtemos a função de complexidade para a função: O(n) = 3 + n 1 i=0 6 (8) Resolvendo o somatório obtemos: f(n) = 6n + 3 Então a ordem de complexidade da função é O (f(n)), ou seja, O(n). 3.9 Função ConverteToPosfix Essa função possui 1 comparação, 2 atribuições, a chama da função FPVazia, um loop com a chamada da função PDesempilha e 2 comandos e um loop que percorre toda a expressão que contém 2 comparações e um loop com 2 comandos e a chamada da função PDesempilha, 1 comando e a chamada da função PEmpilha. Dessa forma, obtemos a função de complexidade para a função: O(n) = n 1 i=0 (2 + 7) + n 1 i=0 n 1 ( i=0 (2 + 7)) (9) Resolvendo o somatório obtemos: f(n) = 7 + 9n + 8n + 9n 2 = 9n n + 7 Então a ordem de complexidade da função é O (f(n)), ou seja, O(n 2 ). 17

21 3.10 Função ResolveExpressao Essa função possui 2 atribuições, a chamada das funções FPVazia e PDesempilha, e um loop, que percorre toda a expressão posfixa, que contém, no pior caso, 2 comparações, 2 chamadas da função PDesempilha, um switch com 4 comparações, 2 comandos e a chamada da função PEmpilha. Dessa forma, obtemos a função de complexidade para a função: O(n) = n 1 i= (10) Resolvendo o somatório obtemos: f(n) = 29n + 13 Então a ordem de complexidade da função é O (f(n)), ou seja, O(n) Main Como na função Main é feita a chamada de todas as funções, sua complexidade é dada pela soma de todas as outras complexidades. Dessa forma, obtemos a função de complexidade para a função: O(main) = O(max(O(n 2 ),O(n),O(1))) Resolvendo essa igualdade obtemos que a ordem de complexidade do Main é O(n 2 ). 18

22 4 Testes Foram executados alguns testes para verificar o funcionamento das funções do programa. Figura 3: Empilha, Desempilha, Pilha Vazia e Tamanho Figura 4: Avaliação de Expressões Figura 5: Conversão paraa forma PosFixa 19

23 Figura 6: Resolução das expressões 20

24 5 Conclusão Este trabalho possibilitou um aprofundamento maior sobre a linguagem C, bem como a revisão e fixação de conceitos sobre pilhas, ponteiros e avaliação de expressões matemáticas usando pilhas. Possibilitou também o aprendizado de pilhas implementadas por encadeamento (apontadores). Concluiu-se que avaliar uma expressão da forma posfixa é bem mais simples porque dispensa o uso de parênteses e não há prioridades definidas para os operadores, eles são avaliados na sequência que aparecem. O uso de pilha pra converter uma expressão para forma posfixa e avaliar uma expressão é bem simples e intuitivo. As dificuldades encontradas foram de descobrir que era mais fácil usar a forma posfixa de uma expressão, como convertê-la e avaliá-la. As mesmas foram sanadas com o auxilio da bibliografia citada e a ajuda do monitor. 21

25 Referências [1] Sérgio Furgeri. Avaliação de expressões, [2] David Menotti. CIC102 - Algoritmos e Estruturas de Dados 1, Outubro [3] N. Ziviani. Projeto de Algoritmos: com implementações em Pascal e C. Cengage Learning (Thomson / Pioneira), São Paulo, 2nd edition,

Listas (Parte 2) Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br. BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Listas (Parte 2) Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br. BCC202 Aula 10 Algoritmos e Estruturas de Dados I Listas (Parte 2) Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br BCC202 Aula 10 Algoritmos e Estruturas de Dados I Listas Encadeadas Características: Tamanho da lista não é pré-definido Cada elemento

Leia mais

Avaliação de Expressões

Avaliação de Expressões valiação de Expressões valiação de Expressões - Como efetuar o cálculo de uma expressão em um computador? Exemplo: / B C D + E Regras usuais da matemática. Os parênteses alteram a ordem das expressões:

Leia mais

ESTRUTURA DE DADOS PILHA

ESTRUTURA DE DADOS PILHA ESTRUTURA DE DADOS PILHA CONCEITO DE PILHAS - Pilhas são listas lineares onde a inserção de um novo item ou a remoção de um item já existente se dá em uma única extremidade, no topo. Pilha vazia Insere(A)

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais:

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais: Estruturas de Dados Pilhas Prof. Ricardo J. G. B. Campello Créditos Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais: disponíveis em http://ww3.datastructures.net/ cedidos

Leia mais

2ª Lista de Exercícios

2ª Lista de Exercícios Universidade Federal de Minas Gerais Departamento de Ciência da Computação Algoritmos e Estruturas de Dados II (Turmas M, N, W, F) 1º Semestre de 2012 Profs. Camilo Oliveira, Gisele Pappa, Ítalo Cunha,

Leia mais

PROGRAMAÇÃO II 3. PILHA DINÂMICA

PROGRAMAÇÃO II 3. PILHA DINÂMICA 3. PILHA DINÂMICA PROGRAMAÇÃO II Prof. Jean Eduardo Glazar Uma pilha é um tipo especial de Pilha na quais todas as inserções e remoções são feitas na primeira posição, que é chamada de topo. Outro nome

Leia mais

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS Disciplina de Nivelamento - 2000/1: ALGORITMOS & ESTRUTURAS DE DADOS Professor Responsável: Prof. Fernando Santos

Leia mais

Estruturas de Dados Pilhas, Filas e Deques

Estruturas de Dados Pilhas, Filas e Deques Estruturas de Dados Pilhas, Filas e Deques Prof. Eduardo Alchieri Estruturas de Dados Pilhas Pilhas Lista LIFO (Last In, First Out) Os elementos são colocados na estrutura (pilha) e retirados em ordem

Leia mais

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Breve Histórico A linguagem de programação C foi criada na década de 70, por Dennis Ritchie, que a implementou,

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO Curso: Engenharia de Computação e Ciência da Computação Data: 10/09/2013 Disciplina: Programação Estruturada Valor: 3,0 pontos Professor: Henrique Monteiro Cristovão Nota: Aluno: Prova resolvida 4ª Prova

Leia mais

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011 Estruturas de Dados Aula 11: TAD Pilha 09/05/2011 Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 3; Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo

Leia mais

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA FUNDAÇÃO EDUCACIONAL DE ITUIUTABA ASSOCIADA À UNIVERSIDADE DO ESTADO DE MINAS GERAIS CURSO DE SISTEMA DE INFORMAÇÃO PILHA E FILA Prof. Walteno Martins Parreira Júnior www.waltenomartins.com.br waltenomartins@yahoo.com

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Curso de Linguagem C

Curso de Linguagem C Curso de Linguagem C 1 Aula 1 - INTRODUÇÃO...4 AULA 2 - Primeiros Passos...5 O C é "Case Sensitive"...5 Dois Primeiros Programas...6 Introdução às Funções...7 Introdução Básica às Entradas e Saídas...

Leia mais

Pilha. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Pilha. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Pilha David Menotti Algoritmos e Estruturas de Dados II DInf UFPR O que é uma pilha? Pilha 4 4 3 3 2 1 2 1 O que é uma pilha? Pilha 4 3 2 1 TAD Pilha Tipo Abstrato de dados com a seguinte característica:

Leia mais

Pilhas. Profa Morganna Diniz

Pilhas. Profa Morganna Diniz Pilhas Profa Morganna Diniz Pilhas Geralmente pilhas são úteis em situações em que dados devem ser recuperados em ordem inversa a do armazenamento É uma estrutura de dados linear que permite acesso por

Leia mais

Métodos Computacionais. Árvores

Métodos Computacionais. Árvores Métodos Computacionais Árvores Árvores Vetores e Listas são ótimos para representar estrutura de dados lineares, mas não para modelar dados hierárquicos Exemplos de dados hierárquicos: sistema de arquivos

Leia mais

Aula 3 Alocação Dinâmica

Aula 3 Alocação Dinâmica Aula 3 Alocação Dinâmica Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas de Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno

Leia mais

Componentes da linguagem C++

Componentes da linguagem C++ Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras

Leia mais

Trabalho 3: Agenda de Tarefas

Trabalho 3: Agenda de Tarefas INF 1620 Estruturas de Dados Semestre 08.2 Trabalho 3: Agenda de Tarefas O objetivo deste trabalho é a implementação de um conjunto de funções para a manipulação de uma agenda de tarefas diárias, de forma

Leia mais

Primeiro Curso de Programação em C 3 a Edição

Primeiro Curso de Programação em C 3 a Edição Edson Luiz França Senne Primeiro Curso de Programação em C 3 a Edição Visual Books Sumário Prefácio da Terceira Edição 9 Prefácio da Primeira Edição 11 Aula 1 13 Regras de sintaxe de uma linguagem de programação...

Leia mais

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti ESTRUTURAS DE DADOS I Notas de Aula 1 SUMÁRIO 1. INTRODUÇÃO... 2 1.1 Array (vetores)... 2 2. BUSCA DE ELEMENTOS... 3 2.1 Busca Seqüencial... 3 2.2 Busca Binária... 3 2.3 Busca Indexada... 3 2.4 Busca Hash...

Leia mais

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar e manipular dados em um computador Para representar um baralho precisamos: Representar cartas: naipe e valor struct

Leia mais

INF1007 - PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

INF1007 - PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15 INF1007 - PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15 1. Um número racional é expresso por dois inteiros: um numerador e um denominador (este último diferente de zero!). Implemente um TAD para representar números

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Pilhas A estrutura de dados Pilha emula a forma de organização de objetos intuitiva que é utilizada diariamente nos mais diversos contextos da vida humana. Containeres são empilhados e desempilhados diariamente

Leia mais

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

Leia mais

INF 1620 P1-10/04/02 Questão 1 Nome:

INF 1620 P1-10/04/02 Questão 1 Nome: INF 1620 P1-10/04/02 Questão 1 Considere uma disciplina que adota o seguinte critério de aprovação: os alunos fazem duas provas (P1 e P2) iniciais; se a média nessas duas provas for maior ou igual a 5.0,

Leia mais

Filas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Filas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Filas David Menotti Algoritmos e Estruturas de Dados II DInf UFPR O que é uma fila? 1 4 3 2 Fila 1 2 3 4 O que é uma fila? Fila 1 2 3 4 O que é uma fila? 1 Fila 2 3 4 O que é uma fila? 1 2 Fila 3 4 O que

Leia mais

José Romildo Malaquias 2011-1

José Romildo Malaquias 2011-1 Programação de Computadores I Aula 08 Programação: Estruturas de Repetição José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/58 Motivação Como imprimir os três

Leia mais

Manipulação de Arquivos

Manipulação de Arquivos Manipulação de Arquivos Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Tipo

Leia mais

Busca. Pesquisa sequencial

Busca. Pesquisa sequencial Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um

Leia mais

Resumo da Matéria de Linguagem de Programação. Linguagem C

Resumo da Matéria de Linguagem de Programação. Linguagem C Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis

Leia mais

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu. Programação Estruturada Linguagem C Fundamentos da Linguagem Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Estrutura Básica Bibliotecas Básicas Tipos de Dados Básicos Variáveis/Declaração

Leia mais

Aula 01. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson.

Aula 01. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson. - Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios Aula 01 Slide 1 BIBLIOGRAFIA SCHILDT H. C Completo e Total, Makron Books. SP, 1997. Curso de linguagem C da UFMG. ZIVIANI,

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

Experimentos com a memória cache do CPU

Experimentos com a memória cache do CPU Experimentos com a memória cache do CPU Alberto Bueno Júnior & Andre Henrique Serafim Casimiro Setembro de 2010 1 Contents 1 Introdução 3 2 Desvendando o cache 3 2.1 Para que serve o cache?.....................

Leia mais

Programas simples em C

Programas simples em C Programas simples em C Problema 1. Escreve um programa em C que dados dois inteiros indique se são iguais ou qual o maior. Utilizar a construção em 5 etapas... quais? 1. Perceber o problema 2. Ideia da

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Introdução No capítulo anterior verificamos que a execução seqüencial dos comandos da função main nos limita a programação de algoritmos muito simples. Passamos, então, a dedicar

Leia mais

Programação Básica em Arduino Aula 2

Programação Básica em Arduino Aula 2 Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas

Leia mais

Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II Universidade Federal do Vale do São Francisco Algoritmos e Estrutura de Dados II Professor: Marcelo Santos Linder E-mail: marcelo.linder@univasf.edu.br Ementa Árvores B, grafos e tabelas de hash: alocação

Leia mais

Alocação dinâmica de memória

Alocação dinâmica de memória Alocação dinâmica de memória Jander Moreira 1 Primeiras palavras Na solução de problemas por meio algoritmos ou programas, é comum surgir a necessidade de manter todo o conjunto de dados a ser processado

Leia mais

Curso de C: uma breve introdução

Curso de C: uma breve introdução V Semana de Engenharia Elétrica - UFBA Licença de uso e distribuição Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da: Creative Commons License:

Leia mais

Estruturas (Registros)

Estruturas (Registros) Estruturas (Registros) Agrupa conjunto de tipos de dados distintos sob um único nome string string inteiro inteiro inteiro float float Cadastro Pessoal Nome Endereço Telefone Idade Data de Nascimento Peso

Leia mais

Expressões. Prof. Alberto Costa Neto alberto@ufs.br. Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Expressões. Prof. Alberto Costa Neto alberto@ufs.br. Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe Linguagens de Programação Departamento de Computação Universidade Federal de Sergipe Expressão é uma frase de um programa que ao ser avaliada retorna um valor Tipos Literais Agregados Chamadas de Função

Leia mais

Funções recursivas. O exemplo mais comum: int fat(int n){ if(n == 0) return 1; return n*fat(n-1); }

Funções recursivas. O exemplo mais comum: int fat(int n){ if(n == 0) return 1; return n*fat(n-1); } Funções Recursivas Funções recursivas O exemplo mais comum: int fat(int n){ if(n == 0) return 1; return n*fat(n-1); Versão sem recursão: int fat(int n){ int i = 0; int f = 1; for(i=1; i

Leia mais

Figura 13.1: Um exemplo de árvore de diretório.

Figura 13.1: Um exemplo de árvore de diretório. 13. Árvores W. Celes e J. L. Rangel Nos capítulos anteriores examinamos as estruturas de dados que podem ser chamadas de unidimensionais ou lineares, como vetores e listas. A importância dessas estruturas

Leia mais

http://www.dcc.ufmg.br/algoritmos/transparenc ias.php

http://www.dcc.ufmg.br/algoritmos/transparenc ias.php Estruturas Aula 8: 10/09/2008 Listas de Informação (parte 2) TAD /* FLVazia(Lista). Faz Lista a lista (1) /* Insere(x, Input: Output: Pré-condição: Pós-condição: L L ficar L édefinida vazia */ Pós-condição:

Leia mais

Listas Duplamente Encadeadas

Listas Duplamente Encadeadas Listas Duplamente Encadeadas! quando for preciso seguir a seqüência de elementos em ambos os sentidos! cada nó possui dois ponteiros: ant e prox ant prox a b c d Início Fim 1 Listas Duplamente Encadeadas

Leia mais

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Resumo da Introdução de Prática de Programação com C. A Linguagem C Resumo da Introdução de Prática de Programação com C A Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

Programação de Computadores I. Ponteiros

Programação de Computadores I. Ponteiros Ponteiros Prof. Edwar Saliba Júnior Outubro de 2012 Unidade 13 Ponteiros 1 Identificadores e Endereços Na linguagem C, uma declaração de variável faz associação entre um identificador e endereços de memória;

Leia mais

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza Introdução Manipulação de arquivos em C Estrutura de Dados II Prof Jairo Francisco de Souza Manipulação de Arquivo em C Existem dois tipos possíveis de acesso a arquivos na linguagem C : sequencial (lendo

Leia mais

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática Folha 1-1 Introdução à Linguagem de Programação JAVA 1 Usando o editor do ambiente de desenvolvimento JBUILDER pretende-se construir e executar o programa abaixo. class Primeiro { public static void main(string[]

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Pilhas Filas Deques Pilhas,,f filas e deques Vimos que as listas lineares admitem inserção e eliminação

Leia mais

Estrutura de Dados Básica

Estrutura de Dados Básica Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 8: Pilhas com Alocação de Memória Estática O objetivo desta aula é apresentar estrutura de dados Pilha e suas aplicações. Introdução Embora

Leia mais

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 4 PROF. MARCELO LUIZ SILVA (R E D)

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 4 PROF. MARCELO LUIZ SILVA (R E D) Universidade Federal de Ouro Preto - UFOP Instituto de Ciências Exatas e Biológicas - ICEB Departamento de Computação - DECOM INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 1 AULA TEÓRICA 4

Leia mais

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Linguagem e Técnicas de Programação I Operadores, expressões e funções Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Operadores básicos Toda linguagem de programação, existem

Leia mais

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1 14. Arquivos W. Celes e J. L. Rangel Neste capítulo, apresentaremos alguns conceitos básicos sobre arquivos, e alguns detalhes da forma de tratamento de arquivos em disco na linguagem C. A finalidade desta

Leia mais

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento Hello World Linguagem C printf("hello world!\n"); main é a função principal, a execução do programa começa por ela printf é uma função usada para enviar dados para o vídeo Palavras Reservadas auto double

Leia mais

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Estruturas de Dados Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Árvores Conceitos Árvores binárias Árvores binárias de pesquisa Árvores binárias balanceadas Árvores ESTRUTURAS

Leia mais

1. Introdução... 1 1.1. Definição... 1 1.2. Conceitos relacionados... 2

1. Introdução... 1 1.1. Definição... 1 1.2. Conceitos relacionados... 2 Índice i Índice Capítulo 4 Estrutura de Dados não sequencial com armazenamento não sequencial ( Árvore ) 1. Introdução... 1 1.1. Definição... 1 1.2. Conceitos relacionados... 2 2. Árvores binárias... 2

Leia mais

10. Listas Encadeadas

10. Listas Encadeadas 10. Listas Encadeadas W. Celes e J. L. Rangel Para representarmos um grupo de dados, já vimos que podemos usar um vetor em C. O vetor é a forma mais primitiva de representar diversos elementos agrupados.

Leia mais

Programação Estruturada I

Programação Estruturada I Programação Estruturada I Introdução a Linguagem C Prof. Thiago Caproni Tavares 1 Prof. Mateus dos Santos 2 1 thiago.tavares@ifsuldeminas.edu.br 2 mateus.santos@ifsuldeminas.edu.br Última Atualização:

Leia mais

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 1 PONTEIROS Prof. Yandre Maldonado e Gomes da Costa PONTEIROS Prof. Yandre Maldonado - 2 Ponteiro é uma variável que possui o endereço de outra variável; É um poderoso recurso

Leia mais

struct LISTA item quant

struct LISTA item quant UNIVERSIDADE SÃO JUDAS TADEU ESTRUTURA DE DADOS - PROF. H. Senger IMPLEMENTAÇÃO DE LISTAS COM VETORES A implementação de listas utilizando vetores é simples. Existe apenas uma pequena questão, com relação

Leia mais

INTRODUÇÃO À LINGUAGEM C++

INTRODUÇÃO À LINGUAGEM C++ INTRODUÇÃO À LINGUAGEM C++ 1 - VARIÁVEIS Variáveis espaço de memória reservado para armazenar tipos de dados, com um nome para referenciar seu conteúdo. Observações importantes Todas as variáveis devem

Leia mais

Programação: Tipos, Variáveis e Expressões

Programação: Tipos, Variáveis e Expressões Programação de Computadores I Aula 05 Programação: Tipos, Variáveis e Expressões José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/56 Valores Valor é uma entidade

Leia mais

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++ Edwar Saliba Júnior Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++ Belo Horizonte 2009 Sumário 1 Nota:... 2 2 Comandos e Palavras Reservadas:... 3 3 Dicas... 4

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 12 Cadeia de Caracteres (Strings) Edirlei Soares de Lima Caracteres Até o momento nós somente utilizamos variáveis que armazenam números (int, float ou

Leia mais

Introdução à Linguagem C

Introdução à Linguagem C Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 2 Linguagem C: Desenvolvida por Dennis Ritchie nos laboratórios da AT&T Bell (EUA) no início dos anos 70; Algol

Leia mais

Tipo Abstrato de Dados

Tipo Abstrato de Dados Tipo Abstrato de Dados David Menotti Algoritmos e Estruturas de Dados II DInf - UFPR Qual a diferença entre um algoritmo e um programa? Algoritmos e Estruturas de Dados Algoritmo: Sequência de ações executáveis

Leia mais

Estruturas de Dados Aula 15: Árvores 17/05/2011

Estruturas de Dados Aula 15: Árvores 17/05/2011 Estruturas de Dados Aula 15: Árvores 17/05/2011 Fontes Bibliográficas Livros: Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 13; Projeto de Algoritmos (Nivio Ziviani): Capítulo

Leia mais

EAD Árvore árvore binária

EAD Árvore árvore binária EAD Árvore árvore binária - Uma árvore binária é um conjunto finito de elementos (nodos) que pode ser vazio ou particionado em três subconjuntos: - raiz da árvore (elemento inicial, que é único); - subárvore

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Variáveis na linguagem C: tipo char O tipo char representa um caractere ASCII (ocupa só 1 byte) int main(int argc, char **

Leia mais

OPERADORES E ESTRUTURAS DE CONTROLE

OPERADORES E ESTRUTURAS DE CONTROLE OPERADORES E ESTRUTURAS DE CONTROLE 3.1 Operadores Os operadores indicam o tipo de operação matemática que será executada gerando novos valores a partir de um ou mais operadores. São muito utilizados em

Leia mais

Programa ConsoleRPN. PUC-Rio CIV 2802 - Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira

Programa ConsoleRPN. PUC-Rio CIV 2802 - Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira Programa ConsoleRPN Programa criado com o Visual Studio Community 2013 para efetuar operações algébricas entre números, uma calculadora funcionando com console usando RPN PUC-Rio CIV 2802 - Sistemas Gráficos

Leia mais

Aula 1 Tipo Abstrato de Dados

Aula 1 Tipo Abstrato de Dados Aula 1 Tipo Abstrato de Dados Luiz Chaimowicz e Raquel O. Prates Livro Projeto de Algoritmos Capítulo 1 2009-1 O que é um algoritmo? O que é um programa? Algoritmos Sequência de ações executáveis para

Leia mais

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

Programação. Folha Prática 3. Lab. 3. Departamento de Informática Universidade da Beira Interior Portugal 2015. Copyright 2010 All rights reserved. Programação Folha Prática 3 Lab. 3 Departamento de Informática Universidade da Beira Interior Portugal 2015 Copyright 2010 All rights reserved. LAB. 3 3ª semana EXPRESSÕES E INSTRUÇÕES 1. Revisão de conceitos

Leia mais

Pesquisa Sequencial e Binária

Pesquisa Sequencial e Binária Pesquisa Sequencial e Binária Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 20 Algoritmos e Estruturas de Dados I Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial

Leia mais

Programação em C++: Introdução

Programação em C++: Introdução Programação em C++: Introdução J. Barbosa J. Tavares Visualização Científica Conceitos básicos de programação Algoritmo Conjunto finito de regras sobre as quais se pode dar execução a um dado processo

Leia mais

Estruturas de entrada e saída

Estruturas de entrada e saída capa Estruturas de entrada e saída - A linguagem C utiliza de algumas funções para tratamento de entrada e saída de dados. - A maioria dessas funções estão presentes na biblioteca . - As funções

Leia mais

Curso de C para Engenharias

Curso de C para Engenharias Aula 4 Cristiano Dalbem Dennis Balreira Gabriel Moreira Miller Biazus Raphael Lupchinski Universidade Federal do Rio Grande do Sul Instituto de Informática Grupo PET Computação Sintaxe Funções Exemplos

Leia mais

compreender a importância de cada estrutura de controle disponível na Linguagem C;

compreender a importância de cada estrutura de controle disponível na Linguagem C; Aula 3 Estruturas de controle Objetivos Esperamos que, ao final desta aula, você seja capaz de: compreender a importância de cada estrutura de controle disponível na Linguagem C; construir programas em

Leia mais

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial Índice i Índice Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial 1. A Estrutura Abstrata de Dados Lista... 1 1.1. Definição... 1 1.2. Implementação de Listas utilizando armazenamento

Leia mais

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Operações com Strings Introdução a Ponteiros e Funções Profa Rosana Braga 1 Strings Strings são seqüências de caracteres

Leia mais

Curso de C. Procedimentos e Funções. 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1

Curso de C. Procedimentos e Funções. 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1 Curso de C Procedimentos e Funções 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1 Funções Roteiro: Funções Declaração e chamada Funções importantes Exemplos de funções Variáveis Globais,

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 06 Tipos Estruturados Edirlei Soares de Lima Dados Compostos Até agora somente utilizamos tipos de dados simples: char, int, float, double. Muitas vezes

Leia mais

Algoritmos e Programação. Prof. Tarcio Carvalho

Algoritmos e Programação. Prof. Tarcio Carvalho Algoritmos e Programação Prof. Tarcio Carvalho Conceito de Lógica A utilização da lógica na vida do indivíduo é constante, visto que é ela quem possibilita a ordenação do pensamento humano. Exemplo: A

Leia mais

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

MC102 Algoritmos e programação de computadores Aula 3: Variáveis MC102 Algoritmos e programação de computadores Aula 3: Variáveis Variáveis Variáveis são locais onde armazenamos valores na memória. Toda variável é caracterizada por um nome, que a identifica em um programa,

Leia mais

13 Números Reais - Tipo float

13 Números Reais - Tipo float 13 Números Reais - Tipo float Ronaldo F. Hashimoto e Carlos H. Morimoto Até omomentonoslimitamosaouso do tipo inteiro para variáveis e expressões aritméticas. Vamos introduzir agora o tipo real. Ao final

Leia mais

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES ALGORITMOS DE BUSCA EM LISTAS COM ALOCAÇÃO SEQÜENCIAL Busca em Listas Lineares A operação de busca é

Leia mais

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação Lógica de Programação 3. INTRODUÇÃO À LINGUAGEM C Caro Aluno Vamos iniciar o terceiro capítulo da nossa disciplina. Agora vamos começar a aplicar os conceitos vistos nos capítulos anteriores em uma linguagem

Leia mais