SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Vectores	
  e	
  Matrizes	
  
Escola	
  Secundária	
  Filipa	
  de	
  Vilhena	
  
Estruturas	
  de	
  Dados	
  
Já	
  percebemos	
  que	
  ao	
  executar	
  	
  
um	
  programa	
  os	
  valores	
   	
  lidos	
  	
  
sucessivamente	
   “limpam”	
   o	
  
valor	
   	
   anterior	
   da	
   variável	
  
utilizada…	
  
	
  
	
  
E	
   se	
   pretendermos	
   guardar	
  
t e m p o r a r i a m e n t e	
   u m	
  
determinado	
   conjunto	
   de	
  
valores?	
  Como	
  fazemos?	
  
	
  
	
  
	
  
Armazenar…	
  
¡  Arrays	
  ou	
  Vectores	
  
¡  São	
  cadeias	
  de	
  variáveis	
  do	
  mesmo	
  tipo,	
  relacionados	
  entre	
  
si	
  e	
  que	
  ocupam	
  determinada	
  posição	
  indicada	
  por	
  um	
  índice	
  
§  Arrays	
  de	
  inteiros	
  
§  Arrays	
  de	
  reais	
  
§  Arrays	
  de	
  strings	
  	
  
§  …	
  
¡  São	
  variáveis	
  indexadas,	
  com	
  um	
  número	
  fixo	
  de	
  elementos	
  
do	
  mesmo	
  tipo	
  èESTRUTURAS	
  DE	
  DADOS	
  ESTÁTICAS	
  
¡  Arrays	
  ou	
  Vectores	
  
¡  São	
  cadeias	
  de	
  variáveis	
  do	
  mesmo	
  tipo,	
  relacionados	
  entre	
  
si	
  e	
  que	
  ocupam	
  determinada	
  posição	
  indicada	
  por	
  um	
  índice	
  
§  Arrays	
  de	
  inteiros	
  
§  Arrays	
  de	
  reais	
  
§  Arrays	
  de	
  strings	
  	
  
§  …	
  
¡  São	
  variáveis	
  indexadas,	
  com	
  um	
  número	
  fixo	
  de	
  elementos	
  
do	
  mesmo	
  tipo	
  èESTRUTURAS	
  DE	
  DADOS	
  ESTÁTICAS	
  
¡  Unidimensionais	
  -­‐	
  vectores	
  
Arrays	
  unidimensionais	
  -­‐	
  Vectores	
  
§ Os	
  elementos	
  de	
  um	
  vector	
  são	
  sempre	
  armazenados	
  em	
  posições	
  
contíguas	
  da	
  memória.	
  
§ Os	
  elementos	
  de	
  um	
  vector	
  declarado	
  mas	
  não	
  inicializado	
  contêm	
  
valores	
  aleatórios.	
  
§ O	
  índice	
  do	
  primeiro	
  elemento	
  de	
  um	
  vector	
  é	
  sempre	
  ZERO.	
  
§  Se	
   o	
   número	
   de	
   inicializações	
   for	
   menor	
  
que	
  o	
  número	
  de	
  elementos	
  do	
  vector,	
  os	
  
elementos	
  em	
  falta	
  são	
  inicializados	
  com	
  o	
  
valor	
  zero.	
  
§  É	
  possível	
  declarar	
  um	
  vector	
  sem	
  indicar	
  o	
  
número	
   de	
   elementos	
   que	
   irá	
   conter,	
  
desde	
   que	
   estes	
   sejam	
   colocados	
   na	
  
inicialização.	
  	
  
§  Não	
   se	
   podem	
   declarar	
   vectores	
   sem	
  
dimensão.	
  
tipo	
  nome_variavel	
  [nº_elementos]	
  
	
  
Exemplo:	
  
	
  
int	
  codigo[6];	
  
	
  ou	
  
int	
  codigo[]={123,435,234,987,657,354};	
  
	
  ou	
  
int	
  codigo[6]={123,435,234};	
  
	
  	
  
A	
  expressão	
  	
  
	
  
int	
  codigo[6];	
  
	
  
Reserva	
  seis	
  posições	
  de	
  memória	
  de	
  tipo	
  int	
  
A	
  expressão	
  
	
  
int	
  codigo[]={123,435,234,987,657,354};	
  
	
  
	
  
	
  
	
  
	
  
Reserva	
  seis	
  posições	
  de	
  memória	
  de	
  tipo	
  int	
  e	
  atribui-­‐
lhes	
  valores.	
  	
  
O	
  compilador	
  dimensiona	
  o	
  vector	
  com	
  o	
  nº	
  de	
  
elementos	
  atribuídos	
  
A	
  expressão	
  
int	
  codigo[6]={123,435,234};	
  
	
  
	
  
	
  
	
  
	
  
Reserva	
  seis	
  posições	
  de	
  memória	
  de	
  tipo	
  int	
  e	
  
atribui	
  valores	
  aos	
  três	
  primeiros.	
  	
  
O	
  compilador	
  dimensiona	
  o	
  vector	
  com	
  o	
  nº	
  de	
  
elementos	
  referido…	
  6.	
  
¡  Exemplo:	
  
#include	
  <iostream>	
  
	
  
using	
  namespace	
  std;	
  
	
  
main(	
  )	
  {	
  
	
  
	
  int	
  i,	
  a[6];	
  
	
  
	
  a[0]=	
  2;	
  a[1]=	
  8;	
  a[2]=	
  5;	
  a[3]=	
  3;	
  a[4]=	
  4;	
  a[5]=	
  6;	
  
	
  
	
  for(i=0;	
  i<6;	
  i++)	
  {	
  
	
  
	
   	
  cout<<“a[“<<i<<“]	
  =	
  “<<a[i]<<“n”;	
  
	
  
	
  
	
  }	
  
	
  	
  
	
  system(“PAUSE”);	
  
	
  
}	
  
Recordam-­‐se	
  dos	
  ciclos	
  de	
  repetição?	
  Vamos	
  usá-­‐los	
  
para	
  percorrer	
  o	
  vector…	
  
Tem	
  de	
  ser	
  feita	
  elemento	
  a	
  elemento.	
  
	
  
Sem	
  recurso	
  a	
  ciclos	
  
	
  Exemplo:	
  
	
  a[0]=	
  2;	
  a[1]=	
  8;	
  a[2]=	
  5;	
  a[3]=	
  3;	
  a[4]=	
  4;	
  a[5]=	
  6;	
  
	
  
Com	
  recurso	
  a	
  ciclos	
  
	
  Exemplo:	
  
	
   	
   	
  for(i=0;	
  i<7;	
  i++)	
  {	
  
	
   	
   	
   	
  cin>>a[i];	
  
	
   	
   	
  }	
  
função	
  srand()	
  e	
  rand()	
  
	
  
#include	
  <stdlib.h>	
  
	
  
#include	
  <iostream>	
  
	
  
using	
  namespace	
  std;	
  
	
  
main(	
  )	
  {	
  
	
  
	
  int	
  i,	
  vector[10];	
  
	
  
	
  srand(time(NULL));	
  
	
  
	
  for(i=0;i<10;i++)	
  {	
  	
  
	
   	
  vector[i]=rand();	
  	
  
	
  }	
  
	
  	
  
	
  cout<<“Numeros	
  aleatorios	
  positivosn";	
  
	
  	
  
	
  for(i=0;i<10;i++)	
  {	
  
	
   	
  	
  cout<<"vector["<<i<<"]="<<vector[i]<<"tn";	
  
	
  }	
  
	
  	
  
	
  system("PAUSE");	
  
}	
  
	
  
Gera	
  números	
  aleatórios	
  e	
  armazena-­‐os	
  num	
  vector.	
  	
  
Valor	
   Valor	
   Valor	
   Valor	
   Valor	
  
Valor	
  
Valor	
   Valor	
  
Valor	
  
¡  Cada	
  elemento	
  do	
  vector	
  tem	
  de	
  ser	
  tratado	
  individualmente.	
  
Sem	
  recurso	
  a	
  ciclos	
  
	
  Exemplo	
  
	
   	
   	
  soma	
  =	
  a[0]	
  +	
  a[1]	
  +	
  a[2]	
  +	
  a[3]	
  +	
  a[4]	
  +	
  a[5];	
  
	
  
Com	
  recurso	
  a	
  ciclos	
  
	
  Exemplo	
  
	
   	
   	
  soma=0;	
  
	
   	
   	
  for(i=0;	
  i<7;	
  i++)	
  {	
  
	
   	
   	
   	
  soma	
  =	
  soma	
  +	
  a[i];	
  
	
   	
   	
  }	
  
Actividade	
  1:	
  
	
  
Comecemos	
  por	
  treinar	
  a	
  escrita	
  /	
  leitura	
  de	
  valores	
  de	
  e	
  para	
  um	
  vector	
  de	
  inteiros:	
  
§  Peça	
  ao	
  utilizador	
  para	
  introduzir	
  20	
  valores	
  	
  que	
  deverão	
  ser	
  guardados	
  num	
  vector;	
  
§  Limpe	
  o	
  ecrã	
  no	
  da	
  introdução	
  dos	
  valores;	
  
§  Imprima	
   os	
   valores	
   que	
   o	
   utilizador	
   introduziu	
   por	
   ordem	
   de	
   introdução	
   e	
   o	
   índice	
  
