Buscar

algoritmos_I_1.0.3

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", &notas[0]);
	printf ("Segunda nota: ");
	scanf ("%f", &notas[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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais