#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
#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
#include <stdio.h>
#define MAX 10
/*----- programa principal -----*/
int main( )
{ int i, n, max=0, a[MAX];
while ((scanf("%d",&n)!=EOF)&&(max<MAX-1))
{
i=max-1;
while ( (i>=0)&&(n<a[i]) ) { a[i+1]=a[i]; i--; }
a[i+1]=n;
max++;
}
for( i=0; i<max; i++)
{
printf("%d ",a[i]);
}
printf( "\n" );
return( 0 );
}
ficheiro: ex7.c autor: PRH versao de: 2001.03.15
#include <stdio.h>
#include <strings.h>
#define bool int
#define true 1
#define false 0
#define MAX 10
#define troca strcpy(sigla,pals[j]); strcpy(pals[j],pals[j-1]); strcpy(pals[j-1],sigla); aux=cambio[j]; cambio[j]=cambio[j-1]; cambio[j-1]=aux
typedef char str[20];
/*----- programa principal -----*/
int main( )
{ int i, j, ult, max=0;
float aux, cambio[MAX];
str sigla, pals[MAX];
bool hatrocas;
while ((max<MAX)&&(scanf("%s",&pals[max])!=EOF))
{
scanf("%f",&cambio[max]); max++;
}
i=0; ult=max-1; hatrocas=true;
while ((i<ult-1)&&hatrocas)
{ hatrocas = false;
for (j=ult; j>i; j--)
{
if (strcmp(pals[j],pals[j-1])<0) { hatrocas=true; troca; }
}
i++;
}
printf("%d\n",i);
for ( i=0; i<max; i++ )
{
printf("%s --> %f \n",pals[i],cambio[i]);
}
return( 0 );
}
ficheiro: ex7c.c autor: PRH versao de: 2001.03.22
#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
#include <stdio.h>
/*----- programa principal -----*/
int main( )
{int delta=4;
char ch;
ch = getchar();
while (ch != '.')
{ // ch += delta % 256;
ch = (ch + delta) % 256;
putchar(ch);
ch = getchar();
}
putchar((ch+delta)%256);
return(0);
}
ficheiro: ex3.c autor: PRH versao de: 2001.02.19
#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
#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
#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
#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
#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
#include <stdio.h>
#define true 1
#define false 0
int imax=20;
typedef int bool;
typedef char str[imax+2];
int match(str s1, str s2 )
{int i=0, j, fim, res;
bool enc=false;
fim = strlen(s1) - strlen(s2);
while ((i <= fim) && !enc){
j=0;
while((s2[j] == s1[i+j]) && (s2[j] != '\0')){
j++;
}
if(s2[j] == '\0') enc = true;
else i++;
}
if (enc) res = i;
else res = -1;
return(res);
}
/*----- programa principal -----*/
int main( )
{int p;
str linha, palavra;
while (scanf("%[^\n]",linha) != 1)
{ scanf("\n"); }
while (scanf("%[^\n]",palavra) != 1)
{ scanf("\n"); }
if((p=match(linha, palavra)) != -1)
printf("Ocorreu pela primeira vez na posicao %d\n", p);
else printf("Nao ocorreu\n");
return(0);
}
ficheiro: ex10.c autor: (TP1) versao de: 2001.03.27
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[50];
int match(str s1, str s2 )
{int i=0, j, fim, res=0;
bool enc=false;
fim = strlen(s1) - strlen(s2);
while (i <= fim) {
j=0;
while((s2[j] == s1[i+j]) && (s2[j] != '\0')){
j++;
}
if(s2[j] == '\0')
{printf("Ocorreu uma vez na posicao %d\n",i);
res++; }
i++;
}
return(res);
}
/*----- programa principal -----*/
int main( )
{int p;
str linha, palavra;
while (scanf("%[^\n]",linha) != 1)
{ scanf("\n"); }
while (scanf("%[^\n]",palavra) != 1)
{ scanf("\n"); }
if((p=match(linha, palavra)) >0 )
printf("Ocorreu %d vezes\n", p);
else printf("Nao ocorreu\n");
return(0);
}
ficheiro: ex10a.c autor: (TP1) versao de: 2001.04.03
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[50];
int match(str s1, str s2 )
{int i=0, j, fim, res=0;
bool enc=false;
fim = strlen(s1) - strlen(s2);
while (i <= fim) {
j=0;
while(((s2[j] == s1[i+j] )|| (s2[j]=='?')) &&
(s2[j] != '\0')){
j++;
}
if(s2[j] == '\0')
{printf("Ocorreu uma vez na posicao %d\n",i);
res++; }
i++;
}
return(res);
}
/*----- programa principal -----*/
int main( )
{int p;
str linha, palavra;
while (scanf("%[^\n]",linha) != 1)
{ scanf("\n"); }
while (scanf("%[^\n]",palavra) != 1)
{ scanf("\n"); }
if((p=match(linha, palavra)) >0 )
printf("Ocorreu %d vezes\n", p);
else printf("Nao ocorreu\n");
return(0);
}
ficheiro: ex10b.c autor: (TP1) versao de: 2001.04.03
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[50];
int match(str s1, str s2 )
{int i=0, j, fim, res=0;
bool enc=false;
fim = strlen(s1) ;
while (i <= fim) {
j=0;
while(((s2[j] == s1[i+j] )|| (s2[j]=='?')) &&
((s2[j] != '\0')&& (s2[j] != '*'))){
j++;
}
if((s2[j] == '\0')|| (s2[j] == '*'))
{printf("Ocorreu uma vez na posicao %d\n",i);
res++; }
i++;
}
return(res);
}
/*----- programa principal -----*/
int main( )
{int p;
str linha, palavra;
while (scanf("%[^\n]",linha) != 1)
{ scanf("\n"); }
while (scanf("%[^\n]",palavra) != 1)
{ scanf("\n"); }
if((p=match(linha, palavra)) >0 )
printf("Ocorreu %d vezes\n", p);
else printf("Nao ocorreu\n");
return(0);
}
ficheiro: ex10c.c autor: (TP1) versao de: 2001.04.03
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[50];
int match(str s1, str s2 )
{int i=0, j, k, fim, res=0;
bool enc=false;
fim = strlen(s1) ;
while ((i < fim) && !enc){
k=j=0;
while (((s2[j] == s1[i+k]) || (s2[j]=='?') || (s2[j] == '*')) &&
(s2[j] != '\0') && (s1[i+k] != '\0'))
{ if (s2[j] == '*')
{ while ((s1[i+k] != s2[j+1])&&(s1[i+k] != '\0')) {k++;} }
else { k++; }
j++;
}
if (s2[j] == '\0') { enc = true; }
else { i++; }
}
res = (enc)? i : -1;
return(res);
}
/*----- programa principal -----*/
int main( )
{int p;
str linha, palavra;
while (scanf("%[^\n]",linha) != 1)
{ scanf("\n"); }
while (scanf("%[^\n]",palavra) != 1)
{ scanf("\n"); }
if((p=match(linha, palavra)) != -1)
printf("Ocorreu pela primeira vez na posicao %d\n", p);
else printf("Nao ocorreu\n");
return(0);
}
ficheiro: ex10d.c autor: (PRH) versao de: 2001.04.17
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[50];
bool eseparador( char c){
bool res;
switch (c){
case ' ':
case '\t':
case '\n':
case '.':
case ',':
case '!':
case '?':
case ';':res = true;break;
default :res = false;
}
return( res);
}
/*----- programa principal -----*/
int main( )
{int i,conta=0;
str linha;
char ch;
while ((scanf("%[^\n]",linha)) != 1)
{ scanf("\n"); }
i=0;
while (eseparador(linha[i])) { i++; }
while (i < strlen(linha)) { conta++;
while(!eseparador(linha[i])) { i++;}
while (eseparador(linha[i])&& (i<strlen(linha))) { i++;}
}
printf("Ocorreram %d palavras \n",conta);
return(0);
}
ficheiro: ex11.c autor: PRH versao de: 2001.03.12
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[50];
char *tab2[100];
int split(char *frase, char c)
{ int conta=0,i;
str palavra;
while (*frase) /*enquanto nao atingir o fim de frase*/
{ i=0;
while(*frase!=c)
{ palavra[i++]=*(frase++); }
palavra[i]='\0';
// tab2[conta]=(char *)malloc(strlen(palavra)+1);
// strcpy(tab2[conta++],palavra);
tab2[conta++]=(char *) strdup(palavra);
frase++;
}
return(conta);
}
/*----- programa principal -----*/
int main( int argc, char *argv[])
{ int i,j,k;
str aux;
if (argc<3)
{ printf("Erro, numero de argumentos: %d\n",argc-1); }
else
{ i=split(argv[1],*argv[2]);
printf("Foram separadas %d palavras.\n",i);
for(j=0;j<i-1;j++){
for(k=j+1;k<i;k++){
if(strcmp(tab2[j],tab2[k])>0){
strcpy(aux,tab2[j]);
strcpy(tab2[j],tab2[k]);
strcpy(tab2[k],aux);}
}
}
for(j=0;j<i;j++){printf("%s\n",tab2[j]);}
}
return(0);
}
ficheiro: ex12.c autor: (TP1) versao de: 2001.05.08
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[50];
str tab1[100];
int split(char *frase, char c)
{ int conta=0,i;
str palavra;
while (*frase) /*enquanto nao atingir o fim de frase*/
{ i=0;
while(*frase!=c)
{ palavra[i++]=*(frase++); }
palavra[i]='\0';
printf("%s\n",palavra);
strcpy(tab1[conta++],palavra);
frase++;
}
return(conta);
}
/*----- programa principal -----*/
int main( int argc, char *argv[])
{ int i,j;
//for (i=1;i<argc;i++){printf("%s\n",argv[i]);}
if (argc<3)
{ printf("Erro, numero de argumentos: %d\n",argc-1); }
else
{ i=split(argv[1],*argv[2]);
printf("Foram separadas %d palavras.\n",i);
for(j=0; j<i; j++) { printf("%s \n",tab1[j]); }
}
return(0);
}
ficheiro: ex12a.c autor: (TP1) versao de: 2001.05.08
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
typedef char str[250];
/*----- programa principal -----*/
int main( )
{int i;
str linha, par1, par2, par3;
bool fim=false;
while ( !fim )
{
while ((scanf("%[^\n]",linha)) != 1)
{ scanf("\n"); }
if (sscanf(linha,"copia(%[^,],%[^)])",par1,par2)==2)
printf("reconheceu COPIA\n");
else if (sscanf(linha,"apaga(%[^)])",par1)==1)
printf("reconheceu APAGA\n");
else if (sscanf(linha,"junta(%[^,],%[^,],%[^)])",par1,par2,par3)==3)
printf("reconheceu JUNTA\n");
else if (strcmp(linha,"fim()")==0)
{ printf("reconheceu FIM\n"); fim=true; }
else printf("Comando Desconhecido \n");
}
return(0);
}
ficheiro: ex13.c autor: (TP1) versao de: 2001.05.08
#include<stdio.h>
#define coef p[grau]
#define MAX 20
typedef int tExp;
typedef float tCoef;
typedef tCoef tPoli[MAX];
tExp lerPoli1(tPoli p)
{
tExp exp, grau;
printf("\nQual o grau do polinomio? ");
scanf("%d", &exp);
grau = exp;
for( ;exp >= 0; exp--)
{
printf("\nIntroduza o coeficiente de expoente %d: ", exp);
scanf("%f", &p[exp]);
}
return (grau);
}
void escrevePoli1(tPoli p, tExp grau)
{
for( ;grau >= 0; grau--)
{
if(p[grau])
printf("\n%.1fx^%d", coef,grau);
}
printf("\n");
}
void derivaPoli1(tPoli p, tExp grau, tPoli d)
{
for( ;grau >0; grau--)
{
d[grau-1] = (coef*grau);
}
}
int main()
{
tPoli polinomio, derivada;
tExp grau;
grau = lerPoli1(polinomio);
escrevePoli1(polinomio, grau);
derivaPoli1(polinomio, grau, derivada);
escrevePoli1(derivada, grau-1);
return (0);
}
ficheiro: ex14a.c autor: (TP1) versao de: 2001.05.15
#include<stdio.h>
#define MAX 20
typedef int tExp;
typedef float tCoef;
typedef struct m {
tCoef coef;
tExp exp;
}tMono;
typedef tMono tPoli[MAX];
int lerPoli1(tPoli p)
{
tExp num, max;
printf("\nQuantos termos? ");
scanf("%d", &num);
max = num;
for( ;num > 0; num--)
{
printf("\nIntroduza o %d coeficiente e expoente: ", num);
scanf("%f,%d", &p[num-1].coef, &p[num-1].exp);
}
return(max);
}
void escrevePoli1(tPoli p, int num)
{
for( ; --num >= 0; )
{
if(p[num].coef)
{ printf("%.1fx^%d\n", p[num].coef,p[num].exp); }
}
}
int derivaPoli1(tPoli p, int comp, tPoli d)
{
tExp i,j;
for( i=j=0 ;i < comp; i++,j++ )
{
if (p[i].exp == 0) { i++; }
d[j].coef = (p[i].coef*p[i].exp);
d[j].exp = (p[i].exp)-1;
}
return(j);
}
int main()
{
tPoli polinomio, derivada;
tExp comp;
comp = lerPoli1(polinomio);
printf("Polinomio lido:\n");
escrevePoli1(polinomio, comp);
comp = derivaPoli1(polinomio, comp, derivada);
printf("Polinomio derivado:\n");
escrevePoli1(derivada, comp);
return (0);
}
ficheiro: ex14.c autor: (TP1) versao de: 2001.05.15
#include<stdio.h>
#define MAX 20
typedef int tExp;
typedef float tCoef;
typedef struct m {
tCoef coef;
tExp exp;
}tMono;
typedef struct lista{
tMono monomio;
struct lista *seg;
}tLista,*tPtr;
typedef tPtr tPoli;
/*---------funcoes auxiliares------------*/
tPoli criaMono(tCoef c,tExp e)
{
tPoli nova;
nova = (tPoli) malloc(sizeof(tLista));
nova->monomio.coef = c;
nova->monomio.exp = e;
return(nova);
}
tPoli insere(tPoli cel,tPoli lst)
{
if (lst==NULL)
lst = cel;
else {
if (cel->monomio.exp<lst->monomio.exp){
lst->seg=insere(cel,lst->seg);
}
else {
if (cel->monomio.exp>lst->monomio.exp){
cel->seg=lst;
lst = cel;}
else {
lst->monomio.coef=lst->monomio.coef+cel->monomio.coef;
}
}
}
return (lst);
}
/*---------funcoes principais------------*/
tPoli lerPoli1()
{
tPoli final=NULL;
tPoli novo;
tCoef coef;
tExp exp;
printf("\nIntroduza o coeficiente (0 para terminar)");
scanf("%f", &coef);
while(coef!=0)
{
printf("\nIntroduza o expoente ");
scanf("%d", &exp);
novo=criaMono(coef,exp);
final=insere(novo,final);
printf("\nIntroduza o coeficiente (0 para terminar)");
scanf("%f", &coef);
}
return(final);
}
//escrita: variante recursiva
void escrevePoli1(tPoli p)
{
if (p!=NULL){
printf("%4.1fx^%d\n", p->monomio.coef,p->monomio.exp);
escrevePoli1(p->seg);
}
}
//escrita: variante iterativa
void escrevePoli2(tPoli p)
{
while(p!=NULL){
printf("%4.1fx^%d\n", p->monomio.coef,p->monomio.exp);
p=p->seg;
}
}
tPoli derivaPoli1(tPoli p)
{
tPoli d=NULL;
tCoef coef;
tExp exp;
if (p!=NULL){
if (p->monomio.exp != 0) {
coef = (p->monomio.coef*p->monomio.exp);
exp = (p->monomio.exp)-1;
d=criaMono(coef,exp);
d->seg=derivaPoli1(p->seg);}
}
return(d);
}
/*---------funcao main------------*/
int main()
{
tPoli polinomio, derivada;
tExp comp;
polinomio = lerPoli1();
printf("Polinomio lido:\n");
escrevePoli1(polinomio);
derivada = derivaPoli1(polinomio);
printf("Polinomio derivado:\n");
escrevePoli1(derivada);
return (0);
}
ficheiro: ex14b.c autor: (TP1) versao de: 2001.05.22
#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
all: teste.c gcc -o teste teste.c -lcurses
ficheiro: ncurses.mak autor: Alberto versao de: 2001.04.06
#include <stdio.h>
typedef char str[100];
char *palindromizador( str orig, int i, int j )
{ char *p, *p1, *p2;
if ( i==j )
{ p = (char *)malloc(2); sprintf( p, "%c\0", orig[i] ); }
else if ( j-i==1 )
{ if ( orig[i]==orig[j] )
{ p = (char *)malloc(3); sprintf( p, "%c \0", orig[i] ); }
else
{ p = (char *)malloc(3); sprintf( p, "%c%c\0", orig[i],orig[j] ); }
}
else
{ if ( orig[i]==orig[j] )
{ p1 = palindromizador( orig,i+1,j-1 );
p = (char *)malloc(strlen(p1)+1);
sprintf( p, "%c%s", orig[i],p1 );
}
else
{ p1 = palindromizador( orig,i+1,j );
p2 = palindromizador( orig,i,j-1 );
if ( strlen(p1)<=strlen(p2) )
{ p = (char *)malloc(strlen(p1)+1);
sprintf( p, "%c%s", orig[i],p1 );
}
else
{ p = (char *)malloc(strlen(p2)+1);
sprintf( p, "%c%s", orig[j],p2 );
}
}
}
return( p );
}
/*----- programa principal -----*/
int main( )
{ int i,conta=0;
str pal;
char *palindroma;
while ((scanf("%s",pal)) != 1) { ; }
palindroma=palindromizador( pal, 0, strlen(pal)-1 );
printf("Um possivel palindroma sera: ");
for (i=0; (palindroma[i]!='\0'); i++)
{ if (palindroma[i]!=' ') { putchar(palindroma[i]); } }
for (i=i-2; (i>=0); i--) { putchar(palindroma[i]); }
printf("\n");
return(0);
}
ficheiro: cnpl01b.c autor: PRH versao de: 2001.04.29
#include <stdio.h>
typedef char str[100];
char *palindromizador( str p1 ){
char *p2;
int i, j, k;
p2=(char *)malloc(2*strlen(p1));
k=i=0; j=strlen(p1)-1;
while ( i < j )
{ if ( p1[i]==p1[j] )
{ p2[k++]=p1[i++]; j--; }
else { if ( ((i+1)<j)&&(p1[i+1]==p1[j]) )
{ p2[k++]=p1[i++]; }
else { p2[k++]=p1[j--]; }
}
}
if (i==j)
{ p2[k++]=p1[i++]; for (j=k-1; j; j--) { p2[k++]=p2[j-1]; } }
else //(i>j)
{ for (j=k; j; j--) { p2[k++]=p2[j-1]; } }
p2[k]='\0';
return( p2 );
}
/*----- programa principal -----*/
int main( )
{ int i,conta=0;
str pal;
char *palindroma;
while ((scanf("%s",pal)) != 1) { ; }
palindroma=palindromizador( pal );
printf("Um possivel palindroma sera: %s \n",palindroma);
return(0);
}
ficheiro: cnpl01.c autor: PRH versao de: 2001.04.14
#include <stdio.h>
#define true 1
#define false 0
typedef int bool;
#define MAXL 9
#define MAXC 5
#define Moedas 7
#define InicL 5
#define InicC 4
/* #define InicC 3 */
typedef int tTabuleiro[MAXL][MAXC];
typedef int tProxMove[4];
tProxMove IncrL={-1,0,+1,0};
tProxMove IncrC={0,-1,0,+1};
tTabuleiro Tab={{0,0,0,0,-1},
{-1,0,0,0,0},
{0,0,0,-1,0},
{0,-1,0,0,0},
{0,0,0,0,0},
{0,-1,0,0,0},
{0,0,0,0,0},
{0,0,-1,0,0},
{0,0,0,0,-1}
};
bool valido( int i, int j ){
return( (i>=0)&&(i<MAXL)&&(j>=0)&&(j<MAXC)&&(Tab[i][j]<=0) );
}
bool comeMoedas( int i, int j, int m, int vez ){
int ant, tenta;
int i1, j1;
bool suc;
if ( Tab[i][j]==-1 ) { m--; }
ant=Tab[i][j]; Tab[i][j]=vez++;
if ( m==0 )
{ suc=true; }
else
{ suc=false;
tenta=0;
while (( tenta < 4 )&&( !suc ))
{ i1=i+IncrL[tenta]; j1=j+IncrC[tenta];
if ( valido(i1,j1) )
{ suc=comeMoedas(i1,j1,m,vez); }
tenta++;
}
if (!suc) Tab[i][j]=ant;
}
return( suc );
}
/*----- programa principal -----*/
int main( )
{ int i,j,conta=0;
if (comeMoedas( InicL, InicC, Moedas, 1 ) )
{ printf("Terminou com Sucesso \n");
for(i=0; i<MAXL; i++)
{ for(j=0; j<MAXC; j++) { printf("%2d ",Tab[i][j]); }
printf("\n");
}
}
else { printf("Nao Conseguiu Terminar com Sucesso \n"); }
return(0);
}
ficheiro: cnpl03.c autor: PRH versao de: 2001.05.06
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
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: 03 de Abril de 2001