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

Documentos relacionados
Caracteres. Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência entre caracteres e códigos numéricos

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Caracteres e Cadeias de Caracteres

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Módulo 7 Cadeias de Caracteres

Vetores II. Strings Leitura e exibição Biblioteca string.h Operações com Strings. Matrizes Definição de Acesso Operações com Matrizes

INF 1005 Programação I

Cadeias de Caracteres (Strings)

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

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

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

3. Linguagem de Programação C

Introdução a Programação. Strings (Vetor de Caracteres)

Métodos Computacionais. Strings (Vetor de Caracteres)

ponteiros INF Programação I Prof. Roberto Azevedo

INF 1620 P1-16/09/06 Questão 1 Nome:

Char e Strings de Caracteres

Char e Strings de Caracteres

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Terceira Prova 20 de junho de 2011

Introdução à Programação C

Introdução à Programação. Strings

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

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

Disciplina de Algoritmos e Programação

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Linguagem C. André Tavares da Silva.

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

cadeia de caracteres (string) INF Programação I Prof. Roberto Azevedo

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P1 17/04/2010

Ponteiros. Baseado nos slides do Prof. Mauro.

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

Linguagem C: Arquivo-Texto

Computação Eletrônica. Strings. Prof: Luciano Barbosa. CIn.ufpe.br

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

Faculdade de Computação

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

Estruturas de Dados. Módulo 15 - Arquivos. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Introdução à Programação (CC111)

Funções em Linguagem C Parte II

ESTRUTURAS COMPOSTAS

Introdução à Programação em C

Fundamentos de Programação 1

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

EPs 1 e 2. EP2: veja. EP1: veja

INF 1620 P2-14/10/05 Questão 1 Nome:

Introdução a Programação. Manipulando Arquivos em Modo Texto

ESTRUTURAS COMPOSTAS VETOR

Computação Informática

Introdução à Computação II AULA 08 BCC Noturno - EMA896115B

Linguagem C Parte 4 - Extra

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

Vetores II Strings Leitura e exibição Biblioteca string.h Operações com Strings Matrizes Definição de Acesso Operações com Matrizes

6. Cadeia de caracteres

Caracteres e. cadeia de caracteres. IPC2 1999/2000 F. Nunes Ferreira

INF 1620 P1-11/04/08 Questão 1 Nome:

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Conceitos básicos. Computação eletrônica: Gurvan Huiban

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

imprimir seus quadrados.

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

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

LISTA DE EXERCÍCIOS MÊS 03

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

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 2º Semestre 2013/2014

Algoritmos RESUMO - LINGUAGEM C

Introdução à Linguagem C

Tratamento de Caracteres

CCO 016 Fundamentos de Programação

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

COMANDOS DE DECISÕES. O COMANDO if. O comando if instrui o computador a tomar uma decisão simples. Forma Geral: if (expressão de teste) instrução;

ESTRUTURAS COMPOSTAS VETOR

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

Apêndice B. Cadeias de Caracteres (Strings)

Vetores. Vetores. Vetores. Vetores. Vetores. Algoritmos e Lógica de Programação. Vetores

Introdução à Programação

Programação estruturada

1 Exercícios com ponteiros

Linguagem C Entrada/Saída (console)

INF 1620 P1-17/09/05 Questão 1 Nome:

1ª Lista de Exercícios

Cap. 3 Entrada e Saída e Controle de Fluxo

Strings. Adaptado de Deise Saccol

Introdução a Computação

INF 1620 P1-13/09/02 Questão 1 Nome:

Introdução à Computação - Linguagem C: aula 06. Mauro Cesar Bernardes 04/Junho/2014

INF 1007 Programação II

EXERCÍCIO DE SONDAGEM TURMA 01 SEMESTRE DATA: 01/11/2016. Matrícula Nome Nota

Linguagem C Ficheiros Compilação Separada

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

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

Tabela ASCII de caracteres de controle

Transcrição:

Estruturas de Dados Lista 1: soluções J. L. Rangel 1. Escreva um programa em C que lê três números inteiros do teclado, e imprime os três números em ordem crescente. #include <stdio.h> int leint(void) { printf(">"); scanf("%d",&i); return i; void troca(int *i, int *j){ int k=*i; *i=*j; *j=k; int main(void) { int i1, i2, i3; i1=leint(); i2=leint(); i3=leint(); if (i1>i2) troca(&i1, &i2); if (i2>i3) { troca(&i2, &i3); if (i1>i2) troca(&i1, &i2); printf("%d <= %d <= %d\n", i1, i2, i3); 4. Escreva uma função com protótipo int contaletra(char *s); que calcula o número de letras (maiúsculas e minúsculas) da cadeia s. /* letra verifica se c e uma letra veja tambem isalpha em <ctype.h> */ int letra(char c) { return ((c>='a') && (c<='z')) ((c>='a') && (c<='z')); (continua) Estruturas de Dados J.L. Rangel - 1

