Aula 18Aulas teóricas - notas...Aula 16Aula 17

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;
}

  • Concatenação de "strings", cola.c
  • Multiplicação de matrizes, mat1.c
  • "Sopa de letras", sopa.c

  • PC/PI - página reservada - versão 2005.02.08

    Aula 18Aulas teóricas - notas...Aula 16Aula 17