0% acharam este documento útil (0 voto)
42 visualizações50 páginas

Exercícios Corrigidos C++

Este documento contém muitos exercícios de programação em C++ ilustrando conceitos básicos como o uso de entradas/saídas, variáveis, laços e condições. Os exercícios oferecem soluções comentadas.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
42 visualizações50 páginas

Exercícios Corrigidos C++

Este documento contém muitos exercícios de programação em C++ ilustrando conceitos básicos como o uso de entradas/saídas, variáveis, laços e condições. Os exercícios oferecem soluções comentadas.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

C++ SMP/SMC/S4

EXERCÍCIOS E SOLUÇÕES C++


I-A. Exercício 1
Escreva um programa que exiba isso na tela:

Olá mundo!
Aqui está um programa que ilustra o uso do cout!

Este exercício tem como objetivo verificar o seguinte ponto técnico:

a utilização de cout e de endl.

Solução

#include<iostream>
usando namespace std;

int main(int argc, char **argv)


{
cout << "Olá mundo!" << endl;
cout << "Aqui está um programa ilustrando o uso de cout!";
Pressione uma tecla para continuar ...
cin.ignore();
cin.get();
retornar EXIT_SUCCESS;
}

II-B. Exercício 2
Escrever um programa que pede ao usuário para digitar a largura e o comprimento de um campo
e que exibe o perímetro e a área.

Solução

#include<iostream>
usando espaço de nomes std;
int main()
{
double largeur,longueur,surface, perimetre;

Digite a largura do campo:


cout << "Digite o comprimento do campo: "; cin >> comprimento;

surface = largeur * longueur;

1
C++ SMP/SMC/S4

perimetre = 2 * (largeur + longueur);

cout << "A superfície vale: " << surface << endl;
cout << "O perímetro é: " << perimetro << endl;

Pressione uma tecla para continuar.


cin.ignore();
cin.get();

retornar EXIT_SUCCESS;
}

II-C. Exercício 3
Escrever um programa que pede ao usuário para digitar cinco inteiros e que exibe seu
média. O programa deverá usar apenas duas variáveis.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a noção de variáveis e sua declaração;


cálculo da média;
utilização dos tipos int e double ;
o uso de cin e cout;
a afetação.

Solução

#include<iostream>
usando namespace std;
int main()
{
int a;double s=0;

cout << "Digite o valor número 1: "; cin >> a; s = s + a;


cout << "Digite o valor número 2: "; cin >> a; s = s + a;
cout<<"Digite o valor número 3 : ";cin>>a;s=s+a;
cout<<"Digite o valor número 4: ";cin>>a;s=s+a;
cout << "Digite o valor número 5: "; cin >> a; s = s + a;

s=s/5.0;
cout<<"A média vale : "<<s<<endl;

Aperte uma tecla para continuar ...


cin.ignore();
cin.get();

retornar EXIT_SUCCESS;
}

II-D. Exercício4▲

2
C++ SMP/SMC/S4

Écrire un programme qui demande à l'utilisateur de saisir deux entiers A et B, qui échange le
contenu des variables A et B puis qui affiche A et B.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a noção de variáveis e sua declaração;


a utilização de cin e de cout;
a afetação ;
um "algoritmo" rudimentar: trocar o conteúdo de duas variáveis.

Solução

#include<iostream>
usando o namespace std;

int main()
{
int a,b,temp;

cout<<"Digite o valor de a: ";cin>>a;


cout<<"Digite o valor de b: ";cin>>b;

temp=a;
a=b;
b=temp;

cout << "O valor de a é " << a << endl;


cout << "O valor de b é " << b << endl;

Aperte uma tecla para continuar &#8230;


cin.ignore();
cin.get();

retornar EXIT_SUCCESS;
}

II-E. Exercício5▲
Escrever um programa que peça ao usuário para digitar o preço sem impostos de um quilo de tomates, o
nombre de kilos de tomates achetés, le taux de TVA (Exemple 10 %,20%…). Le programme
afixe então o preço final das mercadorias.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a noção de variáveis e sua declaração;


le choix d'identificateurs pertinents et explicites ;
a utilização de cin e de cout;
a afetação;
modelagem de um problema "econômico".

3
C++ SMP/SMC/S4

Solução

#include<iostream>
usando o namespace std;
int main()
{
duplo prixht, peso, iva, total;

cout<<"Digite o preço sem imposto de um quilo de tomates : ";cin>>precoSemImposto;


cout << "Quantos quilos você comprou: "; cin >> peso;
cout << "Qual é a taxa de IVA: "; cin >> tva;

total=(1+tva/100)*prixht*poids;

cout << "O preço com impostos é: " << total << endl;

cout << "Pressione uma tecla para continuar &#8230;" << endl;
cin.ignore();
cin.get();

retornar EXIT_SUCCESS;;
}

III. IHM/Estruturas de contrpapéis▲


III-A. Exercício1▲
Escreva um programa que peça ao usuário para digitar um inteiro e que exiba GANHOU se
o inteiro está entre 56 e 78 limites incluídos PERDIDO caso contrário.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a noção de variáveis e sua declaração;


a utilização de cin e de cout;
a escolha de uma estrutura de controle adequada ao problema!

Solução

#include<iostream>
usando namespace std;

int main()
{

int a;
cout<<"Digite um inteiro: ";cin>>a;

4
C++ SMP/SMC/S4

se((a>=56)&&(a<=78))cout<<"GAGNE"<<endl; senão cout<<"PERDU"<<endl;

Pressione uma tecla para continuar ...


cin.ignore();
cin.get();
retornar EXIT_SUCCESS;
}

III-B. Exercício2▲
Escrever um programa que exibe todos os inteiros de 8 até 23 (extremos inclusos) usando
um para.

Este exercício tem como objetivo verificar o seguinte ponto técnico:

utilização rudimentar de um for.

Solução

#include<iostream>
usando o namespace std;

int main()
{

int i;
para(i=8;i<=23;i++)cout<<i<<endl;

retornar 0;
}

III-C. Exercício3▲
Mesmo exercício, mas utilizando um while.

Este exercício tem como objetivo verificar o seguinte ponto técnico:

utilisation rudimentaire d'un while.

Solução

#include<iostream>
usando namespace std;
int main()
{

5
C++ SMP/SMC/S4

int i=8;
enquanto(i<=23)
{
cout<<i<<endl;
i++;
}

return 0;
}

III-D. Exercício4▲
Écrire un programme qui demande à l'utilisateur de taper 10 entiers et qui affiche leur somme.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de um for;
étude d'un algorithme usuel : calcul d'une somme.

Solução

#include<iostream>
usando namespace std;

int main()
{
int i,s=0,x;

para(i=0;i<10;i++)
{
cout<<"Digite um inteiro: ";cin>>x;
s=s+x;
}

cout<<"A soma vale : "<<s<<endl;

retornar 0;
}

III-E. Exercício5▲
Écrire un programme qui demande à l'utilisateur de taper 10 entiers et qui affiche le plus petit
dos inteiros.

Solução

6
C++ SMP/SMC/S4

#include<iostream>
usando namespace std;

int main()
{

int i,ppt,x;

para(i=0;i<10;i++)
{
cout<<"Digite um inteiro: ";cin>>x;
se(i==0)ppt=x;senão se(x<ppt)ppt=x;
}

cout << "O menor é : " << ppt << endl;

retornar 0;
}

III-F. Exercício6▲
Escrever um programa que pede ao usuário para digitar um inteiro N e que calcula a soma
de cubos de 5^3 a N^3.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples do for ;


