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,

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

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

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

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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Lista de Exercícios - 04 Linguagem e Técnicas de Programação Professor: Edwar Saliba Júnior Estruturas de Repetição O que são e para que servem? São comandos que são utilizados

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

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

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

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

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

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

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

Introdução aos cálculos de datas

Introdução aos cálculos de datas Page 1 of 7 Windows SharePoint Services Introdução aos cálculos de datas Aplica-se a: Microsoft Office SharePoint Server 2007 Ocultar tudo Você pode usar fórmulas e funções em listas ou bibliotecas para

Leia mais

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2 FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO Projeto e Análise de Algoritmos II Lista de Exercícios 2 Prof. Osvaldo. 1. Desenvolva algoritmos para as operações abaixo e calcule a complexidade

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

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

Princípios de funcionamento dos computadores

Princípios de funcionamento dos computadores Princípios de funcionamento dos computadores Objetivos da aula: - Entender o princípio de funcionamento dos computadores - Entender o conceito de programa e sua dinâmica de execução Tópicos da aula: -

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

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

Conceitos Importantes:

Conceitos Importantes: Conceitos Importantes: Variáveis: Por Flávia Pereira de Carvalho, 2007 i O bom entendimento do conceito de variável é fundamental para elaboração de algoritmos, consequentemente de programas. Uma variável

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

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

Algoritmos de Busca em Tabelas

Algoritmos de Busca em Tabelas Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas estão entre os mais usados. Considere por exemplo um sistema de banco de dados. As operações de busca e recuperação dos dados

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

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

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

Arquitetura de Computadores. Tipos de Instruções

Arquitetura de Computadores. Tipos de Instruções Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada

Leia mais

7. Estrutura de Decisão

7. Estrutura de Decisão 7. Estrutura de Decisão Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificaçã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

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

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

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

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

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 14 Árvores Binárias Edirlei Soares de Lima Árvores Uma estrutura de dados do tipo árvore permite que dados sejam organizados de maneira hierárquica.

Leia mais

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista. Universidade Federal do Espírito Santo Departamento de Informática Estruturas de Dados (INF09292) 1 o Trabalho Prático Período: 2011/1 Prof a Patrícia Dockhorn Costa Email: pdcosta@inf.ufes.br Data de

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

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

20 Caracteres - Tipo char

20 Caracteres - Tipo char 0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,

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

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Revisão Aula Anterior Estruturas de Decisão (If e Switch)

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Revisão Aula Anterior Estruturas de Decisão (If e Switch) CURSO BÁSICO DE PROGRAMAÇÃO AULA 9 Revisão Aula Anterior Estruturas de Decisão (If e Switch) Revisão Comandos básicos no terminal: Para verificar os arquivos que estão em uma pasta usa-se ls: Para acessar

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

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 06: Pilhas

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 06: Pilhas Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Aula 06: Pilhas O que é uma pilha? Pilha 4 4 3 3 2 1 2 1 O que é uma pilha? Pilha 4 4 3 3 2 1 2 1 TAD Pilha Tipo Abstrato de dados com a seguinte

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

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

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

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

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica) SCC 202 Algoritmos e Estruturas de Dados I Pilhas (Stacks) (implementação dinâmica) Operações alocação encadeada dinâmica typedef struct elem{ tipo_info info; struct elem *lig; tipo_elem; typedef struct{

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

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

Tutorial de Matlab Francesco Franco

Tutorial de Matlab Francesco Franco Tutorial de Matlab Francesco Franco Matlab é um pacote de software que facilita a inserção de matrizes e vetores, além de facilitar a manipulação deles. A interface segue uma linguagem que é projetada

Leia mais

Sistemas Operacionais e Introdução à Programação. Vetores e matrizes

Sistemas Operacionais e Introdução à Programação. Vetores e matrizes Sistemas Operacionais e Introdução à Programação Vetores e matrizes 1 Matrizes Cada elemento de uma matriz é referenciado indicando-se sua posição dentro da matriz. Na Matemática, matrizes são arranjos

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

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

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

Algoritmos e Programação

Algoritmos e Programação Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho O que é um Programa? Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais

Leia mais

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1 Estrutura de Dados Introdução a Ponteiros Prof. Gerson Borges Estrutura de Dados I 1 Sumário è Explicação da importância do planejamento de ensino; è Métodos e técnicas que iremos trabalhar durante o semestre;

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

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

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

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

Pilha. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Gustavo Batista

Pilha. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Gustavo Batista Pilha SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências

Leia mais

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis 1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3

Leia mais

ESTRUTURA CONDICIONAL

ESTRUTURA CONDICIONAL AULA 6 ESTRUTURA CONDICIONAL 130 Tem como objetivo executar um conjunto de comandos caso uma condição lógica seja atendida. Quando a resposta lógica for falsa, nada será executado. Sintaxe Se CONDIÇÃO

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

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

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Professor: Max Pereira http://paginas.unisul.br/max.pereira Ciência da Computação Primeiro Programa em Java public class OlaPessoal

Leia mais

Linguagem de Programação I

Linguagem de Programação I Linguagem de Programação I Curso de Sistemas de Informação Karla Donato Fook karladf@ifma.edu.br DESU / DAI 2016 Linguagem de Programação C 2 1 Linguagem de Programação C Os programas em C consistem em

Leia mais

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Introdução a linguagem C Estruturas de decisão

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Introdução a linguagem C Estruturas de decisão CURSO BÁSICO DE PROGRAMAÇÃO AULA 9 Introdução a linguagem C Estruturas de decisão Introdução à Linguagem C Linguagem compilada. Desenvolvida sobre os paradigmas de programação procedural. Uma das linguagens

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

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

ERROS MAIS COMUNS COMETIDOS EM PROGRAMAS E ALGORITMOS

ERROS MAIS COMUNS COMETIDOS EM PROGRAMAS E ALGORITMOS ERROS MAIS COMUNS COMETIDOS EM PROGRAMAS E ALGORITMOS Compilação dos erros mais comuns cometidos por estudantes de Introdução a Algoritmos Marcos Portnoi Edição 19.4.2007 Universidade Salvador UNIFACS

Leia mais

Programação: Estruturas de seleção

Programação: Estruturas de seleção Programação de Computadores I Aula 07 Programação: Estruturas de seleção José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/53 Valores booleanos Os valores booleanos

Leia mais

CADERNO DE TAREFAS 18/11/2006 9h 50min às 13h 50min

CADERNO DE TAREFAS 18/11/2006 9h 50min às 13h 50min IV MARATONA DE PROGRAMAÇÃO DA FAI CADERNO DE TAREFAS 18/11/2006 9h 50min às 13h 50min LEIA ATENTAMENTE ESTAS INSTRUÇÕES 1. É permitido consultar livros, anotações, help on line ou qualquer outro material

Leia mais