• Nenhum resultado encontrado

7ª PRÁTICA Vetores

No documento Turmas: 3A ELT 3B ELT (páginas 144-150)

OBJETIVOS

 Implementar estruturas de dados através de vetores e/ou matrizes

Funções e Conceitos Utilizados

Vetores, rand( ), randomize( ), <stdlib.h> e <time.h>

Introdução

Vetores são estruturas que permitem o armazenamento sequencial de dados. Os vetores são definidos de acordo com um tipo de dado e todos os dados armazenados devem ser do mesmo tipo. Assim, um vetor do tipo char deve armazenar dados do tipo char. Da mesma forma, um vetor do tipo int deve armazenar dados do tipo int. A declaração de um vetor segue a sintaxe: <tipo> <nome>[<tamanho>]. Exemplos:

char nome[5]; int numero[10];

Uma vez declarado o vetor, o compilador C irá reservar um espaço contíguo de memória de forma a armazenar o vetor. Assim, considerando-se que o tipo char tem o tamanho de 1 byte, ao declarar o vetor nome, o compilador irá reservar 5 bytes contíguos. Já, para o vetor numero, o compilador irá reservar 20 bytes contíguos, já que o tipo int ocupa 2 bytes. Deve-se frisar que a memória alocada pelo compilador não estará necessariamente vazia. Assim, antes de utilizar o vetor, é boa prática inicializá-lo com valores nulos.

Cada elemento do vetor pode ser acessado de forma individual, através de um índice. No exemplo anterior, o primeiro elemento do vetor numero será acessado com o índice 0, chamando-se numero[0]. O último elemento será numero[9]. É importante notar que uma vez declarado um vetor, o compilador o trata como como um acesso direto a memória. Como exemplo, embora o vetor nome tenha sido declarado como de 5 elementos (índices de 0 a 4), as posições seguintes de memória poderão ser acessadas como nome[5], nome[6], nome[7], etc... Uma vez que o compilador C não faz nenhuma crítica sobre o range dos índices, cabe ao programador preocupar-se com este aspecto, de forma a evitar quaisquer comportamentos imprevisíveis.

O C permite ainda a definição de vetores multidimensionais. Tal como antes, o vetor multidimensional será declarado com dois ou mais índices.

143 Programas Exemplo Exemplo 1 #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() {

// Este programa calcula e armazena o quadrado de 10 numeros

int i; /* A variavel i sera usada como controle de repeticao */ int quad[10]; /* O vetor quad armazena os quadrados */

system("CLS"); for(i=0;i<10;i++) quad[i] = i*i; for(i=0;i<10;i++)

printf("O quadrado de %d e %d\n",i,quad[i]); printf("\n\n\n"); system("PAUSE"); return (0); } Exemplo 2 #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> int main() {

int megasena[6]; /* armazena numeros inteiros */ int i;

// A geracao de numeros aleatorios e baseada numa serie randomica // A funcao rand() busca numeros nesta serie. No entanto, os numeros, // apesar de aleatorios, serao sempre iguais a cada execucao do programa. //

// O problema e contornado com a funcao srand(time(0)), que inicializa rand()

// com um numero randomico. Esta funcao esta definida em time.h e // rand() esta definida em stdlib.h

srand( time(0)); // This will ensure a really randomized number by help of time.

system("CLS"); for(i=0; i<6; i++)

megasena[i] = (rand() % 60)+1; /* rand() %60 gera numeros de 0 a 59 */ printf("\n\nOs numeros sorteados sao: ");

for(i=0;i<6;i++) printf("%d ",megasena[i]);

// Voce vai notar que eventualmente um numero gerado pode aparecer repetido // no conjunto de 6 numeros... Voce consegue modificar o programa para // evitar isso?

printf("\n\n\n"); system("PAUSE"); return (0); }

144 Exemplo 3 #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() {

char nome[]="HOJE"; /* A variavel nome e uma string */ system("CLS");

putchar(nome[0]); /* Escreve a string letra a letra */ putchar(nome[1]); putchar(nome[2]); putchar(nome[3]); printf("\n\n\n"); system("PAUSE"); return (0); } Exemplo 4: #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() {

char nome[3]; /* A variavel nome e uma string de tamanho 3 */ system("CLS");

printf("\nDigite 3 letras: ");

nome[0]=getch(); /* Leitura da string letra a letra */ nome[1]=getch();

nome[2]=getch();

puts(nome); /* Escreve na tela o valor da string, adicionando um caracter NEWLINE */ printf("\n\n\n");