étude d'un algorithme usuel : calcul d'une somme ;
modelagem de um problema simples da matemática.

Solução

#include<iostream.h>
usando namespace std;
int main()

{
int N;
double soma;
Digite um inteiro:
se (N>=5) {
para (int i=5; i<=N; i++) soma += i*i*i;
}
cout << "Soma dos cubos de 5^3 a " << N << "^3 = " << somme << endl;
cin.ignore();
cin.get();
retornar EXIT_SUCCESS;
}

III-G. Exercício7▲
7
C++ SMP/SMC/S4

Escrever um programa que peça ao usuário para digitar um inteiro N e que calcule u(N)
definido por :

u(0)=3 ;

u(n+1)=3.u(n)+4.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples do for;


estudo de um algoritmo usual: cálculo dos termos de uma sequência recursiva;
modelagem de um problema da matemática.

Solução

#include<iostream>
usando namespace;
int main()
{
int i,u=3,N;

cout << "Digite N : "; cin >> N;

para(i=0;i<N;i++)
u=u*3+4;

cout<<"u("<<N<<")="<<u<<endl;

retornar 0;
}

III-H. Exercício8▲
Escreva um programa que peça ao usuário para digitar um inteiro N e que calcule u(N)
definido por:

u(0)=1 ;

u(1)=1 ;

u(n+1)=u(n)+u(n-1).

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples do for;


estudo de um algoritmo usual: cálculo de uma sequência recursiva;
modelagem de um problema simples oriundo da matemática.

8
C++ SMP/SMC/S4

Solução

#include<iostream>
usando namespace std;

int main()
{
int i,u=1,v=1,w,N;

cout << "Digite N: "; cin >> N;

w=1;

para(i=2;i<=N;i++)
{
w=u+v;
u=v;
v=w;
}

cout<<"u("<<N<<")="<<w<<endl;

retornar 0;
}

III-I. Exercice 9▲
Escreva um programa que peça ao usuário para digitar um inteiro N entre 0 e 20.
inclui e que exibe N+17. Se digitarmos um valor incorreto, deve-se exibir "erro" e
pedir para inserir o número inteiro novamente.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples do while;


validação dos dados inseridos pelo usuário.

Solução

#include<iostream>
usando namespace std;

int main()
{
int N;
bool OK;

faça

9
C++ SMP/SMC/S4

{
cout<<"Digite N entre 0 e 20:";cin>>N;
OK= N<=20 && N>=0;
if(!OK)cout<<"ERRORE TENTE NOVAMENTE"<<endl;
}enquanto(!OK);

N=N+17;
cout << "O valor final é : " << N << endl;

retorna 0;
}

III-J. Exercício 10▲


Escrever um programa que permita realizar operações em um inteiro (valor inicial em 0).
programme affiche la valeur de l'entier puis affiche le menu suivant :

Adicionar 1 ;

2. Multiplicar por 2 ;

3. Subtrair 4;

4. Desistir.

O programa solicita então que você digite um inteiro entre 1 e 4. Se o usuário digitar um valor
entre 1 e 3, realizamos a operação, exibimos o novo valor do inteiro e, em seguida, o reexibimos
o menu e assim por diante até digitarmos 4. Quando digitamos 4, o programa termina.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização do while;
utilização do switch;
gestão de um programa com a ajuda de um menu;
modelagem de um problema simples na forma informática.

Solução

#include<iostream>
usando namespace std;

int main()
{
int x=0,escolha;

faça
{
cout << "x vale " << x << endl;
cout << "1 : Adicionar 1" << endl;
cout << "2 : Multiplicar por 2" << endl;

10
C++ SMP/SMC/S4

cout<<"3 : Subtrair 4"<<endl;


cout<<"4 : Sair"<<endl;
cout<<"Sua escolha: ";cin>>escolha;

switch(choix)
{
caso 1 : x++;break;
caso 2: x=x*2; quebrar;
caso 3: x=x-4;quebrar;
}
}while(choix!=4);

cout<<"O valor final de x é : "<<x<<endl;

retornar 0;
}

III-K. Exercício 11▲


Escreva um programa que pede ao usuário para digitar inteiros estritamente positivos e que
affiche leur moyenne. Lorsqu'on tape une valeur négative, le programme affiche ERREUR et
pedido para reescrever um valor. Quando se digita 0, isso significa que o último inteiro foi digitado.
On affiche alors la moyenne. Si le nombre d'entiers tapés est égal à 0, on affiche PAS DE
MÉDIA.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de um while de dificuldade média;


estudo de um algoritmo comum: cálculo de uma média.

Solução

#include<iostream>
usando namespace std;

int main()
{
int x, s=0,nb=0;
double média;

faça{
cout<<"Digite um inteiro:";cin>>x;
se(x>0){s=s+x;nb++;}
senão se(x<0)cout<<"ERRORE ";

}enquanto(x!=0);

se(nb==0)cout<<"NENHUM INTEIRO DIGITADO "<<endl<<"SEM MÉDIA"<<endl;


senão {
moyenne=(double)s/nb;
cout<<"A média é : "<<moyenne<<endl;
}

11
C++ SMP/SMC/S4

retornar 0;
}

III-L. Exercício 12▲


Escrever um programa que pede ao usuário para digitar um inteiro N e que calcula u(N)
definido por:

u(0)=3 ;

u(1)=2 ;

u(n)=n.u(n-1)+(n+1).u(n-2)+n.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de um for;
estudo de um algoritmo usual: cálculo de uma sequência recorrente bastante difícil;
modelagem de um problema originado da matemática.

Solução

#include<iostream>

int main()
{
int N,u,i=0,v,w;

cout << "Digite o valor de N: "; cin >> N;


u=3;
v=2;
se(N==0)w=u;
senão se(N==1)w=v;
senão para(i=2;i<=N;i++){w=i*v+(i+1)*u+i;u=v;v=w;}

cout<<"u("<<N<<")="<<w<<endl;

retornar 0;
}

III-M. Exercício 13▲


Escrever um programa que solicita a entrada de 10 inteiros e que exibe o número de ocorrências
da nota mais alta.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de um for;
12
C++ SMP/SMC/S4

estudo de um algoritmo comum de dificuldade média: cálculo do número de ocorrências


de um valor.

Solução

#include<iostream>
usando o namespace std;

int main()
{
int nb,max,x,i;

para(i=0;i<10;i++)
{
cout<<"Digite um inteiro: ";cin>>x;
se(i==0){max=x;nb=1;}
caso contrário se(x==max)nb++;
senão se (max<x) {max=x; nb=1;}
}

cout << "o número de ocorrências de " << max << " é " << nb << endl;

retornar 0;
}

III-N. Exercício 14▲


Escreva um programa que pede para inserir um inteiro N e que exibe N!.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização do for;
estudo de um algoritmo usual: cálculo de um fatorial;
modelagem de um problema proveniente da matemática.

Solução

#include<iostream>
usando namespace std;

int main()
{
int N,i,f=1;

cout<<"Digite um inteiro: ";cin>>N;


para(i=2;i<=N;i++)f=f*i;
cout<<N<<"! vale "<<f<<endl;

13
C++ SMP/SMC/S4

retornar 0;
}

III-O. Exercício 15▲


Écrire un programme qui demande de saisir un entier et qui indique si cet entier est premier
ou não.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de um while de dificuldade média;


