Anda di halaman 1dari 4

Lista 5 de Exerccios

13/09/2011

1. Implemente uma funo que receba como parmetros um vetor de nmeros inteiros v e seu comprimento n, e verifique se os elementos do vetor correspondem aos termos de uma PA (Progresso Aritmtica), isto , se existe um nmero inteiro k tal que v[i]=v[0]+k*i. Caso os elementos do vetor correspondam aos termos de uma PA, a funo deve retornar o valor calculado para k. Por exemplo, se for passado para essa funo o vetor {2,10,18,26,34} a funo deve retornar o valor 8. Caso o vetor no corresponda a uma PA, a funo deve retornar o valor 0. Assuma que o vetor sempre ter pelo menos 3 elementos. Essa funo deve ter o seguinte prottipo:
int testa_PA(int n, int* v)

2. Desde maro deste ano, os 33 txis da cidade de Rio das Ostras tiveram que instalar a aferir taxmetros para o clculo do valor das corridas. De acordo com a tabela em vigor, a tarifa inicial (ou bandeirada) custa R$4,95. Alm disso, para cada quilmetro percorrido so cobrados mais R$2,50, na bandeira 1, ou R$3,00, na bandeira 2. Escreva uma funo em C que calcula os valores da corrida de txi em Rio das Ostras. A funo recebe como parmetros o valor real dist, correspondendo distncia percorrida pelo txi (em quilmetros), e os ponteiros b1 e b2, indicando os endereos onde devem ser armazenados, respectivamente, os valores calculados para a corrida na bandeira 1 e na bandeira 2. void calcula_corrida(float dist, float *b1, float *b2);

3. A cadeia que representa a parte local de um endereo de e-mail Hotmail vlido (aquela parte que vem esquerda do @) tem no mximo 64 caracteres e pode conter apenas letras (a a z) e nmeros (0 a 9), e os caracteres ponto (.), hfen (-) e sublinhado (_). Quaisquer outros caracteres especiais ou letras acentuadas no so permitidos. Alm disso, a cadeia deve conter no mnimo duas letras ou nmeros, seu primeiro caractere tem que ser necessariamente uma letra, e o caractere ponto (.) no pode aparecer em sequncia ou ser o ltimo da cadeia. Por exemplo, jsilva, t.o.n.y-99_, x__7- so strings vlidas, enquanto 3marias, _peter, bia., abc...z so incorretas. Escreva uma funo em C que receba como parmetros a cadeia s, representando a parte local de um endereo de e-mail, e retorne 1 se a cadeia for vlida de acordo com as condies descritas, ou 0, se for invlida. A funo deve ter o seguinte prottipo:
int valida_mail(char *s);

4. Camel case a denominao em ingls para a prtica de escrever, a partir de palavras compostas ou frases, expresses constitudas pelo agrupamento dessas palavras com a letra inicial mauscula e as demais minsculas, unidas sem espaos. Por exemplo, NotaDaProva seria o correspondente em camel case expresso nota da prova. Este um padro muito utilizado para a criao de nomes de entidades em diversas linguagens de programao, como Java, Ruby e Python. Escreva uma funo em C que recebe uma cadeia de caracteres e a transforma em uma cadeia no padro camel case, ou seja, remove os espaos em branco e converte para maisculas as letras iniciais de cada palavra. Por simplificao, considere que a cadeia de entrada contm apenas letras minsculas (entre a e z e espaos em branco. Por exemplo, se a cadeia media da turma for passada para a funo, ser transformada na cadeia MediaDaTurma. O prottipo da funo :
void CamelCase (char *s);

Obs.: uma outra prtica manter a primeira letra minscula. Por exemplo: media da turma ser transformada na cadeia mediaDaTurma. Escolha qual a forma mais apropriada. char s[20]; strcpy(s,media da turma); CamelCase(s);

Exerccios com alocao dinmica


5. Escreva uma funo em C que receba como parmetros um vetor (vet) de n nmeros reais e um ponteiro para inteiro (tam) e retorne o ponteiro para um novo vetor, alocado dinamicamente, contendo somente os elementos do vetor original que so maiores que a mdia de todos os valores. Por exemplo, o vetor {5.5, 3.2, 2.5, 9.4, 7.5, 4.1, 5.4, 8.0, 6.9}, daria origem ao vetor {9.4, 7.5, 8.0, 6.9}, de tamanho 4. No ponteiro para inteiro dever ser armazenado o tamanho do novo vetor. Se no for possvel alocar o novo vetor, a funo deve retornar NULL. float * acima_da_media(int n, float *vet, int *tam); 1) Calcular a mdia de vet 2) verificar quantos elementos de vet so maiores do que a mdia 3) alocar dinamicamente um vetresposta conforme o tamanho verificado no item 2 4) preencher o vetresposta com os elementos do item 2 5) atualizar a varivel ponteiro tam com o tamanho do novo vetor