system("PAUSE"); return (0); }

145 Exemplo 5: #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() {

char n1[5]={'a','b','c'}; /* A variavel nome e uma string de tamanho 3 */ char n2[5]="def"; char n3[]={'g','h','i'}; char n4[]="jkl"; int v1[5]={1,2,3,4,5}; int v2[5]={6,7,8}; int v3[]={6,7,8}; int i; system("CLS"); printf("\nn1[5]={'a','b','c'} -> ");

for(i=0;i<5;i++) printf("n1[%d]=%c ",i,n1[i]); printf("\nn2[5]= \"def\" -> ");

for(i=0;i<5;i++) printf("n2[%d]=%c ",i,n2[i]); printf("\nn3[5]={'g','h','i'} -> ");

for(i=0;i<3;i++) printf("n3[%d]=%c ",i,n3[i]); printf("\nn4[5]= \"jkl\" -> ");

for(i=0;i<3;i++) printf("n4[%d]=%c ",i,n4[i]); printf("\nv1[5]={1,2,3,4,5} -> ");

for(i=0;i<5;i++) printf("v1[%d]=%d ",i,v1[i]); printf("\nv2[5]={6,7,8} -> ");

for(i=0;i<5;i++) printf("v2[%d]=%d ",i,v2[i]); printf("\nv3[] ={6,7,8} -> ");

for(i=0;i<5;i++) printf("v3[%d]=%d ",i,v3[i]); // v3 foi criado com 3 posicoes

// As posicoes 3 e 4 de vet3 NAO EXISTEM e podem gerar resultados inesperados // Salve o programa!

printf("\n\n\n"); system("PAUSE"); return (0); }

146 Exemplo 6: #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() {

// Este programa le uma string de tamanho nao definido // Do ponto de vista pratico, a string sera limitada a 100 // A entrada de dados vai terminar ao se digitar '.'

int j; /* Variavel de controle */

int segue = 1; /* Controle do loop. Se segue=0 o loop se encerra */ char texto[100]; /* A variavel texto e uma string */

// Antes de qualquer coisa, vamos "limpar" a string

for(j=0;j<99;j++) texto[j]='\0'; /* '\0' indica terminacao da string*/ system("CLS");

printf("\nDigite o seu texto, limitado a 1000 caracteres.\nPara termina-lo digite '.': ");

// Leitura do texto, caracter a caracter j=0; while(segue) { texto[j]=getch(); if(texto[j]=='.') { texto[j]='\0'; segue=0; } ++j; if(j>99) segue=0; }

// Impressao do codigo como string printf("\nO seu texto e: %s",texto); // Impressao com a macro puts

printf("\nO seu texto e: "); puts(texto);

printf("\n\n\n"); system("PAUSE"); return (0); }

147 Exemplo 7: #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() {

// Este programa calcula o determinante de uma matriz 2 x 2 int m[2] [2]; /* Define uma matriz 2 x 2 */

int i,j,det; system("CLS"); for(i=0;i<2;i++) for(j=0;j<2;j++) {

printf("\nInforme o valor do elemento m[%d] [%d]: ",i+1,j+1); scanf("%d",&m[i] [j]);

}

det = m[0] [0] * m[1] [1] - m[0] [1] * m[1] [0]; printf("\nO determinante vale: %d",det);

printf("\n\n\n"); system("PAUSE"); return (0); }

Tarefas

1. Elaborar um programa de cadastramento de senhas. O programa deve ser capaz de ler do teclado uma senha de até 10 dígitos, e armazená-la em um vetor. Notar que a digitação deve ser feita sem mostrar na tela o que foi digitado, e para cada dígito deve mostrar um ‗*‘. A digitação deve terminar com <enter>. Ao término do cadastramento, o programa deve mostrar a senha digitada;

2. Aprimorar o programa de cadastramento de senhas, de forma a permitir que ele seja capaz de armazenar senhas de até 10 usuários distintos;

3. Faça um programa que leia uma matriz M x N e depois a transponha.

4. Faça um programa que leia 10 números quaisquer a partir do teclado e depois os apresente em ordem crescente (DICA: Utilize o algoritmo ―bubble sort‖ para ordenação de valores o qual varre o vetor trocando os valores armazenados em [i] e [i-1] sempre que o valor em [i] é menor que em [i-1]. A operação se repete até que, ao longo de uma passada completa, não haja mais trocas).

148

8ª PRÁTICA

No documento Turmas: 3A ELT 3B ELT (páginas 144-150)

Documentos relacionados