étude d'un algorithme usuel assez difficile : primarité d'un entier ;
modelagem de um problema originado da matemática.

Solução

#include<iostream>
usando namespace std;

int main()
{
int n;
bool premier=true;
int d=2;

cout << "Por favor, insira um inteiro: "; cin >> n;

se(n<=1)premier=false;
senão
{
enquanto(premier==verdadeiro && d*d<=n)
se(n%d==0)premier=false; senão d=d+1;
}
se(premier)cout<<n<<" é primo"<<endl;
senão cout<<n<<" não é primo"<<endl;

retornar 0;
}

III-P. Exercício 16▲


Escreva um programa que peça ao usuário para inserir um inteiro N e que exiba o número
de números primos inferiores ou iguais a N.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de loops for e while;


imbricação de laços;
ler precisamente uma afirmação;
14
C++ SMP/SMC/S4

modelagem bastante complexa de um problema proveniente da matemática.

Solução

#include<iostream>
usando namespace std;

int main()
{
int N,i,nb=0,d;
bool é_primo;

cout<<"Digite o valor de N: ";cin>>N;

para(i=2;i<=N;i++)
{
/* Escrever um programa que teste se i é primo */
est_premier=true;
d=2;
enquanto(est_premier && d*d<=i)
se(i%d==0)est_premier=false; senão d++;

se(est_premier==verdadeiro)nb++;
}

cout<<"O número de números primos inferiores ou iguais a "


<<N<<" é "<<nb<<endl;

retornar 0;
}

III-Q. Exercice 17▲


Escreva um programa que peça ao usuário para inserir um inteiro N e que exiba o éni depois.
nome primo.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização dos loops for e while;


imbricação de laços bastante complexa;
ler precisamente uma declaração;
modelagem bastante complexa de um problema proveniente da matemática.

Solução

Aqui está a fonte

#include<iostream>
usando o namespace std;

15
C++ SMP/SMC/S4

int main()
{
int N,i=1,nb=0,d;
bool é_premier;

cout<<"Digite o valor de N : ";cin>>N;

enquanto(nb<N)
{
i++;
est_premier=true;
d=2;
enquanto(est_premier && d*d<=i)
se(i%d==0)est_premier=falso; senão d++;

se(est_premier==verdadeiro)nb++;
}

cout << "O enésimo número primo é " << i << endl;

retornar 0;
}

III-R. Exercício 18▲


Écrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche la figure
seguinte.

e assim por diante.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de loops for;


imbricação de laços bastante complexa.

Solução

#include <iostream>

16
C++ SMP/SMC/S4

usando namespace std;

int main()
{
int N=0;
cout<<"Digite um valor para N: ";
cin>>N;
cout<<endl<<endl;
cout << "N= " << n << endl;
for(int i=0;i<N;i++)
{

for(int j=0;j<(N-i);j++)
{
cout<<"*";
}
cout << endl;
}
Aperte uma tecla para continuar ...
cin.ignore();
cin.get();
retornar 0;
}

III-S. Exercício 19▲


Escreva um programa que peça ao usuário para inserir um número inteiro N e que exiba a figura
seguinte.

e assim por diante.

Cet exercice a pour but de vérifier les points techniques suivants :

utilização dos laços for;


imbricação de laços.

Solução

#include<iostream>
usando namespace std;

17
C++ SMP/SMC/S4

int main()
{
int i,j,N;

cout<<"Digite o valor de N : ";cin>>N;

for(i=1;i<=N;i++)
{
for(j=1;j<i;j++)cout<<" ";
for(j=1;j<=N+1-i;j++)cout<<"*";
cout << endl;
}
retornar 0;
}

III-T. Exercício 20▲


Considera-se a sequência húngara: u(0)=a (a inteiro)

se u(n) par então u(n+1)=u(n)/2 senão u(n+1)=3*u(n)+1

Para todos os valores de a, existe um inteiro N tal que u(N)=1 (conjetura admitida).

a) Escrever um programa que pede ao usuário para digitar a e que exibe todos os valores
de u(n) de n=1 à n=N.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização do enquanto;
ler precisamente uma declaração;
modelagem bastante complexa de um problema proveniente da matemática.

Solução

#include<iostream>
usando o namespace std;

int main()
{
int a,n,u;
cout<<"Digite o valor de a: ";cin>>a;
n=0;
u=a;

enquanto(u!=1)
{
se(u%2==0)u=u/2; senão u=3*u+1;
n++;
cout << "u(" << n << ")=" << u << endl;
}

18
C++ SMP/SMC/S4

retornar 0;
}

b) Escrever um programa que pede ao usuário para digitar um número inteiro M e depois procura a
valor de a compreendido entre 2 e M que maximiza o valor de N. Chamamos A a este valor.
o programa deve exibir o valor A e o valor N correspondente.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização do while e do for;


imbricação de loops ;
ler precisamente uma declaração;
modelagem bastante complexa de um problema proveniente da matemática.

Solução

#include<iostream>
usando namespace std;

int main()
{
int a,n,u,M,amax,nmax;
cout << "Digite o valor de M: "; cin >> M;
amax=2;
nmax=2;

para(a=3;a<=M;a++)
{
n=0;
u=a;
enquanto(u!=1)
{
se(u%2==0)u=u/2; senão u=3*u+1;
n++;
}
se(n>nmax){amax=a;nmax=n;}
}
cout << "O valor de A é:" << amax << endl;
cout<<"O valor de N correspondente é :"<<nmax<<endl;

retornar 0;
}

IV.IHM/Os quadrosx▲
IV-A. Exercício1▲
Escreva um programa que peça ao usuário para inserir 10 inteiros armazenados em um array.
O programa deve exibir o número de inteiros maiores ou iguais a 10.

19
C++ SMP/SMC/S4

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas ;


um algoritmo simples em um array: busca pela quantidade de elementos que verificam uma
propriedade.

Solução

#include<iostream>
usando o namespace std;

const int N=10;

int main()
{
int t[10], i, nb=0;
for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>t[i];}
para(i=0;i<N;i++)se(t[i]>=10)nb++;
cout << "O número de inteiros superiores ou iguais a 10 é: "
<<nb<<endl;
retornar 0;
}

IV-B. Exercício2▲
Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau
assim como um inteiro V. O programa deve procurar se V está no array e exibir
« V se encontra na tabela » ou « V não se encontra na tabela ».

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas;


un algorithme simple sur un tableau : recherche d'un élément dans un tableau.

Solução

#include<iostream>
usando namespace std;

const int N=10;

int main()
{
int t[N],i,V;
bool trouve;
for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>t[i];}

20
C++ SMP/SMC/S4

cout << "Digite o valor de V: "; cin >> V;

trouve=false;
i=0;
enquanto(!trouve && i<N)
se(t[i]==V)encontrou=true; senão i++;
se(trouve) cout<<"O valor V está no array"<<endl;
senão cout << "O valor V não se encontra no array" << endl;
retornar 0;
}

IV-C. Exercício3▲
Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau.
O programa deve então exibir o índice do maior elemento.

Cet exercice a pour but de vérifier les points techniques suivants :

utilização simples de tabelas;


um algoritmo simples sobre um array: busca pelo índice do maior elemento.

Solução

#include<iostream>
usando namespace std;

const int N=10;


