Aula 17
Nota. no fundo desta página indicam-se soluções possíveis para alguns
dos problemas propostos.
------------------------------
Exercícios de aulas anteriores
Vectores com 2 índices
------------------------------
--------------------------
Um exercício de strings...
--------------------------
Escreva a função
void cola(char s[],char t[])
O string s (que se supões ter espaço suficiente...) fica
com s seguido de t (que não é modificado)
s="aiai", t="pi!" ==> s="aiaipi!", t="pi!"
Método:
1 encontrar o fim de s
2 copiar t para aí
3 colocar 0 no fim de s.
a i a i \0 p i ! \0
^ ^
1: a i a i \0 p i ! \0
^ ^
2: a i a i p i ! p i ! \0
^ ^
3: a i a i p i ! \0 p i ! \0
^ ^
a) Interpretar a parte do programa dada
b) Escrever a função pedida
c) Uma chamado do tipo "cola(s,s)" (s=t) funciona correctamente?
d) Altere o programa por forma a "colar" strings que podem ter
espaços.
void cola(char s[],char t[]){
// Escreva esta função!
}
//----------------------------------
#define MAX 100
int main(){
char a[MAX], b[MAX];
scanf("%s",a);
scanf("%s",b);
cola(a,b);
printf("%s\n",a);
return 0;
}
----------------------------------
Vectores com 2 (e mais...) índices
----------------------------------
Na realidade já aprendemos matrizes a 2 dimensões (=Vectores com 2
índices):
int main(int np, char *par[]) ou
int main(int np, char par[][])
Por exemplo, a 3a letra do 4o parâmetro, se existir, é...
Experimente!
---------
Exercício
---------
Escreva uma calculadora com as operações +, -, *, / que funciona da
forma indicada
calc 12 + 100
112
Erros: argc errado,
sscanf dá 0, operação errada...
Variações e comentários
o O uso da instrução switch é útil!
o Em vez de sscanf escrever uma função
int (char *s)
que retorna o string s convertido para inteiro.
- Se s não for constituído só por dígitos, o valor retornado deve
ser ERRO (definido com #define ERRO -1000000)
o Para o operador pode usar par[2][0] ('+', '-', ...) ou chamar
strcmp(par[2],'+'),etc. Esta última opção é pior!
-----------------------------
Matrizes a 2 e mais dimensões
-----------------------------
Exercício, multiplicação de matrizes
------------------------------------
Exemplo de definição, inicialização e uso
Completar a função mult.
Observe a definição damatriz na função.
-------------------------------------
#define N 5
void mult(int n,int m[][N],int x[],int y[]){
// escreva esta função
....
}
//--------------------------------------------
int main(){
int i,
a[] ={1,2,3,4,5},
r[N],
q[][N]={{1,0,0,0,0},
{0,1,1,0,0},
{0,0,1,1,0},
{0,0,0,1,0},
{0,0,0,0,1}};
// Operação r=q*a
mult(N,q,a,r);
for(i=0;i<N;i++)
printf("%d ",r[i]);
printf("\n");
return 0;
}
------------
Exercício...
------------
Máximos locais...
------------
Exercício...
------------
Procura de palavras na horizontal, vertical, diagonal (para a frente
e para trás).
a) Interpretar a parte do programa dada
b) Escrever a função pedida
c) Dar possíveis sugestões para uma maior clareza e/ou eficiência do
programa
---------------
#define N 5
#define DIRS 8
int
dx[]={1,1,0,-1,-1,-1,0,1},
dy[]={0,1,1,1,0,-1,-1,-1};
//-----------------------------
void proc(char pal[],char sopa[][N],int i, int j,int d){
// Escrever esta função!
}
//-----------------------------
void procura(char pal[],char sopa[][N],int d){
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
proc(pal,sopa,i,j,d);
}
//-----------------------------
int main(){
int d;
char
sopa[][N]={
{'b','a','b','a','r'}, // 0
{'c','a','b','a','r'}, // 1
{'d','a','b','a','r'}, // 2
{'b','a','b','a','r'}, // 3
{'r','a','b','a','b'} // 4
},
pal[N];
scanf("%s",pal);
for(d=0;d<DIRS;d++)
procura(pal,sopa,d);
return 0;
}
PC/PI - página reservada - versão 2005.02.08