APC1 – Prof. Eduardo
Exercícios (Lista 4 – T3)
18 - Faça um programa que preencha dois vetores com cinco elementos numéricos cada um e depois
ordene-os de maneira crescente. Deverá ser gerado um terceiro vetor com dez pordene-osições, compordene-osto pela junção dordene-os
elementos dos vetores anteriores, também ordenado de maneira crescente.
vet1
6
8
1
10
3
1 2 3 4 5vet1 ordenado
1
3
6
8
10
1 2 3 4 5vet2 20
0
7
2
5
1 2 3 4 5vet2 ordenado
0
2
5
7
20
1 2 3 4 5Resultado 0
1
2
3
5
6
7
8
10 20
1 2 3 4 5 6 7 8 9 10 #include<stdio.h> main() { int vet1[5]={6,8,1,10,3},vet2[5]={20,0,7,2,5},vet3[10],i,j,aux; //mostrando o vet1 originalfor(i=0;i<=4;i++) { if(i==0) printf("\nVet 1: \t\t\t%d",vet1[i]); else printf("\t %d",vet1[i]); } //ordenado vet1 for(i=0;i<=4;i++) { for(j=0;j<=3;j++) { if(vet1[j]>vet1[j+1]) { aux=vet1[j]; vet1[j]=vet1[j+1]; vet1[j+1]=aux; } } }
//mostrando vet1 ordenado for(i=0;i<=4;i++)
{
if(i==0)
printf("\nVet 1 Ordenado: \t%d",vet1[i]); else
}
//mostrando vet2 original for(i=0;i<=4;i++) { if(i==0) printf("\nVet 2: \t\t\t%d",vet2[i]); else printf("\t %d",vet2[i]); } //ordenando vet2 for(i=0;i<=4;i++) { for(j=0;j<=3;j++) { if(vet2[j]>vet2[j+1]) { aux=vet2[j]; vet2[j]=vet2[j+1]; vet2[j+1]=aux; } } }
//mostrando vet2 ordenado for(i=0;i<=4;i++)
{
if(i==0)
printf("\nVet 2 Ordenado: \t%d",vet2[i]); else
printf("\t %d",vet2[i]); }
//junção do vet1 e vet2 em vet3 for(i=0;i<=9;i++) { if(i<=4) vet3[i]=vet1[i]; else vet3[i]=vet2[i-5]; }
//mostrando vet3 original (vet1 + vet2) for(i=0;i<=9;i++) { if(i==0) printf("\nVet 3: \t\t\t%d",vet3[i]); else printf("\t %d",vet3[i]); } //ordenando vet3 for(i=0;i<=9;i++) { for(j=0;j<=8;j++) { if(vet3[j]>vet3[j+1]) { aux=vet3[j]; vet3[j]=vet3[j+1]; vet3[j+1]=aux; }
} }
//mostrando vet3 ordenado for(i=0;i<=9;i++)
{
if(i==0)
printf("\nVet 3 Ordenado: \t%d",vet3[i]); else
printf("\t %d",vet3[i]); }
}
22 – Uma empresa possui ônibus com 48 lugares (24 nas janelas e 24 no corredor). Faça um algoritmo que
utilize dois vetores para controlar as poltronas ocupadas no corredor e na janela. Considere que 0 representa
poltrona desocupada e 1, poltrona ocupada.
janela
0
1
0
0
. . .
1
0
0
1 2 3 4 ... 22 23 24
corredor
0
0
0
1
. . .
1
0
0
1 2 3 4 ... 22 23 24
Inicialmente, todas as poltronas estarão livres. Depois disso, o algoritmo deverá apresentar as
seguintes opções:
Vender passagem.
Mostrar mapa de ocupação do ônibus.
Encerrar.
Quando a opção escolhida for Vender passagem, deverá ser perguntado se o usuário deseja janela ou
corredor e o número da poltrona. O algoritmo deverá, então, dar uma das seguintes mensagens:
Venda efetivada – se a poltrona solicitada estiver livre, marcando-a como ocupada.
Poltrona ocupada – se a poltrona solicitada não estiver disponível para venda.
Ônibus lotado – quando todas as poltronas já estiverem ocupadas.
Quando a opção escolhida for Mostrar mapa de ocupação do ônibus, deverá ser mostrada uma
listagem conforme a seguir:
JANELA CORREDOR 1 – Ocupada 1 – Ocupada 2 – Ocupada 2 – Livre 3 – Livre 3 – Livre 4 – Livre 4 - Ocupada 5 – Ocupada 5 - Livre ...
Quando for escolhida a opção Encerrar, a execução do programa deverá ser finalizada.
#include<stdio.h> main() { int j[24],c[24],i,num,op,achou; char pos; for(i=0;i<24;i++) { j[i]=0; c[i]=0; } do {do {
printf("\n1 - Vender passagem"); printf("\n2 - Mapa de ocupacao"); printf("\n3 - Encerrar");
printf("\nEntre com a operacao: "); scanf("%d",&op); }while(op<1 || op>3); if(op==1) { achou=0; for(i=0;i<24;i++) { if(c[i]==0 || j[i]==0) achou=1; } if(achou==0) { printf("\nBusao lotado!"); } else { do {
printf("\nJ para janela ou C para corredor: "); scanf("%s",&pos);
pos=toupper(pos);
}while(pos!='C' && pos!='J'); do
{
printf("\nNumero da poltrona: "); scanf("%d",&num);
}while(num<0 || num>23); if(pos=='J' && j[num]==1)
printf("\n** Poltrona ocupada!"); else if(pos=='J' && j[num]==0) {
printf("\n** Venda efetivada!"); j[num]=1;
}
else if(pos=='C' && c[num]==1) printf("\n** Poltrona ocupada!"); else if(pos=='C' && c[num]==0) {
printf("\n** Venda efetivada!"); c[num]=1; } } } if(op==2) { printf("\n\t\t==========================="); printf("\n\t\tJANELA \t\t CORREDOR"); printf("\n\t\t==========================="); for(i=0;i<24;i++) {
if(j[i]==0 && c[i]==0)
else if(j[i]==0 && c[i]==1)
printf("\n\t\t%d - Livre \t %d - Ocupada",i,i); else if(j[i]==1 && c[i]==0)
printf("\n\t\t%d - Ocupada \t %d - Livre",i,i); else if(j[i]==1 && c[i]==1)
printf("\n\t\t%d - Ocupada \t %d - Ocupada",i,i); } printf("\n\t\t==========================="); } printf("\n\n\n"); }while(op!=3); }
23 – Elaborar um algoritmo com opções para busca sequencial e busca binária para pesquisar um
elemento em um vetor A com n números inteiros.
#include<stdio.h> main() { int v[6]={6,2,4,3,9,7},i,flag,op,pos,poscent,local,posini,posfim,num; do { printf("\n"); printf("\n1-Sequencial"); printf("\n2-Binaria"); printf("\n3-Sair"); do { printf("\nDig. um op.: "); scanf("%d",&op); }while(op<1 || op>3);
printf("\nDig. um valor a ser pesquisado: "); scanf("%d",&num);
if(op==1)//use flag supondo que o vetor não tenha elementos iguais ou, //então, queira apenas saber se está no vetor, não importando a //qtde que tenha.
{ flag=0; for(i=0;i<=5;i++) { if(v[i]==num) { flag=1; pos=i;
break;//abandona o laço imediatamente }
}
if(flag!=0)
printf("\nElemento encontrado na posicao %d!",pos+1); else
printf("\nElemento nao encontrado!"); }
if(op==2) {
local=0; posini=0; posfim=5; flag=0; while((posini<=posfim) && (flag==0)) {
if(v[poscent]==num) { flag=1; local=poscent; }//fim if else { if(v[poscent]>num) posfim=poscent-1; else posini=poscent+1; }//fim else }//fim while if(flag==1)
printf("\n Valor encontrado na pos. %d\n",local+1); else
printf("\n Valor nao encontrado!\n"); }
}while(op!=3); }
24 – Elaborar um algoritmo para ordenar um vetor A com n posições. Opções para ordenações:
insertion-sort, selection-sort, e buble-sort.
#include<stdio.h> main()
{
int v[6]={6,2,4,3,9,7},i,j,aux,flag,comp,mov,trocas,op,menor,pos; comp=0; mov=0; flag=1,trocas=0;
do {
printf("\n");
printf("\n1-BubbleSort");
printf("\n2-BubbleSort com criterio de parada"); printf("\n3-SelectionSort"); printf("\n4-InsertionSort"); printf("\n5-Sair"); do { printf("\nDig. um op.: "); scanf("%d",&op); }while(op<1 || op>5); if(op==1) { for(i=0;i<=5;i++) { for(j=0;j<=4;j++) { if(v[j]>v[j+1]) { aux=v[j]; v[j]=v[j+1]; v[j+1]=aux; } } } } if(op==2) {
{ flag=0; for(j=0;j<=4;j++) { comp++; if(v[j]>v[j+1]) { trocas++; flag=1; aux=v[j]; mov++; v[j]=v[j+1]; mov++; v[j+1]=aux; mov++; } } } } if(op==3) { for(i=0;i<=4;i++) { menor=v[i]; pos=i; for(j=i+1;j<=5;j++) { if(menor>v[j]) { menor=v[j]; pos=j; } } aux=v[i]; v[i]=v[pos]; v[pos]=aux; } } if(op==4) { for(i=1;i<=5;i++) { j=i; while((v[j]<v[j-1])&&(j>0)) { aux=v[j]; v[j]=v[j-1]; v[j-1]=aux; j=j-1; } } } for(i=0;i<=5;i++) printf("\t %d",v[i]); system("cls"); }while(op!=5); }
30 – Criar um algoritmo que receba:
um vetor com o código de cinco cidades diferentes;
uma matriz 5 x 5 com a distância entre as cidades, sendo que na diagonal principal deve ser
colocada automaticamente distância zero, ou seja, não deve ser permitida a digitação;
o consumo de combustível de um veículo, ou seja, quantos quilômetros este veículo percorre
com um litro de combustível.
O programa deverá calcular e mostrar:
os percursos que não ultrapassem 250 quilômetros (os percursos são compostos pelos nomes das
cidades de origem e pelos nomes das cidades de destino);
todos os percursos (nome da cidade de origem e nome da cidade de destino), juntamente com a
quantidade de combustível necessária para o veículo percorrê-lo.
#include<stdio.h> main() { int cid[5],i,j; float dist[5][5],consumo,qtde_litros; for(i=0;i<=4;i++) {
printf("\nDig. o c%cdigo da %d%c cidade: ",162,i+1,166); scanf("%d",&cid[i]); } for(i=0;i<=4;i++) { for(j=0;j<=4;j++) { if(i==j) dist[i][j]=0; else if(i<j) {
printf("\nDig. a dist%cncia entre as cidades %d e %d",131,i+1,j+1); scanf("%f",&dist[i][j]); } } } printf("\nDig. o consumo KM/L: "); scanf("%f",&consumo); for(i=0;i<=4;i++) { for(j=0;j<=4;j++) { if(dist[i][j]<=250)
printf("\nDist. menores que 250Km --> entre as cidades %d e %d: %f",i+1,j+1); } } for(i=0;i<=4;i++) { for(j=0;j<=4;j++) { if(i<j) { qtde_litros=dist[i][j]/consumo;
printf("\nConsumo entre as cidades %d e %d:
} } } }