int main()
{
int t[N], i, indice;

for(i=0;i<N;i++){cout<< "Digite um inteiro "; cin>>t[i];}


indice=0;
para(i=1;i<N;i++)
se(t[indice]<t[i])indice=i;

cout<<"O índice do maior elemento é : \


retornar 0;

IV-D. Exercício4▲
Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau
assim como um inteiro V. O programa deve procurar se V está no array e deve
remover a primeira ocorrência de V deslocando os elementos uma posição para a esquerda
seguindo e acrescentando um 0 ao final da tabela. O programa deve então exibir a tabela
finalmente.

Cet exercice a pour but de vérifier les points techniques suivants :

21
C++ SMP/SMC/S4

utilização simples de tabelas;


um algoritmo simples em um array: remoção de um elemento com deslocamento dos
seguinte.

Solução

#include<iostream>
usando namespace std;

const int N=10;

int main()
{
int t[N], i, j, V;
bool trouve;
for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>t[i];}
cout<<"Digite o valor de V : ";cin>>V;

trouve=false;
i=0;
enquanto(!trouve && i<N)
se(t[i]==V)encontrou=true; senão i++;

se(encontrou)
{
for(j=i;j<N-1;j++)t[j]=t[j+1];
t[N-1]=0;
}
for(i=0;i<N;i++)cout<<t[i]<<endl;

retornar 0;
}

IV-E. Exercice 5▲
Escrever um programa que pede ao usuário para inserir 10 inteiros armazenados em um array
assim como um inteiro V e um inteiro i compreendido entre 0 e 9. O programa deve deslocar uma posição
para a direita todos os elementos a partir do índice i (removendo o último elemento do
tableau) e deve colocar o valor V na tabela no índice i. O programa deve então
mostrar a tabela finalmente.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas ;


um algoritmo simples sobre um array: inserção em um array com deslocamento.

Solução

22
C++ SMP/SMC/S4

#include<iostream>
usando namespace std;

const int N=10;

int main()
{
int t[N],i,indice,V;

for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>t[i];}


cout << "Digite um índice (de 0 a 9) : "; cin >> indice;
cout<<"Digite o valor de V: ";cin>>V;

se(indice>=0 && indice<=N-1)


{
for(i=N-1;i>indice;i--)t[i]=t[i-1];
t[indice]=V;
}

for(i=0;i<N;i++)cout<<t[i]<<endl;

retornar 0;
}

IV-F. Exercício6▲
Escrever um programa que peça ao usuário para digitar 10 inteiros que serão armazenados em um
o tableau. O programa deve então exibir seja « o tableau é crescente », seja « o tableau
é decrescente", ou "o quadro é constante", ou "o quadro é qualquer.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas;


um algoritmo simples sobre um array: verificar se o array verifica uma propriedade
dado.

Solução

#include<iostream>
usando namespace std;

const int N=10;

int main()
{
int a[N], i;
bool encontra=false;
bool croissant=true,decroissant=true;

para(i=0;i<N;i++)

23
C++ SMP/SMC/S4

{
cout<<"Por favor, digite o número inteiro "<<i<<" : ";cin>>a[i];
}
for(i=0;i<N-1;i++)
{
se(a[i]>a[i+1])crescente=false;
if(a[i]<a[i+1])decroissant=false;
}

se(croissant && decroissant) cout<<"o tableau é constante"<<endl;


se(croissant && !decroissant) cout<<"o tableau é crescente"<<endl;
se(!croissant && decroissant) cout<<"o tableau é decrescente"<<endl;
se(!croissant && !decroissant) cout << "o tableau é qualquer" << endl;

retornar 0;
}

IV-G. Exercice 7▲
Escrever um programa que pede ao usuário para digitar 10 inteiros que serão armazenados em um
tableau. Le programme doit trier le tableau par ordre croissant et doit afficher le tableau.

Algoritmo sugerido :

Procuramos o índice do menor elemento entre os índices de 0 a 9 e trocamos esse elemento


com t[0].

Procuramos o índice do menor elemento entre os índices de 1 a 9 e trocamos esse elemento


com t[1].

Procuramos o índice do menor elemento entre os índices de 2 a 9 e trocamos esse elemento.


com t[2].

… Procuramos o índice do menor elemento entre os índices de 8 a 9 e trocamos esse


elemento com t[8].

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas ;


un algorithme simple sur un tableau : tri d'un tableau.

Solução

#include<iostream>
usando namespace std;

const int N=10;

int main()
{

24
C++ SMP/SMC/S4

int a[N],i,j,min,imin,tmp;

for(i=0;i<N;i++)
{
cout<<"Por favor, digite o número inteiro "<<i<<" : ";cin>>a[i];
}

for(i=0;i<N-1;i++)
{
imin=i;min=a[i];
para(j=i+1;j<<N;j++)se(a[j]<min){min=a[j];imin=j;}

tmp=a[imin];a[imin]=a[i];a[i]=tmp;
}
cout<<"AQUI ESTÁ A TABELA ORDENADA :"<<endl;
for(i=0;i<N;i++)cout<<"a["<<i<<"]="<<a[i]<<endl;

retornar 0;
}

IV-H. Exercício8▲
Écrire un programme qui demande à l'utilisateur de taper 10 entiers qui seront stockés dans un
tableau. Le programme doit trier le tableau par ordre croissant et doit afficher le tableau.

Algoritmo sugerido (ordenamento bolha) :

Percorremos o array comparando t[0] e t[1] e trocando esses elementos se eles não estiverem
na ordem certa.

Recomeçamos o processo comparando t[1] e t[2]... e assim por diante até t[8] e t[9].

Contamos durante este percurso o número de trocas realizadas.

Fazemos quantas iterações forem necessárias até que o número de trocas seja zero: o
o tableau será então classificado.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas;


um algoritmo simples em um array: ordenação de um array.

Solução

#include<iostream>
usando o namespace std;

const int N=10;

int main()

25
C++ SMP/SMC/S4

{
int a[N], i, nb, tmp;

para(i=0;i<N;i++)
cout << "Por favor, digite o número inteiro " << i << " : "; cin >> a[i];

fazer
{
nb=0;
for(i=0;i<N-1;i++)
if(a[i]>a[i+1])
{
tmp=a[i];a[i]=a[i+1];a[i+1]=tmp;
nb++;
}
}enquanto(nb!=0);

cout << "AQUI EST O VETOR ORDENADO:" << endl;


for(i=0;i<N;i++)cout<<"a["<<i<<"]="<<a[i]<<endl;

retornar 0;
}

IV-I. Exercício9▲
Escrever um programa que leia dois arrays de 10 inteiros a e b. c é um array de 20
inteiros. O programa deve colocar em c a fusão dos arrays a e b. Vamos copiar nos 10
primeiras casas de c o quadro a, nas últimas dez o quadro b. O programa exibe
em seguida, a tabela c.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas;


um algoritmo simples em um array: fusão de dois arrays.

Solução

#include<iostream>
usando namespace std;

const int N=10;

int main()
{
int a[N],b[N],c[2*N],i;

cout << "INSERÇÃO DO VETOR a" << endl;


for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>a[i];}

cout << "ENTRADA DO VETOR b" << endl;


for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>b[i];}

26
C++ SMP/SMC/S4

for(i=0;i<2*N;i++)if(i<N)c[i]=a[i];else c[i]=b[i-N];

cout << "AQUI ESTÁ O VETOR c" << endl;


for(i=0;i<2*N;i++)cout<<c[i]<<" ";
cout<<endl;
retornar 0;
}

IV-J. Exercício 10▲