correspondente;	
  
§  No	
  final	
  imprima	
  também	
  a	
  soma	
  de	
  todos	
  os	
  valores:	
  
	
  
	
  
	
  
Actividade	
  2:	
  
	
  
Crie	
  um	
  programa	
  que	
  permita	
  a	
  introdução	
  de	
  n	
  (máximo	
  100)	
  valores	
  inteiros,	
  este	
  número	
  é	
  
definido	
  pelo	
  utilizador.	
  Em	
  seguida,	
  deverá	
  imprimi-­‐los	
  pela	
  ordem	
  inversa	
  da	
  introdução.	
  
	
  
Actividade	
  3:	
  
	
  
Crie	
   um	
   programa	
   que	
   leia	
   a	
   pontuação	
   dos	
   16	
   clubes	
   da	
   1ª	
   Liga,	
   época	
   2012	
   /2013…	
   que	
  
visionários…	
  depois	
  de	
  fazer	
  a	
  leitura	
  dos	
  pontos	
  (sem	
  tendências	
  clubísticas	
  	
  :o)	
  deve	
  dizer	
  quem	
  
é	
  o	
  Campeão	
  e	
  o	
  último	
  classificado,	
  com	
  os	
  respectivos	
  pontos.	
  Deve	
  também	
  escrever	
  qual	
  a	
  
média	
  de	
  pontos	
  dessa	
  época.	
  
Dica:	
  Utilize	
  dois	
  vectores,	
  um	
  para	
  os	
  pontos	
  (inicialmente	
  vazio)	
  e	
  outro	
  para	
  o	
  nome	
  das	
  equipas	
  (que	
  deve	
  
ser	
  inicializado	
  com	
  o	
  nome	
  das	
  equipas).	
  Faça	
  corresponder	
  a	
  primeira	
  posição	
  do	
  vector	
  de	
  pontos	
  com	
   	
  a	
  
primeira	
  posição	
  do	
  vector	
  equipas,	
  ou	
  seja:	
  
	
  
	
  	
  
Vector	
  Pontos	
  
49	
  
49	
  
35	
  
…	
  
15	
  
14	
  
Vector	
  	
  Equipas	
  
FC	
  Porto	
  
SL	
  Benfica	
  
P.	
  Ferreira	
  
…	
  
Beira-­‐Mar	
  
Moreirense	
  
Índice	
  
0	
  
1	
  
2	
  
…	
  
15	
  
16	
  
Índice	
  
0	
  
1	
  
2	
  
…	
  
15	
  
16	
  
Actividade	
  4:	
  
	
  
Implemente	
   	
  um	
  programa	
  que	
  peça	
  ao	
  utilizador	
  o	
  número	
  de	
  elementos	
  de	
  um	
  vector	
  e	
  o	
  
preencha.	
  No	
  final,	
  o	
  mesmo	
  vector	
  deve	
  ter	
  os	
  seus	
  elementos	
  pela	
  ordem	
  inversa.	
  
	
  
Input:	
  Número	
  de	
  Elementos	
  do	
  vector:	
  3	
  
	
   	
  	
  	
  	
  	
  Indíce	
  0:	
  1	
  
	
   	
  	
  	
  	
  	
  Indíce	
  1:	
  2	
  
	
   	
  	
  	
  	
  	
  Indíce	
  2:	
  3	
  
	
  
Output:	
  Elementos	
  pela	
  ordem	
  inversa:	
  3	
  	
  	
  2	
  	
  	
  1	
  
	
  
Sugestão:	
  utilize	
  uma	
  variável	
  auxiliar	
  para	
  efectuar	
  a	
  troca…	
  
Actividade	
  5:	
  
	
  
Faça	
  um	
  programa	
  como	
  o	
  anterior,	
  mas	
  em	
  que	
  os	
  valores	
  invertidos	
  são	
  colocados	
  num	
  outro	
  
vector	
  inicialmente	
  vazio.	
  
	
  
Input:	
  Número	
  de	
  Elementos	
  do	
  vector:	
  3	
  
	
   	
  	
  	
  	
  	
  Indíce	
  0:	
  1	
  
	
   	
  	
  	
  	
  	
  Indíce	
  1:	
  2	
  
	
   	
  	
  	
  	
  	
  Indíce	
  2:	
  3	
  
	
  
Output:	
  vector	
  um:	
  1	
  	
  	
  2	
  	
  	
  3	
  
	
  	
  	
  	
  	
  	
  vector	
  dois:	
  	
  3	
  	
  	
  2	
  	
  	
  1	
  	
  
Actividade	
  6:	
  
	
  
Implemente	
  um	
  programa	
  em	
  que	
  são	
  dados	
  dois	
  vectores	
  diferentes	
  com	
  o	
  mesmo	
  tamanho	
  (5	
  
elementos)	
  em	
  que	
  o	
  seu	
  conteúdo	
  deve	
  ser	
  trocado,	
  ou	
  seja,	
  no	
  final	
  os	
  valores	
  do	
  vector	
  dois	
  
devem	
  estar	
  no	
  vector	
  um	
  e	
  vice-­‐versa.	
  
	
  
Inicialmente:	
  vector	
  1:	
  	
  	
  0	
  	
  	
  1	
  	
  	
  2	
  	
  	
  3	
  	
  	
  4	
  	
  
	
   	
  	
  	
  vector	
  2:	
  	
  	
  5	
  	
  	
  6	
  	
  	
  7	
  	
  	
  8	
  	
  	
  9	
  
	
  
Output:	
  vector	
  1:	
  	
  	
  5	
  	
  	
  6	
  	
  	
  7	
  	
  	
  8	
  	
  	
  9	
  	
  
	
  	
  	
  vector	
  2:	
  	
  	
  0	
  	
  	
  1	
  	
  	
  2	
  	
  	
  3	
  	
  	
  4	
  
Uma	
  dimensão	
  já	
  começa	
  a	
  ser	
  pouco	
  para	
  nós	
  e	
  oferece	
  pouco	
  desafio…	
  
	
  
…	
  mas,	
  apesar	
  de	
  as	
  3	
  dimensões	
  (3D)	
  estarem	
  na	
  moda,	
  também	
  é	
  demais	
  e	
  é	
  preciso	
  óculos	
  	
  …	
  
	
  
…	
  fiquemos	
  então	
  pelas	
  duas	
  dimensões,	
  que	
  é	
  como	
  quem	
  diz,	
  pelas:	
  
	
  
Matrizes	
  (ou	
  Arrays	
  /	
  Vectores	
  Bidimensionais)	
  
	
  
Como	
  será	
  então	
  a	
  representação	
  de	
  uma	
  matriz	
  tendo	
  em	
  conta	
  que	
  tem	
  duas	
  dimensões???	
  
Algum	
  iluminado???	
  Alguém???	
  
	
  
§  Duas	
  dimensões	
  (linhas	
  e	
  colunas);	
  
§  Disposição	
  faz	
  lembrar	
  tabela;	
  
§  Podem	
  ser	
  vistas	
  como:	
  vector	
  de	
  vectores;	
  
§  Todos	
  os	
  elementos	
  são	
  do	
  mesmo	
  tipo;	
  
§  	
  …	
  
Colunas	
  
	
  
	
  
Linhas	
  
	
  
Exemplo	
  da	
  declaração	
  de	
  um	
  array	
  bidimensional:	
  
int	
  b[2][3]	
  
Qual	
  o	
  nome	
  do	
  array???	
  Quantas	
  linhas	
  e	
  colunas	
  o	
  compõe???	
  
Trata-­‐se	
  de	
  uma	
  matriz	
  de	
  nome	
  b	
  com	
  2	
  linhas	
  e	
  3	
  colunas…	
  
Quantos	
  elementos	
  /	
  valores	
  pode	
  conter	
  /	
  guardar?	
  
6,	
  como???	
  Fácil:	
  2	
  linhas	
  x	
  3	
  colunas	
  =	
  6	
  “células”	
  
Como	
  se	
  pode	
  aceder	
  a	
  cada	
  um	
  dos	
  elementos	
  do	
  vector???	
  Ainda	
  mais	
  fácil:	
  
	
  
	
  
Colunas	
  
L
i
n
h
a	
  
0	
   1	
   2	
  
0	
   b[0][0]	
   b[0][1]	
   b[0][2]	
  
1	
   b[1][0]	
   b[1][1]	
   b[1][2]	
  
Com	
  base	
  nesta	
  matriz:	
  
Qual	
  o	
  valor	
  de	
  b[0][2]???	
  
Qual	
  o	
  valor	
  de	
  b[2][0]???	
  
Qual	
  o	
  valor	
  de	
  b[1][0]???	
  
Como	
  acede	
  ao	
  valor	
  56?	
  E	
  1?	
  	
  
Coloca-­‐se	
  agora	
  uma	
  questão	
  pertinente???	
  Como	
  percorrer	
  os	
  elementos	
  de	
  uma	
  matriz???	
  
Boa	
  pergunta,	
  quase	
  que	
  parecia	
  minha…	
  
	
  
O	
  raciocínio	
  é	
  simples,	
  se	
  num	
  vector	
  se	
  utilizava	
  um	
  ciclo	
  for…	
  
…	
  numa	
  matriz	
  utilizam-­‐se	
  dois:	
  
§  Um	
  para	
  percorrer	
  as	
  linhas;	
  
