Tė thashė qė kodi mė lart ėshtė i papranueshėm pėr mėsimdhėnie. Nqs ai do ta shkruante programin pėr qejf, punė e tij, por kodi nuk u jepet studentėve nė atė gjėndje.
Vura re se ky profesori yt i ka qejf ciklet for, aq shumė sa i pėrdor edhe nė vend tė while. A nuk ėshtė mė e llogjikshme tė pėrdorėsh while nė vėnd tė
for (; *s; s++) ?
Kodin qė hedh nė forum e komentoj mė shumė seē duhet sepse ka fillestarė qė e lexojnė dhe kanė pyetje. Kritikat pėr profesorin tėnd nuk i kisha tek komentet por tek mėnyra si e ka shkruar kodin. Shiko kodin e ndonjė programi profesional pėr tė parė ndryshimin, ose shko tek MSDN e shiko shembujt.
Shikoje ndryshimin qė bėn vetėm formatimi uniform i kodit. Ti si nxėnės kė do zgjidhje?
P.S - Ato komentet e tepėrta kam mėsuar t'i shmang se nuk i pėrmbahen temės dhe i shkruan nga vrulli. Pėrmbaje gėzimin kur hyn nė forum.
Kodi PHP:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define BUCKET_SIZE 100
#define NOT_USED(c) (Characters[c] = -1)
#define PUT_VALUE(c, x) (Characters[c] = (x))
#define GET_VALUE(c) (Characters[c])
#define IS_NOT_USED(c) (Characters[c] == -1)
char * The_Formula;
int Characters[128];
calculate(operator, left_value, right_value)
{
switch (operator)
{
case '&' :
return(left_value && right_value);
break;
case '|' :
return(left_value || right_value);
break;
case '>' :
return(!left_value || right_value);
break;
case '=' :
return(left_value == right_value);
break;
}
}
int parse(char * s) /* consumes the WFPLF, leaves now at the unconsumed character */
{
register int current_char;
int left_value;
int right_value;
int operator;
static char * now;
if (s != NULL)
now = s; /* else now remains as it is => presumably it is a recursive call */
current_char = *now;
now++; /* immediatelly consume this char:may be further recursive parse() will occur*/
if (islower(current_char))
return GET_VALUE(current_char);
else
{
switch (current_char)
{
case '-' :
return (!parse(NULL));
break;
case '(' :
left_value = parse(NULL);
operator = *now++; /* consume the operator */
right_value = parse(NULL);
now++; /* consume the ')' */
return (calculate(operator, left_value, right_value));
break;
}
}
}
char * read_in_WFPLF(void)
{
int c;
int counter = 0;
long int mem_size_now = 0;
char * formula = NULL;
char * position;
while((c = getchar()) != EOF)
{
if (!isspace(c))
{
if (!counter)
{
mem_size_now += BUCKET_SIZE; /* the following statement may change */
formula = (char *) realloc(formula, mem_size_now); /* content of formula*/
position = formula + (mem_size_now - BUCKET_SIZE);
counter = BUCKET_SIZE-1;
}
*position = c;
position++;
counter--;
}
}
*position = 0;
return formula;
}
int preprocess_WFPLF(char * s) /* finds the used letters in WFPLF stores them with 0, returns */
{ /* count of letters */
int i;
int letter_count = 0;
for (i = 'a'; i <= 'z'; i++)
NOT_USED(i);
for (; *s; s++)
{
if (islower(*s) && IS_NOT_USED(*s))
{
PUT_VALUE(*s, 0);
letter_count++;
}
}
return letter_count;
}
void set_instance(long int n, int letter_count)
{
int i = 'z';
for(; letter_count; letter_count--, n >> = 1) /* >> can be subst. by (/2) */
{
for (; IS_NOT_USED(i); i--); /* Find next used character */
PUT_VALUE (i, n&1); // printf("[%c:%d]", i, n&1);
i--;
} /* we have used this character */
}
void print_heading()
{
int i;
for (i = 'a'; i <= 'z'; i++)
{
if (!IS_NOT_USED(i))
printf("%c ", i);
}
printf("R\n");
}
void print_truth_value(int i)
{
printf("%c ", i ? 'T' : 'F');
}
void print_instance()
{
int i;
for (i = 'a'; i <= 'z'; i++)
{
if (!IS_NOT_USED(i))
print_truth_value(GET_VALUE(i));
}
}
main(void)
{
int letter_count;
long int instance;
The_Formula = read_in_WFPLF();
letter_count = preprocess_WFPLF(The_Formula);
// For debug: printf("%s << contains %d vars\n", The_Formula, letter_count);
print_heading();
for (instance = (1<<letter_count) - 1; instance >= 0; instance--) /* << can be subst. by (2*) */
{
set_instance(instance, letter_count);
// For debug: printf("%ld.", instance);
print_instance();
print_truth_value(parse(The_Formula));
printf("\n");
}
return (0);
}
Krijoni Kontakt