Escreva um programa que entre dois arrays de 10 inteiros a e b que devem ser ordenados em
a ordem crescente. O programa deve primeiro verificar se os dois arrays estão ordenados. O
tableau é um array de 20 inteiros. O programa deve colocar na c a fusão dos arrays.
a e b. A tabela c deverá conter os elementos de a e os de b e deverá estar ordenada. O
o programa exibe então o array c.

Solução

#include<iostream>
usando namespace std;

const int N=10;

int main()
{
int a[N],b[N],c[2*N],i,trie,indicea,indiceb;

cout << "ENTRADA DO VETOR a" << endl;


for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>a[i];}

cout << "ENTRADA DO VETOR b" << endl;


for(i=0;i<N;i++){cout<<"Digite um inteiro ";cin>>b[i];}

trie=true;
i=0;
enquanto(trie && i<N-1)se(a[i]>a[i+1])trie=false; senão i++;

if(!trie)cout<<"Le tableau n'est pas trié"<<endl;


senão
{
trie=true;
i=0;
enquanto(trie && i<N-1)se(b[i]>b[i+1])trie=false; senão i++;

se(!trie)cout<<"O vetor b não está ordenado"<<endl;


senão
{
indicea=0;indiceb=0;
for(i=0;i<2*N;i++)
{
se(indicea==N){c[i]=b[indiceb];indiceb++;}
senão se(indiceb==N){c[i]=a[indicea];indicea++;}

27
C++ SMP/SMC/S4

senão
se(a[indicea]<b[indiceb]){c[i]=a[indicea];indicea++;}
senão {c[i]=b[indiceb];indiceb++;}
}
}
}

cout << "AQUI ESTÁ O VETOR c" << endl;


for(i=0;i<2*N;i++)cout<<c[i]<<" ";
cout<<endl;

retornar 0;
}

IV-K. Exercício 11▲


Écrire un programme qui gère une liste d'entiers grâce au menu suivant :

Adicionar um inteiro;

2. Mostrar a lista de inteiros;

3. Remover o último inteiro da lista;

4. Exibir a última nota digitada;

5. Desistir.

Haverá no máximo 10 inteiros. Quando se adiciona um inteiro, ele será adicionado ao final da lista.

Cet exercice a pour but de vérifier les points techniques suivants :

utilização simples de tabelas;


gestão de uma lista simples através de um array estático.

Solução

#include<iostream>
usando namespace std;

const int N=10;


int main()
{

int t[N], nb=0, choix, e, i;


bool fini=false;

enquanto(fini==falso)
{
cout<<"1. Adicionar um inteiro"<<endl;

28
C++ SMP/SMC/S4

cout << "2. Exibir a lista de inteiros" << endl;


cout<<"3. Remover o último inteiro da lista"<<endl;
cout<<"4. Exibir o último inteiro da lista"<<endl;
cout << "5. Sair" << endl;
cout<< "Sua escolha : "; cin >> escolha;
switch(choix)
{
caso 1 : cout << "Digite um inteiro : "; cin >> e;
se(nb<N){t[nb]=e; nb++; cout<<"ENTIER"
AJOUTE"<<endl;}
senão cout<<"IMPOSSÍVEL O TABELA É "
PLEIN
quebrar;

caso 2: se(nb==0)cout<<"A LISTA ESTÁ VAZIA"<<endl;


senão {
cout<< "AQUI A
LISTA

for(i=0;i<nb;i++)cout<<t[i]<<
cout << endl;
}
quebrar;

caso 3 : se(nb>0){nb--; cout<<"NÚMERO EXCLUÍDO"<<endl;}


senão cout << "A LISTA É"
VIDE
quebrar;

caso 4 : se(nb>0)cout<<"o ÚLTIMO INTEIRO É "<<t[nb-


1]<<endl;
senão cout << "A LISTA É "
VIDE
quebrar;

case 5 : fini=true;
quebrar;
}

}
return 0;
}

IV-L. Exercice 12▲


Escrever um programa que gerencie uma lista de inteiros através do seguinte menu:

1. Adicionar um inteiro;

2. Exibir a lista dos inteiros;

3. Remover o primeiro inteiro com um valor dado;

4. Remover todos os inteiros com um valor dado;

5. Desistente.

29
C++ SMP/SMC/S4

Haverá no máximo 10 inteiros. A lista deverá estar sempre ordenada: quando adicionamos um
inteiro, ele será inserido no lugar certo na lista para que ela continue ordenada.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização simples de tabelas;


gestion d'une liste triée grâce à un tableau statique.

Solução

#include<iostream>
usando namespace std;

const int N=10;


int main()
{

int t[N], nb=0, choix, e, V, i, j, trouve;


bool fini=false;

enquanto(fini==falso)
{
cout<<"1. Ajouter un entier"<<endl;
cout<<"2. Exibir a lista de inteiros"<<endl;
cout << "3. Remover o primeiro inteiro com um valor";
dado
cout<<"4. Remover todos os inteiros com um valor";
dado
cout << "5. Sair" << endl;
cout<<"Seu escolha : ";cin>>escolha;
switch(choix)
{
caso 1: se(nb<N)
{
cout << "Digite um inteiro: "; cin >> e;
i=0;
enquanto(i!=nb && t[i]<e)i++;
for(j=nb;j>i;j--)t[j]=t[j-1];
t[i]=e;
nb++;
}
senão cout<<"IMPOSSÍVEL O TABELA É"
CHEIO
quebrar;

caso 2 : se(nb==0)cout<<"A LISTA ESTÁ VAZIA"<<endl;


senão {
cout<<"AQUI ESTÁ"
LISTE

for(i=0;i<nb;i++)cout<<t[i]<<" ";
cout << endl;
}
quebrar;

30
C++ SMP/SMC/S4

caso 3 : cout<< "Digite o valor a ser removido :"; cin >> V;


trouve=false;
i=0;
enquanto(!trouve &&
i<nb)if(t[i]==V)trouve=true; else i++;
se(encontrado)
{
for(j=i;j<nb-1;j++)t[j]=t[j+1];
nb--;
}
quebrar;

caso 4 : cout << "Digite o valor a ser removido:"; cin >> V;


j=0;
para(i=0;i<nb;i++)
se(t[i]!=V){t[j]=t[i];j++;}
nb=j;
quebrar;

caso 5 : fini=true;
quebrar;
}

}
retornar 0;
}

IV-M. Exercício 13▲


Escrever um programa que pede ao usuário para digitar um inteiro N<=20 e que exibe a
énième linha do triângulo de Pascal.

linha 1 : 1 1

linha 2 : 1 2 1

linha 3 : 1 3 3 1

linha 4 : 1 4 6 4 1

e assim por diante…

Cet exercice a pour but de vérifier les points techniques suivants :

utilização simples de tabelas;


gestão de uma lista ordenada através de um array estático.

Solução

#include<iostream>

31
C++ SMP/SMC/S4

usando namespace std;

int main()
{
int a[21],i,j,N;
cout<<"Por favor, digite N: ";cin>>N;
for(i=1;i<=N;i++)
{
se(i==1)a[0]=1;
a[i]=1;
for(j=i-1;j>=1;j--)a[j]=a[j]+a[j-1];
}
for(i=0;i<=N;i++)cout<<a[i]<<" ";
cout<<endl;
retornar 0;
}

IV-N. Exercice 14▲


Escreva um programa que solicita ao usuário que digite 10 inteiros entre 0 e 20 que
serão armazenados em um array e que exibe o número de vezes que digitamos um 0, o número de
1, o número 2… , o número 20.

Solução

#include<iostream>
usando o namespace std;

int main()
{
int a[10],nb[21],i;

para(i=0;i<10;i++)
{
faça {cout << "Por favor, digite o número inteiro " << i << " : "; cin >> a[i];}
enquanto (a[i]>20 || a[i]<0);
}

for(i=0;i<21;i++)nb[i]=0;
para(i=0;i<10;i++)nb[a[i]]++;

for(i=0;i<21;i++){cout<<"Há "<<nb[i]<<" vezes o inteiro "<<i<<endl;}


retornar 0;
}

IV-O. Exercício 15▲


Escrever um programa que pede ao usuário para digitar o conteúdo de um array de números reais
trois lignes et trois colonnes et qui affiche ce tableau, mais en affichant la moyenne des
elementos de cada linha, de cada coluna e a média global.

32
C++ SMP/SMC/S4

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

utilização de tabelas em duas dimensões;


modelagem de um problema matemático básico.

Solução

#include<iostream>
usando namespace std;

const int N=3;


const int M=3;

int main()
{
double t[N][M], moyL[N], moyC[M], moy;
int i,j;

para(i=0;i<N;i++)
for(j=0;j<M;j++)
{
Digite o valor da linha
cin>>t[i][j];
}

for(i=0;i<N;i++)moyL[i]=0;
for(j=0;j<M;j++)moyC[j]=0;
moy=0;

for(i=0;i<N;i++)
para(j=0;j<M;j++)
{
moyL[i]=moyL[i]+t[i][j];
moyC[j]=moyC[j]+t[i][j];
moy=moy+t[i][j];
}

for(i=0;i<N;i++)moyL[i]=moyL[i]/N;
for(j=0;j<M;j++)moyC[j]=moyC[j]/M;
moy=moy/(N*M);

para(i=0;i<N;i++)
{
for(j=0;j<M;j++)
cout<<t[i][j]<<" ";
cout<<moyL[i]<<endl;
}
para(j=0;j<M;j++)
cout<<moyC[j]<<" ";
cout<<endl;

retornar 0;
}

33
C++ SMP/SMC/S4

H
h
IacM
d
eV
O
.soq
d
u
rar▲
s/
V-A. Exercício1▲
Escrever uma função que tenha como parâmetros uma cadeia de caracteres (parâmetro de entrada) e um
inteiro e (parâmetro de saída). Esta função retorna um booleano. A função retorna verdadeiro se a
uma cadeia de caracteres é um inteiro escrito na forma de uma sequência de dígitos que não começa
passar por 0, ela retorna falso caso contrário. Se a cadeia estiver correta, a função retorna em e a
valor deste inteiro.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a manipulação de cadeias de caracteres;


a validação de uma cadeia de caracteres;
transformação de uma cadeia para outro tipo.

Solução

#include<iostream>
usando namespace std;

bool valide_entier(char t[], int &e)


{
bool valido=true;
int i=0;
e=0;
se(t[0]<'1' || t[0]>'9')valide=false;

enquanto(valide && t[i]!='\0')


{
se(t[i]>='0' && t[i]<='9'){e=10*e+(t[i]-'0');i++;}
senão valide=false;
}
retornar válido;
}

int main()
{
int a;
char t[20];

faça{cout<<"Digite uma cadeia:";cin>>t;}enquanto(!valide_entier(t,a));

cout<<"O inteiro vale:"<<a<<endl;


retornar 0;
}

V-B. Exercice 2▲

34
C++ SMP/SMC/S4

Escreva uma função que tenha como parâmetro uma cadeia de caracteres (parâmetro de entrada e em
saída) e que transforma todas as letras minúsculas da string em maiúsculas.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a manipulação de cadeias de caracteres;


transformação de uma cadeia de caracteres;
maiusculas e minusculas.

Solução

#include<iostream>
usando namespace std;

void minmaj(char t[])


{
int i=0;
enquanto(t[i]!='\0')
{
se(t[i]>='a' && t[i]<='z')t[i]=t[i]+('A'-'a');
i++;
}
}

int main()
{
char a[50];
cout<<"Digite uma string, por favor:";cin>>a;
minmaj(a);
cout << "A cadeia final é:" << a << endl;
retornar 0;
}

V-C. Exercício3▲
Escrever uma função que tem como parâmetro uma cadeia de caracteres (parâmetro de entrada e de saída)
sortie) et qui supprime toutes les voyelles.

