UNIVERSIDADE ESTADUAL DE MATO GROSSO DO SUL
COMPUTAÇÃO, LICENCIATURA
ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES I – PROVA 2 (P2)
RESOLUÇÃO
Nome: ______________________________________________ RGM: ________ Data: ____/____/____
1. Faça um programa que preencha/inicialize um vetor de oito números inteiros, calcule e mostre:
a) a quantidade de números pares; (0,5)
b) a soma dos números ímpares; (0,5)
c) os números múltiplos de 2 e 3; (0,5)
d) os números com valor entre 5 e 10 ou 20 e 25; (0,5)
e) o maior número entre todos; (0,5)
#include<stdio.h> main() { int v[8]={4,10,7,3,6,24,1,21},i,qtd_pares,soma_impares,maior; qtd_pares=0; soma_impares=0; printf("\tVetor preenchido\n"); for(i=0;i<8;i++) printf("\t%d",v[i]); printf("\n"); maior=v[0]; for(i=0;i<8;i++) { if(v[i]%2==0) qtd_pares++; else soma_impares+=v[i]; if(v[i]>maior) maior=v[i]; }
printf("\n\tA quantidade de n%cmeros pares: %d\n",163,qtd_pares); printf("\n\tA soma dos n%cmeros %cmpares: %d\n",163,161,soma_impares); for(i=0;i<8;i++)
{
if(v[i]%2==0 && v[i]%3==0)
printf("\n\tM%cltiplo de 2 e 3: %d",163,v[i]); }
printf("\n"); for(i=0;i<8;i++) {
if((v[i]>5 && v[i]<10) || (v[i]>20 && v[i]<25))
printf("\n\tN%cmero com valor entre 5 e 10 ou 20 e 25: %d",163,v[i]); }
printf("\n");
printf("\n\tO maior n%cmero entre todos: %d\n\n",163,maior); }
2. Uma empresa deseja obter informações sobre o estoque de produtos de duas filias, denominadas filialA
e filialB. Para simular tal solução, faça um programa que preencha dois vetores para cada filial, um
contendo os códigos dos produtos e outro as respectivas quantidades em estoque.
Exemplo:
codfilialA 8 5 10 6 4 14 codfilialB 2 10 5 9 4
1 2 3 4 5 6 1 2 3 4 5
qtdefilialA 2 1 5 5 3 6 qtdefilialB 11 3 2 3 5
1 2 3 4 5 6 1 2 3 4 5
Preencher os vetores. Para cada filial, preencha códigos únicos de produtos, ou seja, não permitir
códigos repetidos. Após a definitiva inserção do código, preencha a quantidade em estoque
correspondente. (2,0)
Mostre os códigos de produtos que aparecem nas duas filiais, ou seja, verificar quais produtos
estão cadastrados na filialA e também na filialB. (1,5)
Mostre os códigos dos produtos com quantidade mínima de 5 e a qual filial pertencem. (1,5)
#include<stdio.h> main() { int codfilialA[6],codfilialB[5],qtdefilialA[6],qtdefilial[5],qtdefilialB[5],i,j,achou; float maior,menor,media,soma;
for(i=0;i<6;i++)//cadastros das matric. e notas de APC1 {
printf("\nDig. c%cdigo do %d%c produto da filialA: ",162,i+1,167); do { achou=0; scanf("%d",&codfilialA[i]); if(i>0) { for(j=0;j<i;j++) { if(codfilialA[i]==codfilialA[j]) {
printf("\nC%cdigo repetido! Digite novamente:",162); achou=1;
}//fim i }//fim for j }//fim if }while(achou==1);
printf("\nDig. a quantidade em estoque do %d%c produto da filialA: ",i+1,167); scanf("%d",&qtdefilialA[i]);
}//fim for i
for(i=0;i<5;i++)//cadastros das matric. e notas de APC1 {
printf("\nDig. c%cdigo do %d%c produto da filialB: ",162,i+1,167); do { achou=0; scanf("%d",&codfilialB[i]); if(i>0) { for(j=0;j<i;j++) { if(codfilialB[i]==codfilialB[j]) {
printf("\nC%cdigo repetido! Digite novamente:",162); achou=1; }//fim i }//fim for j }//fim if }while(achou==1);
printf("\nDig. a quantidade em estoque do %d%c produto da filialB: ",i+1,167); scanf("%d",&qtdefilialB[i]);
}//fim for i
for(i=0;i<6;i++)//matriculas que aparecem nos dois vetores {
for(j=0;j<5;j++) {
if(codfilialA[i]==codfilialB[j])
printf("\nProduto de c%cdigo %d est%c na filialA e na filialB",162,codfilialA[i],160); } } for(i=0;i<6;i++) { if(qtdefilialA[i]>=5)
printf("\nProduto de c%cdigo %d - filialA --- quantidade: %d",162,codfilialA[i],qtdefilialA[i]);
}
for(i=0;i<5;i++) {
if(qtdefilialB[i]>=5)
printf("\nProduto de c%cdigo %d - filialB --- quantidade: %d",162,codfilialB[i],qtdefilialB[i]);
} }
3. Faça um programa que preencha/inicialize com números inteiros uma matriz M
3x3, calcule e mostre:
a) os elementos da diagonal principal; (0,5)
b) os elementos acima da diagonal principal; (0,5)
c) os elementos abaixo da diagonal principal. (0,5)
#include<stdio.h> main() { int m[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j; printf("\n\t======MATRIZ======\n"); for(i=0;i<3;i++) { printf("\n"); for(j=0;j<3;j++) { printf("\t%d",m[i][j]); } printf("\n"); } printf("\n\t==================\n"); printf("\n\n"); printf("\n=====Diagonal principal=====\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i==j) printf("\t%d",m[i][j]);
} }
printf("\n\n");
printf("\n=====Acima da diagonal principal=====\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i<j) printf("\t%d",m[i][j]); } } printf("\n");
printf("\n\n=====Abaixo da diagonal principal=====\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i>j) printf("\t%d",m[i][j]); } } printf("\n\n"); }
4. Uma companhia tem filiais em cada uma das cidades C1, C2, ..., C6. O valor da passagem entre as
cidades Ci e Cj é dado pela posição (i,j) na matriz M (em que -1 indica que não existe caminho direto).
Por exemplo, a tarifa de C1 a C4 é de R$40,00 e de C2 a C3, R$15,00. Esta situação é representada pela
matriz de adjacência M e pelo grafo ponderado abaixo.
C1 C2 C3 C4 C5 C6 C1
0
50 -1 40 25 10
C250
0
15 20 -1 25
M
C3-1 15
0
10 20 -1
C440 20 10
0
10 25
C525 -1 20 10
0
55
C610 25 -1 25 55
0
Faça um programa que preencha/inicialize a matriz M, calcule e mostre:
a) Os pares de cidades com tarifas acima de R$20,00. (0,5)
b) Os pares de cidades que não possuem caminho direto. (0,5)
c) Os pares de cidades com a tarifa mais cara. (1,0)
#include<stdio.h> main() { float m[6][6]={{0,50,-1,40,25,10},{50,0,15,20,-1,25},{-1,15,0,10,20,-1},{40,20,10,0,10,25},{25,-1,20,10,0,55},{10,25,-1,25,55,0}},tarifa_maior; int i,j; printf("\n\tMatriz\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { printf("\t%.0f",m[i][j]); } printf("\n\n"); }
printf("\n\nOs pares de cidades com tarifas acima de R$20,00\n"); for(i=0;i<6;i++)
{
for(j=0;j<6;j++) {
//if(i<j)//necessário apenas acessar acima da diag. principal //{
if(m[i][j]>20)
printf("\nCidade C%d - C%d com tarifa de R$%.2f",i+1,j+1,m[i][j]); //}
} }
printf("\n\nOs pares de cidades que n%co possuem caminho direto\n",198); for(i=0;i<6;i++)
{
for(j=0;j<6;j++) {
//if(i<j)//necessário apenas acessar acima da diag. principal //{
if(m[i][j]==-1)
printf("\nCidade C%d - C%d n%co possuem caminho direto",i+1,j+1,198); //}
} }
//procurar maior tarifa tarifa_maior=0; for(i=0;i<6;i++) { for(j=0;j<6;j++) { if(m[i][j]>tarifa_maior) tarifa_maior=m[i][j]; } }
printf("\n\nOs pares de cidades com a tarifa mais cara -- R$%.2f\n",tarifa_maior);
for(i=0;i<6;i++) {
for(j=0;j<6;j++) {
//if(i<j)//necessário apenas acessar acima da diag. principal //{
if(m[i][j]==-1)
printf("\nCidade C%d - C%d com a tarifa mais cara",i+1,j+1,m[i][j]); //}
} } }