int contaletra(char *s) { int k=0; /* contador de letras */ int l=strlen(s); for (i=0; i<l; i++) if (letra(s[i])) k++; return k; Observação: veja na biblioteca <ctype.h> a função isalpha (diz se um caracter é uma letra) e outras funções semelhantes. 5. Escreva uma função que converte todas as letras de uma cadeia para maiúsculas. O protótipo pode ser void converte(char *s); /* min diz se c e' uma letra minuscula veja tambem islower em <ctype.h> */ int min(char c){ return (c>='a') && (c<='z'); /* veja tambem toupper em <ctype.h> */ void converte(char *s) { int l=strlen(s); int delta= 'a'-'a'; for (i=0; i<l; i++) if (min(s[i])) s[i]=s[i]-delta; Em vez de s[i]=s[i]-delta; em C se pode escrever s[i]-=delta; Estas abreviações devem ser usadas com cuidado, para não tornar os programas obscuros. 6. Escreva uma função que recebe como entrada uma cadeia, e devolve como saída uma cópia da cadeia. Esta função deve alocar o espaço necessário para a cópia. O protótipo pode ser char *copia(char *s); Solução (usando strcpy): #include <stdlib.h> #include <string.h> char *copia(char *s) { char *t=(char *)malloc(strlen(s)+1); return strcpy(t,s); Estruturas de Dados J.L. Rangel - 2

Esta outra solução é simples e elegante, mas não funciona! (Por que?) char *copia(char *s) { return s; 7. Idem, convertendo as letras da cópia para maiúsculas. Basta usar a função converte de (5). 8. Um código extremamente simples substitui cada letra pela letra seguinte, circularmente (Z é codificado como A). Por exemplo, Estruturas de Dados se transformaria em Ftusvuvsbt ef Ebept. Escreva funções para codificar e para decodificar cadeias segundo este código. /* ccod codifica um caracter */ char ccod(char c) { if ((c>='a') && (c<'z')) return ++c; if (c=='z') return 'A'; if ((c>='a') && (c<'z')) return ++c; if (c=='z') return 'a'; return c; /* cdec decodifica um caracter */ char cdec(char c) { if ((c>'a') && (c<='z')) return --c; if (c=='a') return 'Z'; if ((c>'a') && (c<='z')) return --c; if (c=='a') return 'z'; return c; /* scod codifica a cadeia s, por cima! */ void scod(char *s) { s[i]=ccod(s[i]); /* sdec decodifica a cadeia s, por cima! */ void sdec(char *s) { s[i]=cdec(s[i]); Estruturas de Dados J.L. Rangel - 3

9. Escreva um programa que lê uma frase (várias palavras) do teclado, e escreve as palavras uma por linha. Por exemplo, se a entrada fosse Estruturas de Dados a saída seria Estruturas de Dados Sugestão: O formato %[^\n] (qualquer coisa, exceto \n) pode ser usado por scanf para ler uma cadeia que contém brancos, até o Enter final. Além disso, há outras funções de leitura de cadeias, como gets e fgets, em <stdio.h>. #include <stdio.h> int main(void) { char s[80]; int m; /* m=1 -> mudar de linha no proximo branco */ printf(">"); /* com formato " %[^\n]" scanf le ate' o Enter do fim da entrada */ scanf(" %[^\n]",s); printf("[%s]\n",s); m=0; if (s[i]==' ') { if (m) { printf("\n"); m=0; else { printf("%c",s[i]); m=1; printf("\n"); O controle com m é necessário para mudar de linha só uma vez entre as palavras, mesmo que haja mais de um branco. O formato %[ ] só permite que sejam lidos os caracteres dentro dos colchetes; ^ quer dizer não, de forma que %[^\n] quer dizer qualquer coisa, até o fim da linha. Outras funções de <stdio.h> também leem uma linha, como gets, e fgets. (fgets é preferível, porque sua chamada especifica quantos caracteres podem ser lidos.) 10. Escreva uma função int igual(char *s1, char *s2); para descobrir se as cadeias s1 e s2 são iguais. Sugestão: comece descobrindo porque a solução abaixo não é aceitável. Estruturas de Dados J.L. Rangel - 4

/* bobagem! */ return s1==s2; A função dada verifica se o endereço das duas cadeias é o mesmo, em vez de verificar se os caracteres das duas cadeias são em mesmo número e iguais. Solução recursiva: if (s1[0]=='\0') return (s2[0]=='\0'); if (s2[0]=='\0') return 0; return (s1[0]==s2[0]) && igual(++s1,++s2); Solução iterativa (com for) for(i=0; (s1[i]!='\0') && (s2[i]!='\0'); i++) if (s1[i]!=s2[i]) return 0; /* aqui um dos dois caracteres e' nulo! */ return s1[i]==s2[i]; (abr 00) Estruturas de Dados J.L. Rangel - 5