- y é uma vogal neste programa.

A frase pode conter espaços, mas deve ter menos de 80 caracteres incluindo o ''

- Si une voyelle a un accent, elle sera traitée comme une consonne (tout comme une voyelle
maiúscula).

A vogal é substituída por um « . » para mostrar a remoção da vogal.

Solução

35
C++ SMP/SMC/S4

#include <iostream>
usando o namespace std;
#include <conio.h>
//-------------------------------------------------------------------------
-----

void substituirVogal(char frase[])


{
int i = 0;
enquanto(phrase[i]!='\0')
{
se((frase[i] == 'a')||(frase[i] == 'e')||(frase[i] == 'i')||(frase[i]
== 'o')||(frase[i] == 'u')||(frase[i] == 'y'))
{
phrase[i]= '.';
i++;
}
senão
{
i++;
}
}
}

int main()
{
int tamanho = 80;
char frase[modelo];

cout << "Digite uma frase : ";


cin.get (frase, tamanho);
//cout << "Aqui está a frase inserida: " << frase << endl; pode ser
ativado

substituirVogal(frase);

cout << "aqui está a frase modificada: " << frase << endl;
cout << "Pressione uma tecla para sair do programa...";
getch();
retornar 0;
}

V-D. Exercício4▲
Escrever uma função que tem como parâmetros duas cadeias de caracteres ch1 e ch2 (parâmetros em
entrada) e retorna um booleano indicando se a string ch2 está contida na string ch1.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a manipulação de cadeias de caracteres;


pesquisa de uma cadeia incluída em outra cadeia.

36
C++ SMP/SMC/S4

Solução

#include<iostream>
usando namespace std;

bool contém(char ch1[], char ch2[])


{
int ii=0,i=0,j=0;
bool fini,trouve;
trouve=false;
fini=false;
enquanto(!trouve && !fini)
{
se(ch1[ii]==ch2[j])
{
ii++;j++;
se(ch2[j]=='\0')trouve=true;
}
senão
{
i++;ii=i;j=0;
}
se(ch1[ii]=='\0')fini=true;
}
retornar encontra;
}

int main()
{
char a[50],b[50];
cout<<"Digite uma sequência, por favor:";
cin>>a;
cout << "Digite uma cadeia, por favor:";
cin >> b;
se(contém(a,b))cout<<"a primeira cadeia contém a segunda"<<endl;
senão cout << "a primeira cadeia não contém a segunda" << endl;
retornar 0;
}

V-E. Exercício5▲
Escrever um programa que peça ao usuário para digitar um verbo do primeiro grupo e que o
conjugue no indicativo presente.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a manipulação de cadeias de caracteres;


a construção de uma cadeia a partir de outra.

Solução

37
C++ SMP/SMC/S4

#include<iostream>
usando namespace std;

int main()
{
char tt[20];
cout << "Digite um verbo do primeiro grupo: ";
cin>>tt;
int i;
i=strlen(tt);
se(i<=2 || tt[i-1]!='r' || tt[i-2]!='e')
cout<<"o verbo não é do primeiro grupo"<<endl;
senão
{
tt[i-2]='\0';
cout << "je " << tt << "e" << endl;
cout<<"tu "+tt+"es"<<endl;
cout<<"il "+tt+"e"<<endl;
cout << "nós " << tt << "ons" << endl;
cout<<"você "<<tt<<"ez"<<endl;
cout<<"ils "<<tt<<"ent"<<endl;

}
retornar 0;
}

