Paradigmas da Programação II

Ano Lectivo: 01/02 (2º semestre)

Código C relativo aos Exemplos de problemas
propostos e resolvidos nas Aulas Teórico-Práticas e Outros Casos


Exercícios das Aulas Teórico-Práticas

Ciclos em C (aula TP1) (ex1.c)

#include <stdio.h>

/*----- programa principal -----*/  
int main( )
{int n; 
 int conta=0, ant=0;

  printf("Inicio da Execucao do 1. Exemplo \n"); 
  scanf("%d",&n); 
  while (n>0)
    { if ((n%2)==0) { conta++; }
      if (n!=ant) { printf("%d ",n); } 
      ant = n;
      scanf("%d",&n); 
    }
  printf("\nO Numero de Pares e: %d \n",conta); 
  printf("Fim da Execucao do 1. Exemplo \n"); 
  return(0);
}

                                                      

ficheiro: ex1.c autor: PRH versao de: 2001.02.13

  • uso do printf() e do scanf()
  • uso de condicoes
  • uso de ciclos diversos

    Codificador de caracteres em C, versao 2 (aula TP1) (ex31.c)

    #include <stdio.h>
    
    /*----- programa principal -----*/  
    int main( )
    {int delta=4; 
     int ch;
      
      while ((ch = getchar()) != EOF)
        { 
          ch = (ch + delta) % 256;
          putchar(ch); 
        }
      return(0); 
    }
    
                                                          
    

    ficheiro: ex31.c autor: PRH versao de: 2001.03.12

  • a leitura da Seq termina com Fim de Ficheiro (Ctrl-D) "EOF"

    DesCodificador de caracteres em C (aula TP1) (ex4.c)

    #include <stdio.h>
    
    /*----- programa principal -----*/  
    int main( )
    {int delta=4; 
     char ch;
    
      ch = getc(stdin); 
      while (ch != (('.'+delta)%256))
        { 
          ch = (ch - delta);
          if (ch < 0) { ch = (256 + ch); }
          putc(ch,stdout); 
          ch = getc(stdin); 
        }
      putc('.',stdout); 
      return(0); 
    }
    
                                                          
    

    ficheiro: ex4.c autor: PRH versao de: 2001.02.19

  • uso do putc() e do getc()
  • uso de caracteres e operacoes numericas com caracteres
  • a leitura da Seq termina com "."

    Processamento de Strings em C (aula TP1) (ex6.c)

    #include <stdio.h>
    
    typedef char str[50];
    
    /*----- programa principal -----*/  
    int main( )
    {int erro,i; 
     str linha;
     char ch;
    
      while ((erro = scanf("%[^\n]",linha)) != 1) 
         { scanf("\n"); }
      scanf("\n%c",&ch);
      for (i=0; (i<strlen(linha)&&(linha[i]!=ch)); i++) { ;} 
      if (linha[i]==ch) {printf("\nposicao: %d\n",i+1);}
         else {printf("\nnao existe!\n");}
      return(0); 
    }
    
                                                          
    

    ficheiro: ex6.c autor: PRH versao de: 2001.03.12

  • definicao de Tipos
  • uso de arrays de caracteres para implementar strings
  • uso de expressoes regulares para ler 1 linha com scanf()
  • uso da funcao strlen()

    Processamento de Strings em C (aula TP1) (ex9.c)

    #include <stdio.h>
    
    typedef char str[50];
    
    /*----- programa principal -----*/  
    int main( )
    {int i=0, conta[256]; 
     str linha;
     char ch;
    
      for(i=0; i<256;i++){
    	conta[i]=0;
      }
      while (scanf("%[^\n]",linha) != 1) 
         { scanf("\n"); }
      i = 0; 
      while(i<strlen(linha)){
    	conta[linha[i++]]++;
      }
      for(i='a'; i<='z'; i++){
    	printf("%c--%d\n", i, conta[i]);
      }
      return(0); 
    }
    
                                                          
    

    ficheiro: ex9.c autor: Bruno(TP1) versao de: 2001.03.21

  • definicao de Tipos
  • uso de arrays de caracteres para implementar strings
  • uso de expressoes regulares para ler 1 linha com scanf()
  • uso da funcao strlen()
  • uso de array de contadores indexado por caracteres

    Outros Exemplos

    Exemplos das Aulas Teóricas

    Ciclos em C (aula T) (ex2.c)

    #include <stdio.h>
    
    /*----- programa principal -----*/  
    int main( )
    {int n; 
     int i;
    
      printf("Inicio da Execucao do 2. Exemplo \n"); 
      scanf("%d",&n); 
      while (n>0)
        { for (i=1; i<=n; i++) { printf("%d ",n); }
          scanf("%d",&n); 
        }
      printf("\n"); 
      printf("Fim da Execucao do 2. Exemplo \n"); 
      return(0);
    }
    
                                                          
    

    ficheiro: ex2.c autor: PRH versao de: 2001.02.14

  • uso do scanf()
  • uso de ciclos diversos

    Arrays e Funcoes Variaveis em C (aula T) (ex5.c)

    #include <stdio.h>
    
    #define MAX 10
    
    /*----- funcoes auxiliares -----*/  
    int par( int n )  { return( n%2 == 0 ); }
    int impar( int n ){ return( n%2 != 0 ); }
    
    /*----- programa principal -----*/  
    int main( )
      { int i=0, a[MAX], max;
        int (*f)( int ); 
        
        scanf("%d",&a[i]); 
        max = a[i++];
        while( i<MAX )
          { 
            scanf("%d",&a[i]);
            if ( a[i]>max ) { max=a[i]; }
            i++;
          }
        if ( par(max) ) { f=par; } else { f=impar; }
        for( i=0; i<max; i++)
          {
            if ( (*f)(a[i]) ) { printf("%d ",a[i]); }
          }
        return( 0 ); 
      } 
    

    ficheiro: ex5.c autor: PRH versao de: 2001.03.10

  • uso de arrays
  • uso de funcoes variaveis
  • calculo do Maximo de uma sequencia

    Processamento de Valores Enumerados (aula TP1) (exp1.c)

    #include<stdio.h>
    
    typedef enum dias {
    	Dom= 1,
    	Seg, 
    	Ter,
    	Qua,
    	Qui,
    	Sex,
    	Sab
                      }  Dias_Semana;
    
    int main()
    {
    	Dias_Semana dia;
    
    	printf("Insira um dia da semana (1 a 7): ");
    	scanf("%d", &dia);
    	switch(dia)
    	{
    		case Seg:
    			printf("E Segunda-Feira.\n");
    			break;
    		case Ter:
    			printf("E Terca-Feira.\n"); 
    			break;
    		case Qua:
    			printf("E Quarta-Feira.\n");
    			break;
    		case Qui:
    			printf("E Quinta-Feira.\n");
    			break;
    		case Sex:
    			printf("E Sexta-Feira.\n");
    			break;
    		case Sab:
    			printf("E Sabado.\n");
    			break;
    		case Dom:
    			printf("E Domingo.\n");
    			break;
    		default:
    			printf("");
    	}
    
    	return (0);
    	
    }
    

    ficheiro: exp1.c autor: Bruno(TP1) versao de: 2001.03.21

  • definicao de Tipo Enumerado
  • uso e construcao condicional SWITCH

    Exemplo de uso das funções NCURSES

    Teste do uso com NCurses (ncursestst.c)

    #include <curses.h>
    
    int main(void) {
    	// Declare a character variable but INT (because curses want it)
    	int c;
    
    	// The first three initialization asked from curses
    	initscr();
    	cbreak();
    	noecho();
    
    	// Note that printf DOES NOT work
    	printw("Press 'y' to quit...\n");
    
    	// Look while c not 'y'
    	while((c = getch())!='y')
    		printw("%c is not a 'y'...\n",c);
    
    	// Make echo for shell, again
    	endwin();
    }
    

    ficheiro: ncursestst.c autor: Alberto versao de: 2001.04.06

    Makefile para uso do teste com NCurses (ncurses.mak)

    all: teste.c
    	gcc -o teste teste.c -lcurses
    

    ficheiro: ncurses.mak autor: Alberto versao de: 2001.04.06


    Exemplos de Makefiles

    ex1.mak (ex1.mak)

    ex1: ex1.o 
    	gcc -o ex1  ex1.o  
    
    ex1.o: ex1.c 
    	gcc  -c   ex1.c
    
    relex1: relex1.tex ex1.c
    	latex relex1
    	latex relex1
    	dvips -o relex1.ps relex1
    	ghostview relex1.ps
    
    clear: 
    	rm  -f ex1.o relex1.aux relex1.log relex1.dvi relex1.toc
    
    

    ex34.mak (ex34.mak)

    ex3: ex3.o 
    	gcc -o ex3  ex3.o  
    
    ex3.o: ex3.c 
    	gcc  -c   ex3.c
    
    ex4: ex4.o 
    	gcc -o ex4  ex4.o  
    
    ex4.o: ex4.c 
    	gcc  -c   ex4.c
    
    testeA: ex3 ex4
    	ex3 >a
    	ex4 <a
    
    testeB: ex3 ex4
    	ex3 | ex4 
    
    clean: 
    	rm -f ex3.o ex4.o
    
    


    author: prh@di.uminho.pt; 
    Last modified: 19 de Março de 2002