Archivos de la categoría ‘EP’

palabras, palabras, palabras… tan sólo palabras (Lissette Alvarez)

Noviembre 28, 2007

// palabras.c, funciones manejan palabras

typedef struct {
int numPal; /* numero de palabras */
char pals[100][50]; /* palabras */
} PALS;

int numCar(char c[]) {
/* numero caracteres en frase */
int ln = 0; /* longitud */
char nul = ”; /* nulo */
while (c[ln++] != nul);
return –ln;
}

int numPal(char c[]) {
/* numero ‘palabras’ frase */
int np = 0; /* numero de palabras */
int p = 0; /* posicion en frase */
char nul = ”; /* nulo */
char esp = ‘ ‘; /* espacio en blanco */
int ant = 1, act; /* anterior, actual ( 1 = es espacio, 0 = no */
while (c[p] != nul) {
act = (c[p] == esp) ? 1 : 0;
if (ant && !act) np++;
ant = act;
p++;
}
return np;
}

void ignEsp(PALS *pals, char c[]) {
/* ignora espacios (y separa ‘palabras’ */
int p = 0; /* posicion en frase */
int nl; // numero de letras en palabra actual */
char nul = ”; /* nulo */
char esp = ‘ ‘; /* espacio en blanco */
pals->numPal = -1; /* numero de palabras */
int ant = 1, act; /* anterior, actual ( 1 = es espacio, 0 = no */
while (c[p] != nul) {
act = (c[p] == esp) ? 1 : 0;
if (ant && !act) {
pals->numPal++;
pals->pals[pals->numPal][0] = c[p];
nl = 1;
}
if (!ant && !act) pals->pals[pals->numPal][nl++] = c[p];
if (!ant && act) pals->pals[pals->numPal][nl] = nul;
ant = act;
p++;
}
pals->numPal++;
}

int siLet(char c) {
/* si c es una letra */
int sl = 0; /* si letra (1 = si, 0 = no) */
char lts[ ] = “aáAÁbBcCdDeéEÉfFgGhHiíIÍjJkKlLmMnNñÑoóOÓpPqQrRsStTuúüUÚÜvVwWxXyYzZ”;
int p = 0; /* posicion en lts */
char nul = ”; /* nulo */
int hll = 0; /* hallado */
while (!hll && lts[p] != nul) {
if (c == lts[p]) hll = 1;
p++;
}
return hll;
}

void sepPal(PALS *pals, char c[]) {
/* separa palabras (solo letras) */
int p = 0; /* posicion en frase */
int nl; // numero de letras en palabra actual */
char nul = ”; /* nulo */
pals->numPal = -1; /* numero de palabras */
int ant = 0, act; /* anterior, actual ( 1 = es letra, 0 = no */
while (c[p] != nul) {
act = siLet(c[p]);
if (!ant && act) {
pals->numPal++;
pals->pals[pals->numPal][0] = c[p];
nl = 1;
}
if (ant && act) pals->pals[pals->numPal][nl++] = c[p];
if (ant && !act) pals->pals[pals->numPal][nl] = nul;
ant = act;
p++;
}
pals->numPal++;
}

int main() {
PALS pl;
int p;
sepPal(&pl, ” ??intec, ***tu ***mejor decisión…”);
for (p = 0; p < pl.numPal; p++)
printf(“%s\n”, pl.pals[p]);
printf(“\n”);
system(“pause”);
return 0;
}

Reflexión: ¿Se podrían usar rutinas como éstas para crear interfases en modo de texto más ‘inteligentes’, digamos como oráculos que no impongan un esuqme visual tan cargado y estructurado? Se puede opinar sobre esto en cualquiera de las respectivas bitácoras.

ecabrera.

par(), varias versiones de una misma función

Noviembre 23, 2007

int par(int n) {
if (n % 2 == 0)
return 1;
else
return 0;
}

int par(int n) {
int s;
if (n % 2 == 0)
s = 1;
else
s = 0;
return s;
}

int par(int n) {
int s = 0;
if (n % 2 == 0) s = 1;
return s;
}

int par(int n) {
int s = 0;
if (n % 2) s = 1;
return s;
}

int par(int n) {
return !(n%2);
}

Moraleja: Pueden haber muchas formas de resolver un mismo problema.