6. Escreva uma funo em C que receba como parmetro uma cadeia de caracteres, contendo apenas letras entre 'A' e 'Z' ou 'a' e 'z' e espaos em branco, e retorne uma nova cadeia -- alocada dinamicamente --, contendo uma cpia da cadeia original, mas sem espaos em branco no incio ou no final, isto , sem qualquer caractere ' ' (espao) localizado antes da primeira letra ou depois da ltima letra da cadeia. Por simplificao, considere que a cadeia de entrada possui no mnimo uma letra (entre 'A' e 'Z' ou 'a' e 'z'). Por exemplo, se a cadeia nota do aluno (com trs espaos em branco no incio e dois no final) for passada para a funo, a cadeia retornada deve ser nota do aluno, sem nenhum espao no incio ou no final. Se no for possvel alocar dinamicamente a nova cadeia, a funo deve retornar NULL. O prottipo da funo :
char* compactar(char *s);

7. O cadastro de uma turma de n alunos representado por um vetor de inteiros, contendo a matrcula de cada aluno, e um vetor de reais, contendo a nota final de cada aluno, de tal modo que para uma mesma posio do vetor (mesmo ndice), a matrcula e a nota se referem a um mesmo estudante. Considere que um aluno est aprovado se tem nota final maior ou igual a 5,0. Escreva uma funo que recebe como parmetros o inteiro n, o ponteiro mat para o vetor de matrculas, o ponteiro notas para o vetor de notas e um ponteiro para a varivel inteira tam. A funo deve contar o nmero de alunos aprovados, criar um novo vetor de inteiros alocado dinamicamente com o tamanho exato para conter apenas a matrcula desses alunos, e armazenar no novo vetor as matrculas correspondentes. Finalmente, a funo dever armazenar o tamanho do novo vetor na varivel tam e retornar o ponteiro para seu primeiro elemento. O prottipo da funo : int *aprovados(int n, int *mat, float *notas, int *tam); 8. Todo ano um concurso de programao premia os participantes que obtm a maior mdia ponderada em uma bateria de dois testes. Escreva uma funo que recebe sete parmetros: o inteiro n indicando a quantidade de participantes do concurso, o ponteiro inscr para o vetor de inteiros que contm as inscries desses participantes, o ponteiro t1 para o vetor de reais que contm a nota de cada participante no primeiro teste, o inteiro p1 que indica o peso dessa nota na mdia ponderada, o ponteiro t2 para o vetor de reais que contm a nota de cada participante no segundo teste, o inteiro p2 que

indica o peso dessa nota na mdia ponderada, e um ponteiro para a varivel inteira tam. A funo deve: calcular a mdia ponderada de cada participante; criar um novo vetor de inteiros alocado dinamicamente com o tamanho exato para conter apenas as inscries dos participantes que obtiveram a maior mdia (pode haver empate); armazenar no novo vetor as inscries correspondentes (em qualquer ordem); armazenar o tamanho do novo vetor na varivel tam; e retornar o ponteiro para o novo vetor. Considere que para uma mesma posio do vetor (mesmo ndice), a inscrio e as notas se referem a um mesmo participante. O prottipo da funo : int *premiados(int n, int *inscr, float *t1, int p1,float *t2, int p2, int *tam); 9. Jlio Csar, o imperador romano, usava a Cifra de Csar para enviar ordens secretas aos seus generais. Este cdigo consiste em trocar cada letra de uma mensagem pela terceira letra seguinte. Ou seja, a letra a substituda por d, b substituda por e, c substituda por f, e assim por diante. As excees so as trs ltimas letras do alfabeto, x, y e z, que so substitudas, respectivamente, por a, b e c. Por exemplo, a palavra zebra se transformaria em cheud. Escreva uma funo que codifique uma mensagem de acordo com a Cifra de Csar, aplicando a codificao apenas s letras da mensagem, maisculas ou minsculas, e preservando os demais caracteres. Essa funo deve receber como parmetro uma cadeia de caracteres com a mensagem a ser codificada e retornar o ponteiro para uma nova cadeia de caracteres, alocada dinamicamente, com a mensagem codificada. A cadeia de caracteres original no pode ser alterada. A funo deve ter o seguinte prottipo:
char* cifra_cesar(char* msg);

Anda mungkin juga menyukai