§  Outro	
  para	
  percorrer	
  todas	
  as	
  respectivas	
  células	
  dessa	
  linha	
  (colunas).	
  
Ou	
  seja:	
  
	
  
	
  
	
  
Já	
  sei	
  o	
  que	
  estão	
  a	
  pensar…	
  e	
  não,	
  não	
  tenho	
  nenhum	
  dom	
  adivinhatório,	
  mas	
  desta	
  vez	
  é	
  fácil:	
  
	
  “E	
  o	
  C++	
  Professor(a)???	
  Vamos	
  traduzir	
  isto	
  para	
  a	
  nossa	
  linguagem,	
  o	
  C++	
  …”	
  
	
  
Declaração	
  da	
  matriz	
  e	
  de	
  duas	
  variáveis	
  para	
  percorrer	
  o	
  vector	
  (linhas	
  e	
  colunas):	
  
§  int	
  b[2][3]	
  	
  	
  	
  	
  (tipo_vector[num_linhas][num_colunas]);	
  
§  int	
  i,	
  j;	
  	
  	
  	
  	
  (em	
  que	
  i	
  vai	
  ser	
  a	
  variável	
  que	
  controla	
  as	
  linhas	
  e	
  j	
  as	
  colunas,	
  podem	
  ter	
  outro	
  nome).	
  
Agora	
  está	
  na	
  altura	
  de	
  aplicar	
  todos	
  os	
  seus	
  conhecimentos	
  de	
  vectores	
  para	
  percorrer	
  a	
  matriz,	
  
não	
  se	
  esqueça	
  …	
  dois	
  ciclos:	
  