V-F. Exercício6▲
Escrever um programa que recebe uma string que pode conter espaços e que exibe cada
mot da cadeia, o separador sendo o espaço.

Exemplo, se escreve: eu penso logo existo

O programa exibe:

mot 1 : je ;

mot 2 : pense ;

mot 3 : donc ;

eu

sou.

Cet exercice a pour but de vérifier les points techniques suivants :

a manipulação de cadeias de caracteres ;


análise sintática de uma cadeia de caracteres.

Solução

38
C++ SMP/SMC/S4

#include<iostream>
usando namespace std;

int main()
{
char t[50];
char mot[50];

int i=0,j=0,state=1,num=0;

cout << "Digite uma frase: "; cin.getline(t, 50);

enquanto(t[i]!='\0'){
se(estado==1)
{
se(t[i]!=' ')
{
state=2;j=0;mot[0]=t[i];j++;
}
}
caso contrário
{
se(t[i]!=' '){mot[j]=t[i];j++;}
senão
{
state=1;
num++;
mot[j]='\0';
cout << "mot " << num << " : " << mot << endl;
}
}
i++;
}
se(estado==2)
{
num++;
mot[j]='\0';
cout<< "mot " << num << " : " << mot << endl;
}
retornar 0;
}

V-G. Exercício7▲
Escrever um programa que pede ao usuário para digitar uma sequência de caracteres e que
indique se esta cadeia é um palíndromo ou não.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a manipulação de strings;
validação de uma cadeia.

39
C++ SMP/SMC/S4

Solução

#include<iostream>
usando namespace std;

int main()
{
char t[50];
int i,j;
bool palyn;

palyn=true;
cout << "Digite uma string: "; cin >> t;
i=0;
j=strlen(t)-1;
enquanto(palyn==verdadeiro && i<j)
se(t[i]!=t[j])palyn=false; else {i++;j--;}

if(palyn) cout<<"É um palíndromo"<<endl;


senão cout << "não é um palíndromo" << endl;
retornar 0;
}

V-H. Exercice 8▲
Escrever um programa que pede ao usuário para digitar uma cadeia de caracteres e que
exiba a letra (minúscula ou maiúscula) mais frequente.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

a manipulação de cadeias de caracteres;


manipulação de maiúsculas ou minúsculas.

Solução

#include<iostream>
usando namespace std;

int main()
{
char ch[50];
int t[52];
int i,max;
char cmax;

cout << "Digite uma string: "; cin >> ch;

para(i=0;i<52;i++)t[i]=0;

40
C++ SMP/SMC/S4

i=0;
enquanto(ch[i]!='\0')
{
se(ch[i]>='A' && ch[i]<='Z')t[ch[i]-'A']++;
senão se(ch[i]>='a' && ch[i]<='z')t[ch[i]-'a'+26]++;
i++;
}

max=t[0];cmax='A';
para(i=1;i<52;i++)
se(max<t[i])
{
max=t[i];if(i<26)cmax=(char)(i+'A');
senão cmax=(char)(i-26+'a');
}

cout << "A letra mais frequente é: " << cmax << endl;
retornar 0;
}

VI. IHM/Estruturas▲
Escrever um programa que permita inserir as informações sobre N alunos sabendo que:

- 10 < N < 30.

A estrutura contendo as informações de cada aluno deve conter os seguintes campos:

nom : chaine[10],

prenom : chaine[10],
note_ds : réel,
coef_ds : entier,
note_ex : réel,
moyenne : réel ;

podemos organizar essas estruturas de informações em uma tabela;

- on doit afficher le nom,le prénom et la moyenne de chaque élève sachant que :

média=((nota_ds*coef_ds+nota_ex*coef_ex)/(coef_ds+coef_ex)).

VII. IHM/As funçõess▲


VII-A. Exercício1▲
Escrever uma função distância que tenha como parâmetros quatro doubles xa, ya e xb, yb que
representam as coordenadas de dois pontos A e B e que retorna a distância AB. Testar isso
função.

41
C++ SMP/SMC/S4

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

criação de funções simples;


passagem de parâmetros por valor;
utilização de return ;
chamada de uma função.

Solução

#include<iostream>
usando namespace std;
#include<cmath>

dobro distância(dobro xa, dobro ya, dobro xb, dobro yb)


{
dobro dx, dy;
dx=xa-xb;
dy=ya-yb;
retornar sqrt(dx*dx+dy*dy);
}

int main()
{
double x1,y1,x2,y2,d;

cout<<"Digite a abscissa de A: ";cin>>x1;


cout<<"Digite a ordenada de A : ";cin>>y1;
cout<<"Digite a abscissa de B : ";cin>>x2;
cout << "Digite a ordenada de B : "; cin >> y2;

d=distância(x1,y1,x2,y2);

cout<<"A distância AB vale : "<<d<<endl;


retornar 0;
}

VII-B. Exercício2▲
Escrever uma função f que tenha como parâmetros um double x e um booleano OK e que retorne
un double par un return. La fonction renvoie par un return la racine carrée de (x-1)*(2-x). La
a função retorna através da variável OK o valor verdadeiro se a função estiver definida
no ponto x, falso senão. Testar esta função.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

criação de funções simples ;


passage de paramètres par valeur et par référence ;
utilização de return ;
parâmetros de entrada e saída de uma função;
chamada de uma função;

42
C++ SMP/SMC/S4

jogo de testes de uma função.

Solução

#include<iostream>
usando namespace std;
#include<cmath>

double f(double x, bool &OK)


{
double r=0;

se(x>=1 && x<=2){r=sqrt((x-1)*(2-x));OK=true;}


senão OK=false;
retornar r;
}

int main()
{
double x,y;
bool OK;
cout << "Digite x:"; cin >> x;
y=f(x,OK);
se(OK)cout<<"f(x) vale:"<<y<<endl;
senão cout << "x não está correto" << endl;
retornar 0;
}

VII-C. Exercício3▲
Escrever uma função f que tenha como parâmetro um inteiro e que retorne um booleano por um return:
verdadeiro se o inteiro é primo falso caso contrário. Testar esta função.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

criação de funções simples;


chamada de uma função ;
validação dos dados antes de chamar uma função;
função que retorna um booleano.

Solução

#include<iostream>
usando namespace std;
#include<cmath>

bool f(int x)

43
C++ SMP/SMC/S4

{
bool r=true;
int d=2;
enquanto(r && d*d<=x)se(x%d==0)r=false; senão d++;
retornar r;
}

int main()
{
int x;
bool premier;
faça{
cout<<"Digite x:";cin>>x;
}enquanto(x<=0);
premier=f(x);
se(premier)cout<<"x é primo"<<endl;
else cout<<"x não é primo"<<endl;
retornar 0;
}

VII-D. Exercício4▲
Escreva uma função f que tenha como parâmetro um inteiro n e que retorne o enésimo número
premier : esta função usará a função do 3). Testar esta função.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

criação de funções simples ;


chamada de função ;
função que chama outra função.

Solução

#include<iostream>
usando namespace std;

bool primeiro(int x)
{
bool r=true;
int d=2;
enquanto(r && d*d<=x)se(x%d==0)r=false; senão d++;
retornar r;
}

