Você está na página 1de 3

Estruturas de dados - Ficha de trabalho 2

Aluno lei903008 Luis Manuel Tavares de Moura / 09.Mar.2010

1) Elabore um programa que, recebendo qualquer nmero de argumentos, os mostre no ecr, um por linha.
#include <stdio.h> int main(int argc,char **argv){ int x; printf("Programa -%s-, chamado com %i argumentos\n",argv[0],argc); for(x=0;x<argc;x++) puts(argv[x]); // Mostrar argumento getchar(); return 0; }

2) Elabore um programa que calcule a mdia de um conjunto de nmeros recebidos como argumentos atravs da linha de comando. Por exemplo, se o programa for chamado com a linha de comando: media 4 6 4 6, deve apresentar: Foram introduzidos 4 nmeros, e a mdia 5.00. Use a funo atof(), que recebe uma string e devolve um real que se encontre no seu incio. Consulte o manual para obter mais informao sobre esta funo.
#include <stdio.h> #include <stdlib.h> int main(int argc,char **argv){ int x; float z=0; for(x=1;x<argc;x++) z += atoi (argv[x]); // somar valores printf("\n\tForam introduzidos %i numeros no argumento\n\ que totalizam %.0f, e a media e' %.2f \n\ \n\tNumeros digitados:\n\t", argc-1,z, z/(argc-1)); for(x=1;x<argc-1;x++) printf("%s + ",argv[x]); // Mostrar valores printf("%s \n ",argv[x]); getchar(); return 0; }

3) Desenvolva um programa que calcule o comprimento de uma srie de palavras recebidas como argumento pela linha de comando. Por exemplo, se o programa for invocado com a linha: conta esta palavra, esta e mais esta, a sua resposta dever ser: foram introduzidas 6 palavras, com os comprimentos: ( esta 4 / palavra, 8 / esta 4 / e 1 / mais 4 / esta 4
#include <stdio.h> #include <string.h> int main(int argc,char **argv){ int x; int z=0; for(x=1;x<argc;x++) z += strlen (argv[x]); // somar tamanho printf("\n\tForam introduzidos %i palavras no argumento\n\ que totalizam %i letras. \n\ \n\tPalavras digitadas:\n\n", argc-1,z); for(x=1;x<argc;x++) printf("\t%i = %s\n",strlen(argv[x]),argv[x]); // Mostrar getchar(); return 0; }

4) Descreva os passos do algoritmo de ordenao por seleco para ordenar o vector [34,2,21,14]. Pode usar, por exemplo, uma tabela, para tornar mais clara a explicao.

34 2 21 14

2 34
21 14

21 34
14

2 21

14 34

14 21
34

Do inicio at ao fim da tabela procura-se o maior elemento, colocando-o na posio mais abaixo ainda no ocupada. O ciclo ser repetido at que a ordenao esteja completa. Fluxograma: 1. Para j de 0 at tamanho 1.1. Menor j 1.2. Para i de j+1 at tamanho 1.2.1. Se tab[i] < tab[menor], menor = i 1.3. Troca tab[i] com tab[j]

5) Descreva e represente esquematicamente (por exemplo numa tabela) os passos do algoritmo de ordenamento por seleco, para ordenar por ordem decrescente a tabela: [23,5,23,6,7,2,7]
23 5 23 6 7 2 7 23 23 5 6 7 2 7 23 23 6 5 7 2 7 23 23 6 7 5 2 7 23 23 6 7 5 7 2 23 23 7 6 5 7 2 23 23 7 6 7 5 2 23 23 7 7 6 5 2

Do inicio at ao fim da tabela procura-se o menor elemento, colocando-o na posio mais abaixo ainda no ocupada. O ciclo ser repetido at que a ordenao esteja completa. Fluxograma: 1. Para j de 0 at tamanho 1.1. Maior j 1.2. Para i de j+1 at tamanho 1.2.1. Se tab[i] > tab[maior], maior = i 1.3. Troca tab[i] com tab[j]

6) Elabore uma funo que ordene, por seleco, por ordem decrescente, as letras de uma string. Escreva tambm um programa que pea ao utilizador uma string qualquer com 10 letras e a mostre com os caracteres ordenados.
#include <stdio.h> #include <string.h> #define N 50 // Funcao para ordenar uma tabela char ordena_seleccao(char *t,int n){ int j,k,maior; char temp; for(j=0;j<n;j++){ maior=j; for(k=j+1;k<n;k++) if(t[k] <= t[maior]) maior = k; temp = t[maior]; t[maior] = t[j]; t[j] = temp; } return 0;

} int main(){ int j; char nome[N]; printf("Digite uma frase ou palavra\n"); gets(nome); ordena_seleccao(nome,strlen(nome)); puts(nome); getchar(); return 0; }

7) Elabore uma funo que ordene por borbulhamento uma tabela de nmeros inteiros. Escreva tambm um programa que pea ao utilizador um nmero de telefone e apresente os dgitos ordenados.
#include <stdio.h> #include <string.h> #define N 50 // Funcao para ordenar uma tabela utilizando o algoritmo de seleccao int ordena_borbulhamento(char *t,int n){ int troca,j; char temp; do{ troca=0; for(j=1;j<n;j++) if(t[j]<t[j-1]){ temp=t[j]; t[j]=t[j-1]; t[j-1]=temp; troca=1; } }while(troca); return 0; } int main(){ int j; char tab[N]; printf("Digite o seu numero de telefone: "); gets(tab); ordena_borbulhamento(tab,strlen(tab)); puts(tab); getchar(); return 0; }

Descreva os passos realizados pelo algoritmos de ordenao dos dgitos 238 606 914.
Trocar: 6 com Trocar: 0 com Trocar: 6 com Trocar: 1 com Trocar: 4 com Trocar: 0 com Trocar: 1 com Trocar: 4 com Trocar: 0 com Trocar: 1 com Trocar: 4 com Trocar: 0 com Trocar: 1 com Trocar: 4 com Trocar: 1 com Trocar: 1 com Resultado 012346689 8 8 8 9 9 6 8 8 3 6 6 2 6 6 3 2