§  O	
  mais	
  exterior	
  para	
  as	
  linhas:	
  for(i	
  =	
  0;	
  i	
  <	
  2;	
  i++)	
  {	
  
§  O	
  mais	
  interior,	
  para	
  as	
  colunas	
  de	
  cada	
  linha:	
  for(j	
  =	
  0;	
  j	
  <	
  2;	
  j++)	
  {	
  
Isto	
  já	
  merece	
  uma	
  traçagem	
  não	
  acham???	
  Bem,	
  eu	
  acho	
  …	
  
Que	
  tal	
  um	
  exemplo???	
  Já	
  dava	
  uma	
  ajudinha,	
  não	
  é	
  verdade???	
  Uma	
  mãozinha,	
  quiçá	
  duas	
  …	
  
Então	
  cá	
  vai	
  um	
  exemplo,	
  é	
  só	
  passar	
  meus	
  senhores	
  …	
  é	
  só	
  passar	
  …	
  
	
  
int	
  main	
  (	
  )	
  {	
  
	
  	
  
	
  int	
  mat	
  [5][3]	
  	
  
	
  int	
  n	
  ,m;	
  
	
  for	
  (n	
  =	
  0;	
  n	
  <	
  5;	
  n++)	
  {	
  
	
   	
  for	
  (m	
  =	
  0;	
  m	
  <	
  3;	
  m++)	
  {	
  
	
  
	
   	
   	
  mat	
  [n]	
  [m]	
  =	
  (n	
  +	
  1)	
  *	
  (m	
  +	
  1);	
  
	
  
	
   	
  }	
  
	
  }	
  
	
  system(“PAUSE”);	
  
}	
  
 
Atividade	
  7:	
  
Escreva	
  um	
  programa	
  que	
  atribua	
  os	
  números	
  do	
  Euromilhões	
  a	
  uma	
  matriz	
  e	
  os	
  imprima	
  como	
  
se	
  tratasse	
  de	
  um	
  boletim.	
  Output:	
  
§  São	
  50	
  números;	
  
§  Cada	
  linha	
  tem	
  6	
  números;	
  
§  Começa	
  do	
  número	
  um:	
  
	
  	
  
	
  
Atividade	
  8:	
  
	
  
Imagine	
  que	
  vai	
  ao	
  cinema	
  com	
  uns	
  amigos	
  para	
  ver	
  o	
  filme	
  Rango,	
  acabadinho	
  de	
  estrear.	
  Ao	
  
pedir	
  os	
  bilhetes,	
  a	
  meninada	
  bilheteira	
  diz-­‐lhe	
  que	
  os	
  lugares	
  são	
  marcados	
  e	
  começa	
  a	
  marcá-­‐
los	
  à	
  	
  mão	
  numa	
  folhinha	
  de	
  papel.	
  Que	
  tal	
  dar-­‐lhe	
  uma	
  mãozinha???	
  	
  
	
  
	
  
Nada	
  de	
  ideias…	
  e	
  não,	
  não	
  é	
  a	
  preencher	
  a	
  grelha	
  que	
  a	
  menina	
  tem	
  à	
  frente.	
  Para	
  fazerem	
  
mesmo	
   sucesso	
   e	
   a	
   impressionarem,	
   que	
   me	
   dizem	
   a	
   chegarem	
   no	
   dia	
   a	
   seguir	
   com	
   um	
  
programa	
  que	
  permite:	
  
§  Marcar	
  lugares;	
  
§  Desmarcar	
  lugares;	
  
§  Apresentar	
  planta	
  do	
  cinema;	
  
§  …	
  
Atividade	
  9:	
  
	
  
	
  
Imagine	
  que	
  os	
  Professores	
  de	
  PSI	
  estão	
  cansados	
  de	
  programar…só	
  mesmo	
  em	
  imaginação	
  :o)	
  
mas	
  pretendem	
  um	
  programinha	
  que	
  registe	
  as	
  notas	
  dos	
  alunos	
  do	
  turno	
  aos	
  módulos	
  da	
  
disciplina.	
  Ajude	
  os	
  Professores	
  na	
  elaboração	
  desse	
  programa	
  utilizando	
  uma	
  matriz:	
  
§  Preencher	
  inicialmente	
  a	
  matriz	
  com-­‐1	
  (módulo	
  não	
  dado);	
  
§  	
  Utilizador	
  pode	
  preencher	
  as	
  notas	
  por	
  aluno,	
  por	
  módulo,	
  ou	
  
especificando	
  um	
  determinado	
  aluno	
  /módulo	
  (psi[alu][mod]);	
  
§  	
  Se	
  nota	
  <	
  10	
  é	
  colocado	
  0	
  na	
  célula	
  da	
  matriz	
  senão	
  é	
  colocada	
  a	
  
nota	
  entre	
  10	
  e	
  20;	
  
§  Deve	
  ser	
  possível	
  ter	
  acesso	
  a	
  informação	
  como:	
  
ü  	
  Módulos	
  em	
  atraso	
  de	
  um	
  aluno	
  qualquer;	
  
ü  	
  Média	
  dos	
  alunos	
  (ou	
  de	
  um	
  aluno);	
  
ü  	
  Média	
  de	
  Módulos	
  (ou	
  de	
  um	
  módulo);	
  
ü  	
  Módulos	
  com	
  maior	
  sucesso	
  /	
  dificuldades;	
  
Módulos	
  
Num	
  	
  do	
  	
  Aluno	
  
Mód	
  1	
   Mód	
  2	
  
	
  
…	
  
	
  
0	
   13	
   0	
   -­‐1	
  
1	
   12	
   0	
   -­‐1	
  
2	
   14	
   15	
   -­‐1	
  
…	
   …	
   …	
   -­‐1	
  
12	
   0	
   0	
   -­‐1	
  
Atividade	
  9	
  -­‐	
  Sugestões	
  
	
  
	
  
Sugestão	
  de	
  Menus	
  :	
  
1.	
  Preencher	
  Matriz	
  
1.1	
  Por	
  Módulo	
  
1.2	
  Por	
  Aluno	
  
1.3	
  Aluno	
  /	
  Módulo	
  
2.	
  Estatísticas	
  Alunos	
  
2.1	
  Média	
  Todos	
  Alunos	
  
2.2	
  Média	
  Aluno	
  
2.3	
  Aluno	
  com	
  Mais	
  /	
  Menos	
  Módulos	
  
2.4	
  Nota	
  Mais	
  Alta	
  /	
  Baixa	
  de	
  Aluno	
  
3.	
  Estatísticas	
  Módulos	
  
3.1	
  Média	
  Todos	
  Módulos	
  
3.2	
  Média	
  Módulo	
  
3.3	
  Módulo	
  com	
  Maior	
  /	
  Menor	
  Aproveitamento	
  
3.4	
  Alunos	
  que	
  (Não)	
  Fizeram	
  Módulo	
  
4.	
  Visualizar	
  Resultados	
  
5.	
  Sair	
  
Valores	
  da	
  Matriz:	
  
1.	
  Inicialmente	
  tudo	
  a	
  -­‐1	
  (módulo	
  não	
  
leccionado)	
  
2.	
  0	
  representa	
  módulo	
  não	
  feito	
  (0	
  <	
  nota	
  <	
  10)	
  
3.	
  Nota	
  entre	
  10	
  e	
  20,	
  é	
  a	
  nota	
  final	
  ao	
  módulo	
  
Utilize	
  vectores	
  para	
  guardar	
  nomes	
  e	
  
designação	
  de	
  módulos	
  e	
  não	
  os	
  apresentar	
  
como	
  valores	
  entre	
  0	
  e	
  …	
  
	
  
nomes[10]	
  =	
  {“Tiago”,	
  “Pedro”,	
  …,	
  “Nuno”}	
  
modulos[5]	
  =	
  {“Mod1”,	
  “Mod2”,	
  …	
  “Mod5”}	
  
Já	
  têm	
  utilizado	
  um	
  pseudo	
  tipo	
  de	
  dados,	
  string,	
  em	
  alguns	
  programas	
  elaborados	
  nas	
  aulas.	
  No	
  entanto,	
  
será	
  esta	
  a	
  forma	
  mais	
  correcta	
  de	
  declarar	
  uma	
  string???	
  
Não…	
  
Uma	
  string	
  não	
  é	
  mais	
  que	
  um	
  vector	
  de	
  caracteres	
  (o	
  que	
  já	
  não	
  é	
  pouco),	
  pelo	
  que	
  deve	
  ser	
  
declarada	
  como:	
  
char	
  s[número	
  de	
  caracteres	
  máximo	
  da	
  string];	
  
	
  
Outra	
  forma	
  de	
  criar	
  uma	
  string	
  é	
  inicializá-­‐la	
  aquando	
  da	
  sua	
  declaração:	
  
char	
  s[	
  ]	
  =	
  {‘P’,	
  ‘S’,	
  ‘I’,	
  ‘0’};	
  
Ou	
  
char	
  s[	
  ]	
  =	
  “PSI”;	
  
	
  
Notas:	
  Apesar	
  de	
  PSI	
  ter	
  3	
  caracteres,	
  a	
  string	
  terá	
  tamanho	
  4;	
  
A	
  2ª	
  forma	
  não	
  precisa	
  do	
  ‘0’	
  no	
  final	
  porque	
  ao	
  usar	
  aspas	
  ele	
  é	
  colocado	
  no	
  final	
  de	
  forma	
  automática;	
  
O	
  ‘0’	
  indica	
  o	
  fim	
  da	
  string,	
  uma	
  vez	
  que	
  se	
  pode	
  inicializar	
  string	
  com	
  mais	
  posições	
  que	
  as	
  utilizadas	
  …	
  
Vejamos	
  então	
  o	
  seguinte	
  exemplo…	
  
	
  
Uma	
  string	
  (str)	
  de	
  20	
  caracteres:	
  
§  	
  char	
  str[20]={’B’,’o’,’m’,’	
  ’,’d’,’i’,’a’,’	
  ’,’m’,’u’,’n’,’d’,’o’,’0’};	
  
§  	
  char	
  str[20]="Bom	
  dia	
  mundo";	
  
	
  
	
  
Um	
  outro	
  aspecto	
  importante,	
  não	
  se	
  pode	
  fazer	
  atribuição	
  directa	
  de	
  uma	
  string	
  a	
  um	
  array:	
  
str	
  =	
  “Bom	
  Dia	
  Mundo”;	
  
str[	
  ]	
  =	
  “Bom	
  Dia	
  Mundo”;	
  
	
  
Só	
  pode	
  ser	
  feita	
  na	
  declaração	
  (inicialização)	
  ou	
  e	
  uma	
  das	
  formas	
  que	
  vamos	
  ver	
  mais	
  à	
  frente.	
  
Podem	
  ser	
  utilizadas	
  as	
  funções	
  normais	
  de	
  input	
  e	
  output	
  ,	
  ou	
  seja,	
  cin	
  e	
  cout…	
  
Senão,	
  vejamos	
  a	
  seguinte	
  declaração:	
  
	
  
char	
  s[8]	
  =	
  “PSI2013”;	
  
	
  
A	
  instrução	
  
cout	
  <<	
  s;	
  
	
  
Faz	
  aparecer	
  /	
  escrever	
  no	
  ecrã:	
  PSI2013	
  
	
  
O	
  mesmo	
  aconteceria,	
  mas	
  em	
  linhas	
  diferentes,	
  com:	
  
for(i=0;	
  i	
  <	
  5;	
  i++)	
  {	
  //	
  caracter	
  a	
  caracter	
  
cout	
  <<	
  s[i]	
  <<	
  endl;	
  
}	
  
Para	
  fazer	
  a	
  leitura	
  de	
  uma	
  string	
  para	
  um	
  array,	
  poderíamos	
  fazer:	
  
cin	
  >>	
  s;	
  (Problema	
  a	
  nível	
  dos	
  espaços	
  entre	
  as	
  palavras)	
  
Actividade	
  10:	
  
Observe	
  com	
  atenção	
  o	
  seguinte	
  programa	
  e	
  a	
  utilização	
  de	
  strings	
  /	
  arrays	
  de	
  caracteres:	
  
#include<iostream>	
  
using	
  namespace	
  std;	
  
Int	
  main()	
  {	
  
char	
  discip[4]	
  =	
  “PSI”,	
  nome[20];	
  
cout	
  <<	
  discip;	
  
cout	
  <<	
  endl	
  <<	
  “Escreva	
  o	
  seu	
  nome:	
  ”	
  <<	
  endl;	
  
cin>>nome;	
  
cout	
  <<	
  discip	
  <<	
  “	
  …	
  Is	
  Simply	
  The	
  Best	
  …”	
  <<	
  endl;	
  
for	
  (int	
  i=0;i<4;i++)	
  {	
  
cout<<nome[i]<<“n”;	
  
	
  }	
  
}	
  
Será	
  que	
  a	
  implementação	
  anterior	
  tem	
  problemas???	
  
	
  
Nunca	
  vos	
  enganamos,	
  mas	
  desta	
  vez	
  há	
  que	
  admitir	
  que	
  existem	
  pequenos	
  bugs…propositados…	
  
	
  
§  	
  Se	
  o	
  número	
  de	
  caracteres	
  introduzidos	
  for	
  superior	
  à	
  capacidade	
  do	
  array	
  ;	
  
§  	
  No	
  caso	
  de	
  o	
  utilizador	
  escrever	
  palavras	
  separadas	
  por	
  espaço,	
  o	
  programa	
  só	
  reconhece	
  a	
  primeira	
  
(entende	
  o	
  espaço	
  como	
  separador	
  de	
  dados	
  diferentes).	
  
	
  
Então,	
  como	
  podemos	
  manipular	
  estas	
  strings???	
  
§  	
  Existe	
  uma	
  biblioteca	
  que	
  contém	
  conjunto	
  de	
  funções	
  que	
  permitem	
  manipular	
  strings:	
  
<string.h>	
  
§  	
  A	
  Maioria	
  das	
  funções	
  anteriores	
  partem	
  do	
  princípio	
  que	
  na	
  última	
  posição	
  "válida“	
  está	
  o	
  caracter	
  
especial,	
  ou	
  seja,	
  null	
  ou	
  ’0’.	
  
Pode	
  efectuar	
  a	
  leitura	
  a	
  partir	
  do	
  teclado	
  com	
  a	
  instrução	
  
	
   	
  gets(string)-­‐>lê	
  string	
  a	
  partir	
  do	
  teclado	
  (incluir	
  a	
  biblioteca	
  <stdio.h>)	
  
	
  
Actividade	
  11	
  
:	
  
Escreva	
  um	
  programa,	
  que	
  utiliza	
  a	
  instrução	
  anterior,	
  para	
  ler	
  o	
  nome	
  completo	
  da	
  pessoa	
  a	
  
partir	
  do	
  teclado	
  e	
  que	
  depois	
  o	
  imprima	
  numa	
  mensagem	
  de	
  boas	
  vindas.	
  
#include	
  <iostream>	
  
#include	
  <stdio.h>	
  
using	
  namespace	
  std;	
  
main	
  ()	
  {	
  
char	
  nome[100];	
  
cout	
  <<	
  "n	
  Escreva	
  o	
  seu	
  nome:	
  ";	
  
gets(nome);	
  
system(“CLS");	
  
cout	
  <<"Olá,	
  "	
  <<	
  nome	
  <<	
  endl;	
  
system("PAUSE");	
  
}	
  
Para	
  ler	
  a	
  string	
  pode-­‐se	
  
utilizar:	
  
cin.getline(array,	
  
tamanho)	
  
Nota:	
  Ver	
  referências	
  …	
  
	
  
Se	
  incluir	
  a	
  biblioteca	
  <string.h>	
  terá	
  acesso	
  a	
  um	
  conjunto	
  de	
  funções	
  que	
  operam	
  directamente	
  sobre	
  
strings,	
  como	
  por	
  exemplo:	
  
	
  
§  	
  strcopy(str_destino,	
  str_origem)	
  -­‐>	
  copia	
  a	
  string	
  de	
  origem	
  para	
  a	
  string	
  de	
  destino,	
  ou	
  seja:	
  
str_destino	
  =	
  str_origem;	
  
§  	
  strcat(str1,	
  str2)-­‐>	
  acrescenta	
  /	
  concatena	
  a	
  string2	
  à	
  string1;	
  
	
  
§  	
  strlen(str)-­‐>	
  mede	
  o	
  comprimento	
  da	
  string	
  e	
  retorna	
  o	
  número	
  de	
  caracteres	
  que	
  a	
  compõe.	
  
§  	
  strcmp(str1,str2)-­‐>	
  compara	
  as	
  duas	
  strings,	
  str1	
  e	
  str2.	
  Se	
  as	
  strings	
  forem	
  iguais,	
  devolve	
  o	
  valor	
  0.	
  
Entre	
  outras…	
  
Actividade	
  12:	
  
Passe	
  o	
  programa	
  que	
  se	
  segue	
  e	
  observe	
  os	
  resultados	
  da	
  aplicação	
  das	
  funções	
  anteriores:	
  
	
  
#include<iostream>	
  
#include<string.h>	
  
intmain	
  (	
  )	
  {	
  
char	
  string1[50]	
  =	
  “Aula	
  de	
  PSI	
  10!!!!”,	
  string2[50];	
  
int	
  n	
  ;	
  
strcpy(string2,	
  string1);	
  
if(strcmp(string2	
  ,string1)	
  ==	
  0)	
  {	
  
cout	
  <<	
  “As	
  strings	
  sao	
  iguais…”	
  <<	
  endl;	
  
}	
  
n	
  =	
  strlen(string1)	
  ;	
  
cout<<“A	
  string1	
  tem	
  “	
  <<	
  n	
  <<	
  “	
  caracteres.”	
  <<	
  endl	
  ;	
  
system(“PAUSE”);	
  
}	
  	
  
Actividade	
  13:	
  
Implemente	
  um	
  programa,	
  em	
  que	
  utilizando	
  as	
  várias	
  funções	
  da	
  biblioteca	
  string,	
  e	
  que:	
  
	
  
§  	
  peça	
  ao	
  utilizador	
  para	
  inserir	
  uma	
  password	
  (utilizando	
  a	
  função	
  gets);	
  
§  	
  após	
  a	
  introdução	
  da	
  password,	
  o	
  ecrã	
  é	
  limpo;	
  
§  	
  é	
  dado	
  o	
  número	
  de	
  caracteres	
  da	
  password	
  inserida	
  pelo	
  utilizador;	
  
§  	
  se	
  password	
  do	
  utilizador:	
  
§  igual	
  à	
  do	
  sistema,	
  devolve:	
  “Password	
  Correcta”;	
  
§  senão,	
  devolve:	
  “Password	
  Inválida”;	
  
	
  
Devem	
  ser	
  dadas	
  ao	
  utilizador	
  3	
  oportunidades	
  para	
  adivinhar	
  a	
  password,	
  senão	
  …	
  
Actividade	
  14:	
  
¡  Elabore	
  um	
  programa	
  que	
  leia	
  suas	
  palavras	
  do	
  utilizador.	
  O	
  programa	
  deve	
  determinar	
  se	
  
as	
  palavras	
  são	
  iguais.	
  Se	
  não	
  forem,	
  deve	
  determinar	
  qual	
  delas	
  tem	
  maior	
  número	
  de	
  
caracteres.	
  
	
  
Actividade	
  15:	
  
¡  Imagine	
  que	
  quer	
  saber,	
  para	
  fins	
  estatísticos,	
  qual	
  o	
  número	
  de	
  espaços	
  em	
  branco,	
  vogais	
  
e	
  consoantes	
  que	
  estão	
  presentes	
  numa	
  frase	
  escrita	
  pelo	
  utilizador.	
  Faça	
  uma	
  
implementação.	
  
Actividade	
  16:	
  
¡  E	
  que	
  tal	
  inverter	
  uma	
  string	
  com	
  um	
  máximo	
  de	
  20	
  caracteres	
  que	
  o	
  utilizador	
  introduz???	
  
	
  
Actividade	
  17:	
  
¡  Verifique	
  se	
  uma	
  palavra	
  é	
  um	
  palíndromo,	
  ou	
  seja,	
  palavra	
  que	
  se	
  lê	
  da	
  mesma	
  forma	
  da	
  
direita	
  para	
  a	
  esquerda	
  e	
  da	
  esquerda	
  para	
  a	
  direita.	
  Por	
  exemplo:	
  ovo,	
  radar,	
  salas,	
  
sopapos,…	
  

Mais conteúdo relacionado

Mais procurados

Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Gercélia Ramos
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1Pacc UAB
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Gercélia Ramos
 
Lista de exercícios resolvidos
Lista de exercícios resolvidosLista de exercícios resolvidos
Lista de exercícios resolvidosCrishna Irion
 
Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Pacc UAB
 
Algoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentosAlgoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentosMauro Pereira
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
mod2-mecanismos
mod2-mecanismosmod2-mecanismos
mod2-mecanismosdiogoa21
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigoMauro Pereira
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPLorranna Machado
 

Mais procurados (20)

Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Algoritmo 04 - Estruturas de decisão
 Algoritmo 04 - Estruturas de decisão Algoritmo 04 - Estruturas de decisão
Algoritmo 04 - Estruturas de decisão
 
Algoritmos: Tipos de Dados
Algoritmos: Tipos de DadosAlgoritmos: Tipos de Dados
Algoritmos: Tipos de Dados
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1Aula 6 - Estruturas de seleção encadeada - parte 1
Aula 6 - Estruturas de seleção encadeada - parte 1
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 
Lista de exercícios resolvidos
Lista de exercícios resolvidosLista de exercícios resolvidos
Lista de exercícios resolvidos
 
Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1
 
Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
 
Algoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentosAlgoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentos
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
mod2-mecanismos
mod2-mecanismosmod2-mecanismos
mod2-mecanismos
 
Algoritmos em portugol
Algoritmos em portugolAlgoritmos em portugol
Algoritmos em portugol
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigo
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHP
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Algoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetiçãoAlgoritmos 05 - Estruturas de repetição
Algoritmos 05 - Estruturas de repetição
 

Destaque

Módulo-2.2-estudo das componentes internas
Módulo-2.2-estudo das componentes internasMódulo-2.2-estudo das componentes internas
Módulo-2.2-estudo das componentes internasdiogoa21
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasdiogoa21
 
Módulo 2.1-componentes de um computador
Módulo 2.1-componentes de um computadorMódulo 2.1-componentes de um computador
Módulo 2.1-componentes de um computadordiogoa21
 
Psi-mod-op2
Psi-mod-op2Psi-mod-op2
Psi-mod-op2diogoa21
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
Tic-excel-01
Tic-excel-01 Tic-excel-01
Tic-excel-01 diogoa21
 
Tic-excel-02
Tic-excel-02Tic-excel-02
Tic-excel-02diogoa21
 
Psi-mod-13
Psi-mod-13Psi-mod-13
Psi-mod-13diogoa21
 
Tic-excel-03
Tic-excel-03Tic-excel-03
Tic-excel-03diogoa21
 
Ac Mod 3 deteção de avarias - Esquemas
Ac  Mod 3 deteção de avarias - EsquemasAc  Mod 3 deteção de avarias - Esquemas
Ac Mod 3 deteção de avarias - Esquemasfilipereira
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
Módulo-2.3-estudo de periféricos e suas características e configuração
Módulo-2.3-estudo de periféricos e suas características e configuraçãoMódulo-2.3-estudo de periféricos e suas características e configuração
Módulo-2.3-estudo de periféricos e suas características e configuraçãodiogoa21
 
mod1-algoritmia
mod1-algoritmiamod1-algoritmia
mod1-algoritmiadiogoa21
 
Ac m3 correção das fichas 4,5 e 6
Ac m3   correção das fichas 4,5 e 6Ac m3   correção das fichas 4,5 e 6
Ac m3 correção das fichas 4,5 e 6Caniggia123
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15diogoa21
 

Destaque (20)

Módulo-2.2-estudo das componentes internas
Módulo-2.2-estudo das componentes internasMódulo-2.2-estudo das componentes internas
Módulo-2.2-estudo das componentes internas
 
Correcção da ficha 4 e 5
Correcção da ficha 4 e 5Correcção da ficha 4 e 5
Correcção da ficha 4 e 5
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 
Módulo 2.1-componentes de um computador
Módulo 2.1-componentes de um computadorMódulo 2.1-componentes de um computador
Módulo 2.1-componentes de um computador
 
Psi-mod-op2
Psi-mod-op2Psi-mod-op2
Psi-mod-op2
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Tic-excel-01
Tic-excel-01 Tic-excel-01
Tic-excel-01
 
Tic-excel-02
Tic-excel-02Tic-excel-02
Tic-excel-02
 
So-mod-1
So-mod-1So-mod-1
So-mod-1
 
Psi-mod-13
Psi-mod-13Psi-mod-13
Psi-mod-13
 
Modulo-3
Modulo-3 Modulo-3
Modulo-3
 
Tic-excel-03
Tic-excel-03Tic-excel-03
Tic-excel-03
 
Ac Mod 3 deteção de avarias - Esquemas
Ac  Mod 3 deteção de avarias - EsquemasAc  Mod 3 deteção de avarias - Esquemas
Ac Mod 3 deteção de avarias - Esquemas
 
So-mod-4
So-mod-4So-mod-4
So-mod-4
 
So-mod-2
So-mod-2So-mod-2
So-mod-2
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
Módulo-2.3-estudo de periféricos e suas características e configuração
Módulo-2.3-estudo de periféricos e suas características e configuraçãoMódulo-2.3-estudo de periféricos e suas características e configuração
Módulo-2.3-estudo de periféricos e suas características e configuração
 
mod1-algoritmia
mod1-algoritmiamod1-algoritmia
mod1-algoritmia
 
Ac m3 correção das fichas 4,5 e 6
Ac m3   correção das fichas 4,5 e 6Ac m3   correção das fichas 4,5 e 6
Ac m3 correção das fichas 4,5 e 6
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15
 

Semelhante a mod4-estruturas-dadosestaticas-ordenacao

Semelhante a mod4-estruturas-dadosestaticas-ordenacao (20)

Aula 8 - Vetores e Matrizes.pptx
Aula 8 - Vetores e Matrizes.pptxAula 8 - Vetores e Matrizes.pptx
Aula 8 - Vetores e Matrizes.pptx
 
Algoritmos e Programação: Vetores
Algoritmos e Programação: VetoresAlgoritmos e Programação: Vetores
Algoritmos e Programação: Vetores
 
Lógica de Programação - Unimep/Pronatec - Aula10
Lógica de Programação - Unimep/Pronatec - Aula10Lógica de Programação - Unimep/Pronatec - Aula10
Lógica de Programação - Unimep/Pronatec - Aula10
 
Aula Vetores - 08-05-2023.pdf
Aula Vetores - 08-05-2023.pdfAula Vetores - 08-05-2023.pdf
Aula Vetores - 08-05-2023.pdf
 
Manual PSInf - Modulo 5
Manual PSInf - Modulo 5Manual PSInf - Modulo 5
Manual PSInf - Modulo 5
 
VetoresMatrizes.pdf
VetoresMatrizes.pdfVetoresMatrizes.pdf
VetoresMatrizes.pdf
 
Modulo02
Modulo02Modulo02
Modulo02
 
Algoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlgoritmos e Programação: Matrizes
Algoritmos e Programação: Matrizes
 
Vetores e Matrizes.pdf
Vetores e Matrizes.pdfVetores e Matrizes.pdf
Vetores e Matrizes.pdf
 
Ap vetores
Ap vetoresAp vetores
Ap vetores
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Vetores e Matrizes em C.
Vetores e Matrizes em C.Vetores e Matrizes em C.
Vetores e Matrizes em C.
 
Java8
Java8Java8
Java8
 
Aula 5 aed - vetores
Aula 5   aed - vetoresAula 5   aed - vetores
Aula 5 aed - vetores
 
Ipccea cap iv
Ipccea cap ivIpccea cap iv
Ipccea cap iv
 
Algoritmos - Vetores
Algoritmos - VetoresAlgoritmos - Vetores
Algoritmos - Vetores
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Alg aula 06 - vetores tp1
Alg   aula 06 - vetores tp1Alg   aula 06 - vetores tp1
Alg aula 06 - vetores tp1
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Linguagem C - Vetores e matrizes [exercícios]
Linguagem C - Vetores e matrizes [exercícios]Linguagem C - Vetores e matrizes [exercícios]
Linguagem C - Vetores e matrizes [exercícios]
 

Último

Transformações isométricas.pptx Geometria
Transformações isométricas.pptx GeometriaTransformações isométricas.pptx Geometria
Transformações isométricas.pptx Geometriajucelio7
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfjanainadfsilva
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
A poesia - Definições e Característicass
A poesia - Definições e CaracterísticassA poesia - Definições e Característicass
A poesia - Definições e CaracterísticassAugusto Costa
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficasprofcamilamanz
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.Vitor Mineiro
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila RibeiroMarcele Ravasio
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaronaldojacademico
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfAlissonMiranda22
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfFernandaMota99
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxssuserf54fa01
 

Último (20)

Transformações isométricas.pptx Geometria
Transformações isométricas.pptx GeometriaTransformações isométricas.pptx Geometria
Transformações isométricas.pptx Geometria
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
A poesia - Definições e Característicass
A poesia - Definições e CaracterísticassA poesia - Definições e Característicass
A poesia - Definições e Característicass
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficas
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riqueza
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdf
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdf
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptx
 

mod4-estruturas-dadosestaticas-ordenacao

  • 1. Vectores  e  Matrizes   Escola  Secundária  Filipa  de  Vilhena  
  • 2. Estruturas  de  Dados   Já  percebemos  que  ao  executar     um  programa  os  valores    lidos     sucessivamente   “limpam”   o   valor     anterior   da   variável   utilizada…       E   se   pretendermos   guardar   t e m p o r a r i a m e n t e   u m   determinado   conjunto   de   valores?  Como  fazemos?         Armazenar…  
  • 3. ¡  Arrays  ou  Vectores   ¡  São  cadeias  de  variáveis  do  mesmo  tipo,  relacionados  entre   si  e  que  ocupam  determinada  posição  indicada  por  um  índice   §  Arrays  de  inteiros   §  Arrays  de  reais   §  Arrays  de  strings     §  …   ¡  São  variáveis  indexadas,  com  um  número  fixo  de  elementos   do  mesmo  tipo  èESTRUTURAS  DE  DADOS  ESTÁTICAS  
  • 4. ¡  Arrays  ou  Vectores   ¡  São  cadeias  de  variáveis  do  mesmo  tipo,  relacionados  entre   si  e  que  ocupam  determinada  posição  indicada  por  um  índice   §  Arrays  de  inteiros   §  Arrays  de  reais   §  Arrays  de  strings     §  …   ¡  São  variáveis  indexadas,  com  um  número  fixo  de  elementos   do  mesmo  tipo  èESTRUTURAS  DE  DADOS  ESTÁTICAS  
  • 5. ¡  Unidimensionais  -­‐  vectores   Arrays  unidimensionais  -­‐  Vectores   § Os  elementos  de  um  vector  são  sempre  armazenados  em  posições   contíguas  da  memória.   § Os  elementos  de  um  vector  declarado  mas  não  inicializado  contêm   valores  aleatórios.   § O  índice  do  primeiro  elemento  de  um  vector  é  sempre  ZERO.  
  • 6. §  Se   o   número   de   inicializações   for   menor   que  o  número  de  elementos  do  vector,  os   elementos  em  falta  são  inicializados  com  o   valor  zero.   §  É  possível  declarar  um  vector  sem  indicar  o   número   de   elementos   que   irá   conter,   desde   que   estes   sejam   colocados   na   inicialização.     §  Não   se   podem   declarar   vectores   sem   dimensão.  
  • 7. tipo  nome_variavel  [nº_elementos]     Exemplo:     int  codigo[6];    ou   int  codigo[]={123,435,234,987,657,354};    ou   int  codigo[6]={123,435,234};      
  • 8. A  expressão       int  codigo[6];     Reserva  seis  posições  de  memória  de  tipo  int  
  • 9. A  expressão     int  codigo[]={123,435,234,987,657,354};             Reserva  seis  posições  de  memória  de  tipo  int  e  atribui-­‐ lhes  valores.     O  compilador  dimensiona  o  vector  com  o  nº  de   elementos  atribuídos  
  • 10. A  expressão   int  codigo[6]={123,435,234};             Reserva  seis  posições  de  memória  de  tipo  int  e   atribui  valores  aos  três  primeiros.     O  compilador  dimensiona  o  vector  com  o  nº  de   elementos  referido…  6.  
  • 11. ¡  Exemplo:   #include  <iostream>     using  namespace  std;     main(  )  {      int  i,  a[6];      a[0]=  2;  a[1]=  8;  a[2]=  5;  a[3]=  3;  a[4]=  4;  a[5]=  6;      for(i=0;  i<6;  i++)  {        cout<<“a[“<<i<<“]  =  “<<a[i]<<“n”;        }        system(“PAUSE”);     }   Recordam-­‐se  dos  ciclos  de  repetição?  Vamos  usá-­‐los   para  percorrer  o  vector…  
  • 12. Tem  de  ser  feita  elemento  a  elemento.     Sem  recurso  a  ciclos    Exemplo:    a[0]=  2;  a[1]=  8;  a[2]=  5;  a[3]=  3;  a[4]=  4;  a[5]=  6;     Com  recurso  a  ciclos    Exemplo:        for(i=0;  i<7;  i++)  {          cin>>a[i];        }  
  • 13. função  srand()  e  rand()     #include  <stdlib.h>     #include  <iostream>     using  namespace  std;     main(  )  {      int  i,  vector[10];      srand(time(NULL));      for(i=0;i<10;i++)  {        vector[i]=rand();      }        cout<<“Numeros  aleatorios  positivosn";        for(i=0;i<10;i++)  {        cout<<"vector["<<i<<"]="<<vector[i]<<"tn";    }        system("PAUSE");   }     Gera  números  aleatórios  e  armazena-­‐os  num  vector.    
  • 14. Valor   Valor   Valor   Valor   Valor   Valor   Valor   Valor   Valor   ¡  Cada  elemento  do  vector  tem  de  ser  tratado  individualmente.   Sem  recurso  a  ciclos    Exemplo        soma  =  a[0]  +  a[1]  +  a[2]  +  a[3]  +  a[4]  +  a[5];     Com  recurso  a  ciclos    Exemplo        soma=0;        for(i=0;  i<7;  i++)  {          soma  =  soma  +  a[i];        }  
  • 15. Actividade  1:     Comecemos  por  treinar  a  escrita  /  leitura  de  valores  de  e  para  um  vector  de  inteiros:   §  Peça  ao  utilizador  para  introduzir  20  valores    que  deverão  ser  guardados  num  vector;   §  Limpe  o  ecrã  no  da  introdução  dos  valores;   §  Imprima   os   valores   que   o   utilizador   introduziu   por   ordem   de   introdução   e   o   índice   correspondente;   §  No  final  imprima  também  a  soma  de  todos  os  valores:         Actividade  2:     Crie  um  programa  que  permita  a  introdução  de  n  (máximo  100)  valores  inteiros,  este  número  é   definido  pelo  utilizador.  Em  seguida,  deverá  imprimi-­‐los  pela  ordem  inversa  da  introdução.    
  • 16. Actividade  3:     Crie   um   programa   que   leia   a   pontuação   dos   16   clubes   da   1ª   Liga,   época   2012   /2013…   que   visionários…  depois  de  fazer  a  leitura  dos  pontos  (sem  tendências  clubísticas    :o)  deve  dizer  quem   é  o  Campeão  e  o  último  classificado,  com  os  respectivos  pontos.  Deve  também  escrever  qual  a   média  de  pontos  dessa  época.   Dica:  Utilize  dois  vectores,  um  para  os  pontos  (inicialmente  vazio)  e  outro  para  o  nome  das  equipas  (que  deve   ser  inicializado  com  o  nome  das  equipas).  Faça  corresponder  a  primeira  posição  do  vector  de  pontos  com    a   primeira  posição  do  vector  equipas,  ou  seja:         Vector  Pontos   49   49   35   …   15   14   Vector    Equipas   FC  Porto   SL  Benfica   P.  Ferreira   …   Beira-­‐Mar   Moreirense   Índice   0   1   2   …   15   16   Índice   0   1   2   …   15   16  
  • 17. Actividade  4:     Implemente    um  programa  que  peça  ao  utilizador  o  número  de  elementos  de  um  vector  e  o   preencha.  No  final,  o  mesmo  vector  deve  ter  os  seus  elementos  pela  ordem  inversa.     Input:  Número  de  Elementos  do  vector:  3              Indíce  0:  1              Indíce  1:  2              Indíce  2:  3     Output:  Elementos  pela  ordem  inversa:  3      2      1     Sugestão:  utilize  uma  variável  auxiliar  para  efectuar  a  troca…  
  • 18. Actividade  5:     Faça  um  programa  como  o  anterior,  mas  em  que  os  valores  invertidos  são  colocados  num  outro   vector  inicialmente  vazio.     Input:  Número  de  Elementos  do  vector:  3              Indíce  0:  1              Indíce  1:  2              Indíce  2:  3     Output:  vector  um:  1      2      3              vector  dois:    3      2      1    
  • 19. Actividade  6:     Implemente  um  programa  em  que  são  dados  dois  vectores  diferentes  com  o  mesmo  tamanho  (5   elementos)  em  que  o  seu  conteúdo  deve  ser  trocado,  ou  seja,  no  final  os  valores  do  vector  dois   devem  estar  no  vector  um  e  vice-­‐versa.     Inicialmente:  vector  1:      0      1      2      3      4            vector  2:      5      6      7      8      9     Output:  vector  1:      5      6      7      8      9          vector  2:      0      1      2      3      4  
  • 20. Uma  dimensão  já  começa  a  ser  pouco  para  nós  e  oferece  pouco  desafio…     …  mas,  apesar  de  as  3  dimensões  (3D)  estarem  na  moda,  também  é  demais  e  é  preciso  óculos    …     …  fiquemos  então  pelas  duas  dimensões,  que  é  como  quem  diz,  pelas:     Matrizes  (ou  Arrays  /  Vectores  Bidimensionais)     Como  será  então  a  representação  de  uma  matriz  tendo  em  conta  que  tem  duas  dimensões???   Algum  iluminado???  Alguém???     §  Duas  dimensões  (linhas  e  colunas);   §  Disposição  faz  lembrar  tabela;   §  Podem  ser  vistas  como:  vector  de  vectores;   §  Todos  os  elementos  são  do  mesmo  tipo;   §   …   Colunas       Linhas    
  • 21. Exemplo  da  declaração  de  um  array  bidimensional:   int  b[2][3]   Qual  o  nome  do  array???  Quantas  linhas  e  colunas  o  compõe???   Trata-­‐se  de  uma  matriz  de  nome  b  com  2  linhas  e  3  colunas…   Quantos  elementos  /  valores  pode  conter  /  guardar?   6,  como???  Fácil:  2  linhas  x  3  colunas  =  6  “células”   Como  se  pode  aceder  a  cada  um  dos  elementos  do  vector???  Ainda  mais  fácil:       Colunas   L i n h a   0   1   2   0   b[0][0]   b[0][1]   b[0][2]   1   b[1][0]   b[1][1]   b[1][2]   Com  base  nesta  matriz:   Qual  o  valor  de  b[0][2]???   Qual  o  valor  de  b[2][0]???   Qual  o  valor  de  b[1][0]???   Como  acede  ao  valor  56?  E  1?    
  • 22. Coloca-­‐se  agora  uma  questão  pertinente???  Como  percorrer  os  elementos  de  uma  matriz???   Boa  pergunta,  quase  que  parecia  minha…     O  raciocínio  é  simples,  se  num  vector  se  utilizava  um  ciclo  for…   …  numa  matriz  utilizam-­‐se  dois:   §  Um  para  percorrer  as  linhas;   §  Outro  para  percorrer  todas  as  respectivas  células  dessa  linha  (colunas).   Ou  seja:        
  • 23. Já  sei  o  que  estão  a  pensar…  e  não,  não  tenho  nenhum  dom  adivinhatório,  mas  desta  vez  é  fácil:    “E  o  C++  Professor(a)???  Vamos  traduzir  isto  para  a  nossa  linguagem,  o  C++  …”     Declaração  da  matriz  e  de  duas  variáveis  para  percorrer  o  vector  (linhas  e  colunas):   §  int  b[2][3]          (tipo_vector[num_linhas][num_colunas]);   §  int  i,  j;          (em  que  i  vai  ser  a  variável  que  controla  as  linhas  e  j  as  colunas,  podem  ter  outro  nome).   Agora  está  na  altura  de  aplicar  todos  os  seus  conhecimentos  de  vectores  para  percorrer  a  matriz,   não  se  esqueça  …  dois  ciclos:   §  O  mais  exterior  para  as  linhas:  for(i  =  0;  i  <  2;  i++)  {   §  O  mais  interior,  para  as  colunas  de  cada  linha:  for(j  =  0;  j  <  2;  j++)  {   Isto  já  merece  uma  traçagem  não  acham???  Bem,  eu  acho  …  
  • 24. Que  tal  um  exemplo???  Já  dava  uma  ajudinha,  não  é  verdade???  Uma  mãozinha,  quiçá  duas  …   Então  cá  vai  um  exemplo,  é  só  passar  meus  senhores  …  é  só  passar  …     int  main  (  )  {        int  mat  [5][3]      int  n  ,m;    for  (n  =  0;  n  <  5;  n++)  {      for  (m  =  0;  m  <  3;  m++)  {          mat  [n]  [m]  =  (n  +  1)  *  (m  +  1);        }    }    system(“PAUSE”);   }  
  • 25.   Atividade  7:   Escreva  um  programa  que  atribua  os  números  do  Euromilhões  a  uma  matriz  e  os  imprima  como   se  tratasse  de  um  boletim.  Output:   §  São  50  números;   §  Cada  linha  tem  6  números;   §  Começa  do  número  um:        
  • 26. Atividade  8:     Imagine  que  vai  ao  cinema  com  uns  amigos  para  ver  o  filme  Rango,  acabadinho  de  estrear.  Ao   pedir  os  bilhetes,  a  meninada  bilheteira  diz-­‐lhe  que  os  lugares  são  marcados  e  começa  a  marcá-­‐ los  à    mão  numa  folhinha  de  papel.  Que  tal  dar-­‐lhe  uma  mãozinha???         Nada  de  ideias…  e  não,  não  é  a  preencher  a  grelha  que  a  menina  tem  à  frente.  Para  fazerem   mesmo   sucesso   e   a   impressionarem,   que   me   dizem   a   chegarem   no   dia   a   seguir   com   um   programa  que  permite:   §  Marcar  lugares;   §  Desmarcar  lugares;   §  Apresentar  planta  do  cinema;   §  …  
  • 27. Atividade  9:       Imagine  que  os  Professores  de  PSI  estão  cansados  de  programar…só  mesmo  em  imaginação  :o)   mas  pretendem  um  programinha  que  registe  as  notas  dos  alunos  do  turno  aos  módulos  da   disciplina.  Ajude  os  Professores  na  elaboração  desse  programa  utilizando  uma  matriz:   §  Preencher  inicialmente  a  matriz  com-­‐1  (módulo  não  dado);   §   Utilizador  pode  preencher  as  notas  por  aluno,  por  módulo,  ou   especificando  um  determinado  aluno  /módulo  (psi[alu][mod]);   §   Se  nota  <  10  é  colocado  0  na  célula  da  matriz  senão  é  colocada  a   nota  entre  10  e  20;   §  Deve  ser  possível  ter  acesso  a  informação  como:   ü   Módulos  em  atraso  de  um  aluno  qualquer;   ü   Média  dos  alunos  (ou  de  um  aluno);   ü   Média  de  Módulos  (ou  de  um  módulo);   ü   Módulos  com  maior  sucesso  /  dificuldades;   Módulos   Num    do    Aluno   Mód  1   Mód  2     …     0   13   0   -­‐1   1   12   0   -­‐1   2   14   15   -­‐1   …   …   …   -­‐1   12   0   0   -­‐1  
  • 28. Atividade  9  -­‐  Sugestões       Sugestão  de  Menus  :   1.  Preencher  Matriz   1.1  Por  Módulo   1.2  Por  Aluno   1.3  Aluno  /  Módulo   2.  Estatísticas  Alunos   2.1  Média  Todos  Alunos   2.2  Média  Aluno   2.3  Aluno  com  Mais  /  Menos  Módulos   2.4  Nota  Mais  Alta  /  Baixa  de  Aluno   3.  Estatísticas  Módulos   3.1  Média  Todos  Módulos   3.2  Média  Módulo   3.3  Módulo  com  Maior  /  Menor  Aproveitamento   3.4  Alunos  que  (Não)  Fizeram  Módulo   4.  Visualizar  Resultados   5.  Sair   Valores  da  Matriz:   1.  Inicialmente  tudo  a  -­‐1  (módulo  não   leccionado)   2.  0  representa  módulo  não  feito  (0  <  nota  <  10)   3.  Nota  entre  10  e  20,  é  a  nota  final  ao  módulo   Utilize  vectores  para  guardar  nomes  e   designação  de  módulos  e  não  os  apresentar   como  valores  entre  0  e  …     nomes[10]  =  {“Tiago”,  “Pedro”,  …,  “Nuno”}   modulos[5]  =  {“Mod1”,  “Mod2”,  …  “Mod5”}  
  • 29. Já  têm  utilizado  um  pseudo  tipo  de  dados,  string,  em  alguns  programas  elaborados  nas  aulas.  No  entanto,   será  esta  a  forma  mais  correcta  de  declarar  uma  string???   Não…   Uma  string  não  é  mais  que  um  vector  de  caracteres  (o  que  já  não  é  pouco),  pelo  que  deve  ser   declarada  como:   char  s[número  de  caracteres  máximo  da  string];     Outra  forma  de  criar  uma  string  é  inicializá-­‐la  aquando  da  sua  declaração:   char  s[  ]  =  {‘P’,  ‘S’,  ‘I’,  ‘0’};   Ou   char  s[  ]  =  “PSI”;     Notas:  Apesar  de  PSI  ter  3  caracteres,  a  string  terá  tamanho  4;   A  2ª  forma  não  precisa  do  ‘0’  no  final  porque  ao  usar  aspas  ele  é  colocado  no  final  de  forma  automática;   O  ‘0’  indica  o  fim  da  string,  uma  vez  que  se  pode  inicializar  string  com  mais  posições  que  as  utilizadas  …  
  • 30. Vejamos  então  o  seguinte  exemplo…     Uma  string  (str)  de  20  caracteres:   §   char  str[20]={’B’,’o’,’m’,’  ’,’d’,’i’,’a’,’  ’,’m’,’u’,’n’,’d’,’o’,’0’};   §   char  str[20]="Bom  dia  mundo";       Um  outro  aspecto  importante,  não  se  pode  fazer  atribuição  directa  de  uma  string  a  um  array:   str  =  “Bom  Dia  Mundo”;   str[  ]  =  “Bom  Dia  Mundo”;     Só  pode  ser  feita  na  declaração  (inicialização)  ou  e  uma  das  formas  que  vamos  ver  mais  à  frente.  
  • 31. Podem  ser  utilizadas  as  funções  normais  de  input  e  output  ,  ou  seja,  cin  e  cout…   Senão,  vejamos  a  seguinte  declaração:     char  s[8]  =  “PSI2013”;     A  instrução   cout  <<  s;     Faz  aparecer  /  escrever  no  ecrã:  PSI2013     O  mesmo  aconteceria,  mas  em  linhas  diferentes,  com:   for(i=0;  i  <  5;  i++)  {  //  caracter  a  caracter   cout  <<  s[i]  <<  endl;   }   Para  fazer  a  leitura  de  uma  string  para  um  array,  poderíamos  fazer:   cin  >>  s;  (Problema  a  nível  dos  espaços  entre  as  palavras)  
  • 32. Actividade  10:   Observe  com  atenção  o  seguinte  programa  e  a  utilização  de  strings  /  arrays  de  caracteres:   #include<iostream>   using  namespace  std;   Int  main()  {   char  discip[4]  =  “PSI”,  nome[20];   cout  <<  discip;   cout  <<  endl  <<  “Escreva  o  seu  nome:  ”  <<  endl;   cin>>nome;   cout  <<  discip  <<  “  …  Is  Simply  The  Best  …”  <<  endl;   for  (int  i=0;i<4;i++)  {   cout<<nome[i]<<“n”;    }   }  
  • 33. Será  que  a  implementação  anterior  tem  problemas???     Nunca  vos  enganamos,  mas  desta  vez  há  que  admitir  que  existem  pequenos  bugs…propositados…     §   Se  o  número  de  caracteres  introduzidos  for  superior  à  capacidade  do  array  ;   §   No  caso  de  o  utilizador  escrever  palavras  separadas  por  espaço,  o  programa  só  reconhece  a  primeira   (entende  o  espaço  como  separador  de  dados  diferentes).     Então,  como  podemos  manipular  estas  strings???   §   Existe  uma  biblioteca  que  contém  conjunto  de  funções  que  permitem  manipular  strings:   <string.h>   §   A  Maioria  das  funções  anteriores  partem  do  princípio  que  na  última  posição  "válida“  está  o  caracter   especial,  ou  seja,  null  ou  ’0’.  
  • 34. Pode  efectuar  a  leitura  a  partir  do  teclado  com  a  instrução      gets(string)-­‐>lê  string  a  partir  do  teclado  (incluir  a  biblioteca  <stdio.h>)     Actividade  11   :   Escreva  um  programa,  que  utiliza  a  instrução  anterior,  para  ler  o  nome  completo  da  pessoa  a   partir  do  teclado  e  que  depois  o  imprima  numa  mensagem  de  boas  vindas.   #include  <iostream>   #include  <stdio.h>   using  namespace  std;   main  ()  {   char  nome[100];   cout  <<  "n  Escreva  o  seu  nome:  ";   gets(nome);   system(“CLS");   cout  <<"Olá,  "  <<  nome  <<  endl;   system("PAUSE");   }   Para  ler  a  string  pode-­‐se   utilizar:   cin.getline(array,   tamanho)   Nota:  Ver  referências  …    
  • 35. Se  incluir  a  biblioteca  <string.h>  terá  acesso  a  um  conjunto  de  funções  que  operam  directamente  sobre   strings,  como  por  exemplo:     §   strcopy(str_destino,  str_origem)  -­‐>  copia  a  string  de  origem  para  a  string  de  destino,  ou  seja:   str_destino  =  str_origem;   §   strcat(str1,  str2)-­‐>  acrescenta  /  concatena  a  string2  à  string1;     §   strlen(str)-­‐>  mede  o  comprimento  da  string  e  retorna  o  número  de  caracteres  que  a  compõe.   §   strcmp(str1,str2)-­‐>  compara  as  duas  strings,  str1  e  str2.  Se  as  strings  forem  iguais,  devolve  o  valor  0.   Entre  outras…  
  • 36. Actividade  12:   Passe  o  programa  que  se  segue  e  observe  os  resultados  da  aplicação  das  funções  anteriores:     #include<iostream>   #include<string.h>   intmain  (  )  {   char  string1[50]  =  “Aula  de  PSI  10!!!!”,  string2[50];   int  n  ;   strcpy(string2,  string1);   if(strcmp(string2  ,string1)  ==  0)  {   cout  <<  “As  strings  sao  iguais…”  <<  endl;   }   n  =  strlen(string1)  ;   cout<<“A  string1  tem  “  <<  n  <<  “  caracteres.”  <<  endl  ;   system(“PAUSE”);   }    
  • 37. Actividade  13:   Implemente  um  programa,  em  que  utilizando  as  várias  funções  da  biblioteca  string,  e  que:     §   peça  ao  utilizador  para  inserir  uma  password  (utilizando  a  função  gets);   §   após  a  introdução  da  password,  o  ecrã  é  limpo;   §   é  dado  o  número  de  caracteres  da  password  inserida  pelo  utilizador;   §   se  password  do  utilizador:   §  igual  à  do  sistema,  devolve:  “Password  Correcta”;   §  senão,  devolve:  “Password  Inválida”;     Devem  ser  dadas  ao  utilizador  3  oportunidades  para  adivinhar  a  password,  senão  …  
  • 38. Actividade  14:   ¡  Elabore  um  programa  que  leia  suas  palavras  do  utilizador.  O  programa  deve  determinar  se   as  palavras  são  iguais.  Se  não  forem,  deve  determinar  qual  delas  tem  maior  número  de   caracteres.     Actividade  15:   ¡  Imagine  que  quer  saber,  para  fins  estatísticos,  qual  o  número  de  espaços  em  branco,  vogais   e  consoantes  que  estão  presentes  numa  frase  escrita  pelo  utilizador.  Faça  uma   implementação.   Actividade  16:   ¡  E  que  tal  inverter  uma  string  com  um  máximo  de  20  caracteres  que  o  utilizador  introduz???     Actividade  17:   ¡  Verifique  se  uma  palavra  é  um  palíndromo,  ou  seja,  palavra  que  se  lê  da  mesma  forma  da   direita  para  a  esquerda  e  da  esquerda  para  a  direita.  Por  exemplo:  ovo,  radar,  salas,   sopapos,…