Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Algoritmo Faculdade Multivix 2013/2 2 Estruturas de Dados Homogêneas: Vetores Vetores são coleção de objetos que têm mesma natureza, i.e., todos seus elementos possuem um mesmo tipo básico. De fato, um vetor pode ser visto conceitualmente como sendo equivalente a uma matriz de dimensão 1 x m, onde m. São chamados ainda de array, em inglês. Os elementos de um vetor são identificados pelo nome seguido de índice entre colchetes. 3 Tem-se, então na memória o seguinte arranjo: li = limite inferior = 0, ls= limite superior, O número de elementos num vetor em C é dado por ls+1, pois o primeiro índice é sempre 0! Estruturas de Dados Homogêneas: Vetores li+1 li ls li+2 ls-1 ... 4 Exemplo: Vetor de notas de uma turma: notas A sintaxe para a declaração de um vetor é a seguinte: tipo nome[tam]; Exemplo: float notas[22]; Estruturas de Dados Homogêneas: Vetores 1 0 2 21 7,0 6,7 7,8 ... 8,0 6,6 5 Vetores: Iniciação Veja exemplos de declarações e inicializações de vetores a seguir. int dia[7] = {12,30,14,7,13,15,6}; float notas[5] = {8.4,6.9,4.5,4.6,7.2}; char vogal[5] = {‘a’, ‘e’, ‘i’, ‘o’, ‘u'}; 6 Vetores: Observações Na linguagem C, devemos ter cuidado com os limites de um vetor/matriz. Embora na sua declaração, tenhamos definido o tamanho de um vetor/matriz, o C não faz nenhum teste de verificação de acesso a um elemento dentro do vetor/matriz. Por exemplo se declaramos um vetor/matriz como int valor[5], teoricamente só tem sentido usarmos os elementos valor[0], ..., valor[4]. Porém, o C não acusa erro se usarmos valor[12] em algum lugar do programa. Estes testes de limites devem ser feitos logicamente dentro do programa, pelo programador. 7 Matrizes: Conceito e Definição Matrizes são coleção de objetos que têm mesma natureza, de forma similar aos vetores. De fato, uma matriz pode ser vista conceitualmente como sendo equivalente a uma matriz multidimensional, semelhante ao que ocorre na matemática. Mais ainda, pode-se ver uma matriz como uma coleção de vetores, i.e. um vetor de vetores. 8 Matrizes: Declaração A sintaxe para declaração de vetores multidimensionais é: tipo nome[tam_1][tam_2]...[tam_N; onde: tipo é o tipo dos elementos do vetor. nome é o nome (identificador) do vetor. [tam_1][tam_2]...[tam_N] é o tamanho de cada dimensão do vetor. Os índices dos vetores multidimensionais, também começam em 0. Por exemplo: vet[0][0], é o primeiro elemento do vetor. 9 Matrizes: Exemplo de Declaração Seja: float notas[3][5]; Isto resultará na seguinte estrutura bidimensional na RAM (teoricamente falando): notas 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4 10 Matrizes: Iniciação imediata Seja: float notas[3][5]= {{8.4,7.4,5.7,5.6,7.7}, {6.9,2.7,4.9,4.5,8.7}, {4.5,6.4,8.6,6.9,9.1}}; Isto resultará na seguinte estrutura bidimensional: notas 0,0 8.4 0,1 7.4 0,2 5.7 0,3 5.6 0,4 7.7 1,0 6.9 1,1 2.7 1,2 4.9 1,3 4.5 1,4 8.7 2,0 4.5 2,1 6.4 2,2 8.6 2,3 6.9 2,4 9.1 11 Strings Não existe um tipo String em C. Strings em C são vetores do tipo char que terminam com ‘\0’. Para literais string, o próprio compilador coloca ‘\0’. #include <stdio.h> #include <stdlib.h> main(){ char re[8] = "lagarto"; //tamanho máximo de 7 caracteres printf ("%s", re); system("pause"); } 11 12 Para ler uma String Comando gets #include <stdio.h> #include <stdlib.h> main(){ char re [80]; printf ("Digite o seu nome: "); gets(re); printf ("Oi %s\n", re); system("pause"); } 12 Tratamento de strings #include <string.h> Principais funções para manipulação de strings: strcmp (s1, s2): comparação de strings strlen(s1): devolve o tamanho da string strcpy(para, de): copia string strcat(str1,str2): concatena duas strings 13 13 14 Para comparar duas strings strcmp (s1, s2); retorna 0 se as duas strings são iguais, um valor <0 se s1 for menor que s2 (ordem alfabética) e >0 se s1 for maior que s2 (diferencia maiúsculas de minúsculas): #include <stdio.h> #include <stdlib.h> #include <string.h> main( ){ char re[80]; printf ("Digite a senha: "); scanf ("%s", &re); if (strcmp(re,"laranja")==0) { printf ("Senha correta\n"); } else { printf ("Senha invalida\n"); } system("pause"); } Pode utilizar scanf no lugar do gets, só que o scanf não lê espaços em branco. Se o usuário digitar: >“Alexandre Costa e Silva” o scanf vai pegar apenas “Alexandre”. O gets pega tudo. 14 15 Para saber o tamanho de uma string int size = strlen(str); Retorna um valor inteiro com o número de caracteres da string (desprezando o “\0”). #include <stdio.h> #include <stdlib.h> #include <string.h> main(){ char re[80]; printf ("Digite a palavra: "); scanf ("%s", &re); // gets(re); int size=strlen(re); printf ("Esta palavra tem %d caracteres.\n", size); system("pause"); } 15 16 Para copiar o conteúdo de uma string para outra strcpy(str1, str2); copia o conteúdo de str2 para str1 (str1 não deve ser menor que str2) #include <stdio.h> #include <stdlib.h> #include <string.h> main() { char str[80]; strcpy (str, "Alo"); printf ("%s\n", str); system("pause"); } 16 Para concatenar duas strings strcat(str1,str2): Esta função é utilizada para concatenar (unir / juntar) duas strings. str2 será adicionada no final de str1 #include <stdio.h> #include <stdlib.h> #include<string.h> int main(){ char str1[40],str2[10],str3[40]="teste"; strcpy(str1,"inicio"); strcpy(str2,"FIM"); strcat(str1,str2); strcat(str3,str1); printf("%s\n",str1); printf("%s\n",str3); system("pause"); } 17 17 18 Exemplo do uso das funções printf ("A palavra copiada eh %s\n", teste); strcat (teste, " 1"); printf ("A palavra concatenada eh %s\n", teste); tam=strlen(palavra); printf ("\nO tamanho da primeira string eh %d", tam); comp=strcmp (palavra, palavra2); if (comp==0) printf ("\nSao iguais: %d", comp); else printf ("\nSao diferentes: %d", comp); printf ("\nMaiusculo: %s", strupr(palavra)); printf ("\nMinusculo: %s\n", strlwr(palavra)); system("pause"); } #include <stdio.h> #include <stdlib.h> #include <string.h> main(){ char palavra[30], palavra2[30], teste[30]; int tam, comp; printf ("\n Informe uma string: "); gets (palavra); printf ("A palavra digitada eh %s\n", palavra); printf ("\n Informe uma segunda string: "); gets (palavra2); printf ("A palavra digitada eh %s\n", palavra2); strcpy (teste,"aula teste"); 18 Exercício Escreva um programa que leia duas strings e as coloque na tela. Imprima também a segunda letra de cada string. 19 19 20 Exemplo de solução 1. Escreva um programa que leia duas strings e as coloque na tela. Imprima também a segunda letra de cada string. #include <stdio.h> #include <stdlib.h> #include <string.h> main(){ char palavra[30]; printf ("\n Informe uma string: "); gets (palavra); printf ("A palavra digitada eh %s\n", palavra); printf ("\nA segunda letra da string digitada eh %c", palavra[1]); printf ("\n Informe uma segunda string: "); gets (palavra); printf ("A palavra digitada eh %s\n", palavra); printf ("\nA segunda letra da string digitada eh %c\n", palavra[1]); system("pause"); } 20 Exercício Escreva um programa que leia uma string, conte quantos caracteres desta string são iguais a 'a' e substitua os que forem iguais a 'a' por 'b'. O programa deve imprimir o número de caracteres modificados e a string modificada. 21 21 22 Exemplo de solução #include <stdio.h> #include <stdlib.h> #include <string.h> main(){ char string[30]; int tamanho, i, contaA=0; printf ("\nInforme uma string: "); gets (string); tamanho=strlen(string); for (i=0;i<tamanho;i++) { if (string[i]=='a') { contaA=contaA+1; string[i]='b'; } } printf ("\nO numero de caracteres modificados eh %d", contaA); printf ("\nA string modificada eh %s\n", string); system("pause"); } 2. Escreva um programa que leia uma string, conte quantos caracteres desta string são iguais a 'a' e substitua os que forem iguais a 'a' por 'b'. O programa deve imprimir o número de caracteres modificados e a string modificada. 22 Exercício Faca um programa que leia o nome de 5 pessoas e mostre os nomes armazenados. Utilize vetores. 23 23 24 Exemplo de solução #include <stdio.h> #include <stdlib.h> #include <string.h> main(){ char nomes[5][10]; int cont; for (cont=0;cont<5;cont++) { printf ("\nInforme o nome %d: ", cont); gets(nomes[cont]); } for (cont=0;cont<5;cont++) printf ("\nO nome armazenado na posicao %d eh %s", cont, nomes[cont]); system("pause"); } 3. Faca um programa que leia o nome de 5 pessoas e mostre os nomes armazenados. Utilize vetores. 24 25 Exercícios 4. Uma empresa concederá um aumento de salário aos seus funcionários, variável de acordo com o cargo, conforme a tabela abaixo. Faça um programa que leia o salário e o cargo de um funcionário e calcule o novo salário. Se o cargo do funcionário não estiver na tabela, ele deverá então receber 40% de aumento. Mostre o salário antigo, o novo salário e a diferença. Cargo Percentual Gerente 10% Engenheiro 20% Técnico 30% 25 26 Resolução #include <stdio.h> #include <string.h> #include <stdlib.h> main(){ char cargo[20]; float salario, novoSalario; printf ("\nDigite o cargo: "); scanf ("%s", cargo); printf ("\nDigite o salario: "); scanf ("%f", &salario); if (strcmp(cargo, "gerente")==0) novoSalario=salario*1.1; else if (strcmp(cargo, "engenheiro")==0) novoSalario=salario*1.2; else if (strcmp(cargo, "tecnico")==0) novoSalario=salario*1.3; else novoSalario=salario*1.4; printf ("\nO salario antigo eh %.2f, o salario novo eh %.2f e a diferenca eh de R$ %.2f\n", salario, novoSalario, novoSalario-salario); system("pause"); } 26 Elabore um programa que receba informações de 30 alunos, sendo estas informações o nome e as duas notas de cada um. O programa deve ainda fornecer a média de notas de cada aluno apresentando seu nome. Exercícios Resolução #include <stdio.h> int main() { float notas[3]; int cont, cont2; char nome[50]; // Um vetor de caracteres ou string. for (cont = 0; cont < 30; cont = cont + 1) { printf ("\n Digite o nome do aluno: "); for (cont2 = 0; cont2 < 49; cont2 = cont2 + 1) { scanf ( "%c", &nome [cont2]); if (nome[cont2] == '\n‘) { break;} } nome [cont2] = ‘\0’; printf ("Digite as duas notas do aluno \n"); printf ("Primeira nota: "); scanf ("%f", ¬as[0]); printf ("Segunda nota: "); scanf ("%f", ¬as[1]); notas[2] = ( notas[0] + notas[1] ) / 2.0; printf (" \n A média do aluno " ); for (cont2 = 0; cont2 < 150; cont2 = cont2 + 1) { printf ("%c", nome[cont2]); if ( '\0' == nome[cont2] ) { break; } } printf ( " é %f: \n", notas[2] ); } return 0; } Elabore um programa para ler o nome e o sobrenome de dez pessoas, imprimindo-os no seguinte formato: sobrenome, nome. Elabore um programa para ler as notas dos 22 alunos da turma, calcule a média da turma, e calcule também quantos alunos tiveram notas abaixo da média, e quantos tiveram notas acima da média. Exercícios
Compartilhar