int Npremier(int N)
{
int nb=0;
int i=2;

enquanto(nb!=N)
{
se(premier(i))nb++;
i++;

44
C++ SMP/SMC/S4

}
retornar i-1;
}

int main()
{
int N,p;
cout<<"Digite o valor de N : ";cin>>N;
p=Npremier(N);
cout<<"O N-ésimo número primo é: "<<p<<endl;
retornar 0;
}

VII-E. Exercício5▲
Escrever uma função swap com dois inteiros a e b como parâmetros que troque os conteúdos
de a et de b. Tester cette fonction.

Cet exercice a pour but de vérifier les points techniques suivants :

criação de funções simples;


chamada de uma função;
passagem de parâmetros por referências.

Solução

#include<iostream>
usando namespace std;

void trocar(int &x, int &y)


{
int temp;
temp=x;
x=y;
y=temp;
}

int main()
{
int a,b;
cout<<"Digite a:";cin>>a;
cout<<"Digite b:";cin>>b;
trocar(a,b);
cout<<"a vale : "<<a<<endl;
cout << "b vale : " << b << endl;

retornar 0;
}

VII-F. Exercício6▲

45
C++ SMP/SMC/S4

Escrever uma função f que tenha como parâmetros um array t de tamanho qualquer e um inteiro n
indicando o tamanho da tabela. f deve retornar por um return um booleano b indicando se existe
um valor entre 0 e 10 nas n primeiras posições do array t. Testar isso
função.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

escrita de uma função que tenha como parâmetro um array de tamanho qualquer;
pesquisa de um elemento em um array verificando uma propriedade;
utilização de return.

Solução

#include<iostream>
usando namespace std;

void inserir(int t[], int n)


{
int i;
para(i=0;i<n;i++)
{
cout << "Digite o valor número " << i << " : ";
cin>> t[i];
}
}

bool f(int t[], int n)


{
bool trouve=false;
int i=0;
enquanto(!trouve && i<n)
se(t[i]>=0 && t[i]<=10)trouve=true; senão i++;
retornar encontra;
}

int main()
{
int a[10];
sair(a,10);
bool b;

b=f(a,10);
if(b)cout<<"Existe um valor entre 0 e 10"<<endl;
senão cout << "Não existem valores entre 0 e 10" << endl;
retornar 0;
}

VII-G. Exercício7▲
Escrever uma função f que tenha como parâmetros um array t de tamanho qualquer e um inteiro n
indicando o tamanho da tabela. f deve retornar pelo return o número de valores contidos
entre 0 e 10 nas n primeiras posições do array t. Testar esta função.
46
C++ SMP/SMC/S4

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

escrita de uma função que tem como parâmetro um array de tamanho qualquer;
contar o número de elementos em um array que verificam uma propriedade;
utilização de return.

Solução

#incluir<iostream>
usando namespace std;

void saisir(int t[], int n)


{
int i;
for(i=0;i<n;i++)
{
cout << "Digite o valor número " << i << " : ";
cin >> t[i];
}
}

int f(int t[], int n)


{
int nb=0;
int i;
for(i=0;i<n;i++)
se(t[i]>=0 && t[i]<=10)nb++;
retornar nb;
}

int main()
{
int a[10];
sair(a,10);
int x;
x=f(a,10);
cout << "Há " << x << " valor(es) entre 0 e 10" << endl;
retornar 0;
}

VII-H. Exercício8▲
Escrever uma função f que tenha como parâmetros um array t de tamanho qualquer e um inteiro n
indicando o tamanho da matriz. f tem um outro parâmetro v, inteiro passado por referência. f deve
retornar um booleano b indicando se existe um valor entre 1 e 10
nas n primeiras casas da tabela t. Se f retornar verdadeiro, v é igual ao valor da primeira
caso da tabela compreendido entre 0 e 10. Testar esta função.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

escrita de uma função que tem como parâmetro um array de tamanho qualquer;

47
C++ SMP/SMC/S4

pesquisa de um elemento em um array;


utilização de return.

Solução

#include<iostream>
usando namespace std;

void saisir(int t[], int n)


{
int i; for(i=0;i<n;i++)
{
cout << "Digite o valor número " << i << " : ";
cin >> t[i];
}
}

bool f(int t[], int n, int &v)


{
bool encontra=false;
int i=0;
enquanto(!trouve && i<n)
se(t[i]>=0 && t[i]<=10){trouve=true; v=t[i];}senão i++;
retornar encontra;
}

int main()
{
int a[10];
bool b;
int w;

sair(a,10);
b=f(a,10,w);
se(b)cout << "Existe uma valor entre 0 e 10: " << w << " é o primeiro de ";
ces valeurs.
senão cout << "Não existem valores entre 0 e 10" << endl;
retornar 0;
}

VII-I. Exercício9▲
Escrever uma função f que tenha como parâmetros um array t1 de tamanho qualquer e um inteiro n
indicando o tamanho da tabela, assim como uma tabela t2 do mesmo tamanho que t1. f deve retornar
por um retorno um inteiro nb indicando o número de valores compreendidos entre 0 e 10 no
tabela t1. f deve colocar na tabela t2 os diferentes valores entre 0 e 10 que ele
a encontradas na tabela t1.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

escrita de uma função que tem como parâmetro um array de tamanho qualquer;
extração de uma sub-lista de elementos;

48
C++ SMP/SMC/S4

utilização de return.

Solução

#include<iostream>
usando namespace std;

void saisir(int t[], int n)


{
int i;
for(i=0;i<n;i++)
{
cout<<"Digite o valor número "<<i<<" : ";
cin >> t[i];
}
}

void exibir(int t[], int n)


{
int i;
for(i=0;i<n;i++)
cout<<t[i]<<" ";
cout << endl;
}

int f(int t1[], int n,int t2[])


{
int i=0,nb=0;

for(i=0;i<n;i++)if(t1[i]>=0 && t1[i]<=10){t2[nb]=t1[i];nb++;}


retornar nb;
}

int main()
{
int a[10],b[10];
int nb;

saisir(a,10);
nb=f(a,10,b);
cout << "AQUI ESTÃO OS VALORES ENTRE 0 E 10 : " << endl;
exibir(b, nb);
retornar 0;
}

VII-J. Exercício 10▲


Escrever uma função f que tenha como parâmetros um array t de tamanho qualquer e um inteiro n
indicando o tamanho da tabela. f deve retornar por um return um inteiro igual ao índice de
primeira caixa da tabela (entre os n primeiros) compreendida entre 0 e 10. Se não existir
telle valeur, a função retorna -1. Testar essa função.

Este exercício tem como objetivo verificar os seguintes pontos técnicos:

49
C++ SMP/SMC/S4

escrita de uma função com um parâmetro que é um array de tamanho qualquer;


Pesquisa de um elemento em um array;
utilização de return.

Solução

#include<iostream>
usando namespace std;

void saisir(int t[],int n)


{
int i; for(i=0;i<n;i++)
{
cout << "Digite o valor número " << i << " : ";
cin >> t[i];
}
}

int f(int t[], int n)


{
int i=0, ind=-1;

enquanto(ind==-1 && i<n)


se(t[i]>=0 && t[i]<=10)ind=i;senão i++;
retornar ind;
}

int main()
{
int a[10];
int w;

sair(a,10);
w=f(a,10);
se(w!=-1)cout<<"Existe uma valor entre 0 e 10. "
o índice da primeira caixa é
senão cout<<"Não existem valores entre 0 e 10"<<endl;
retornar 0;
}

50

Você também pode gostar