Skip to content

Commit 43bcc8e

Browse files
committed
terça-feira apos lab
2 parents 52f92d8 + 3bbf973 commit 43bcc8e

8 files changed

+54
-89
lines changed

9.sol1

+2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
0
22

3+
6
4+

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
CC = gcc #compiler
44

55
# flags para compilar
6-
CFLAGS= -Wall -std=c99 -O3
6+
CFLAGS= -Wall -std=c99 -O3 -g
77
TARGET= RoaP_Int
88
# gerar variáveis com listas ficheiros de cada tipo para usar nas várias regras
99
SRCS=$(wildcard *.c)

Processor.c

+3-42
Original file line numberDiff line numberDiff line change
@@ -95,50 +95,11 @@ int mode_A5(int a, int b, int **labyrinth, int L, int C)
9595
return 0;
9696
}
9797

98-
/*
99-
int traversed(int x, int y, int **traversed_path, int L, int C, int *size_traversed)
98+
int mode_A6(int a, int b, int c, int d)
10099
{
101-
int i;
102-
for (i = 0; i < (*size_traversed); i++)
103-
{
104-
if (x == traversed_path[i][0] && y == traversed_path[i][1]) return 1;
105-
}
106-
return 1;
107-
}
108-
109-
int try(int x,int y, int **labyrinth, int **traversed_path, int x_finish, int y_finish, int *size_traversed, int L, int C)
110-
{
111-
if (x < 0 || y < 0 || x > L-1 || y > C-1) return 0;
112-
if (traversed(x, y, traversed_path, L, C, size_traversed) || labyrinth[x][y] > 0) return 0;
113-
//colocar no traversed_path
114-
labyrinth[x][y] = -3;
115-
(*size_traversed)++;
116-
if (x == x_finish && y == y_finish)
117-
{
118-
//tirar do traversed_path
119-
return 1;
120-
}
121-
else
122-
{
123-
try(x - 1, y, labyrinth, traversed_path, x_finish, y_finish, size_traversed, L, C);
124-
try(x + 1, y, labyrinth, traversed_path, x_finish, y_finish, size_traversed, L, C);
125-
try(x, y + 1, labyrinth, traversed_path, x_finish, y_finish, size_traversed, L, C);
126-
try(x, y - 1, labyrinth, traversed_path, x_finish, y_finish, size_traversed, L, C);
127-
}
128-
//tirar dos traversed_path
129100
return 0;
130-
131-
132101
}
133102

134-
135-
int mode_A6(int a, int b, int l, int c, int **labyrinth, int **traversed_path, int *size_traversed, int L, int C)
136-
{
137-
138-
return try(a, b, labyrinth, traversed_path, l, c, size_traversed, L, C);
139-
return 0;
140-
}
141-
*/
142103
int **allocate_table(int **labyrinth, int C, int L)
143104
{
144105
int i;
@@ -148,7 +109,7 @@ int **allocate_table(int **labyrinth, int C, int L)
148109
return labyrinth;
149110
}
150111

151-
int choose_test(char *test_mode, int **labyrinth, int L, int C, int a, int b)
112+
int choose_test(char *test_mode, int **labyrinth, int L, int C, int a, int b, int c, int d)
152113
{
153114
if (strcmp(test_mode, "A1") == 0)
154115
return mode_A1(a, b, labyrinth, L, C);
@@ -161,6 +122,6 @@ int choose_test(char *test_mode, int **labyrinth, int L, int C, int a, int b)
161122
if (strcmp(test_mode, "A5") == 0)
162123
return mode_A5(a, b, labyrinth, L, C);
163124
if (strcmp(test_mode, "A6") == 0)
164-
return mode_A6(a, b, l, c, labyrinth, traversed_path, &size_traversed, L, C);
125+
return mode_A6(a, b, c, d);
165126
return 0;
166127
}

Proj_Int.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ int mode_A2(int a, int b, int **labyrinth, int L, int C);
1313
int mode_A3(int a, int b, int **labyrinth, int L, int C);
1414
int mode_A4(int a, int b, int **labyrinth, int L, int C);
1515
int mode_A5(int a, int b, int **labyrinth, int L, int C);
16-
//int mode_A6(int a, int b);
17-
int choose_test(char *test_mode, int **labyrinth, int L, int C, int a, int b);
16+
int mode_A6(int a, int b, int c, int d);
17+
int choose_test(char *test_mode, int **labyrinth, int L, int C, int a, int b, int c, int d);
1818
void print_table(int **labyrinth, int L, int C);
1919
void free_labyrinth(int **labyrinth, int C);
20-
void write_output(FILE *fp_out, int result);
20+
void write_output(FILE *fp, int result);
2121
void str_paste(char *name, char *filename, int num_chars);
2222
int find_last_period(char *filename);
23-
int **allocate_table(int **labyrinth, int C, int L);
2423
char *allocate_outputname(char *out_name, char *in_name);
25-
void error(FILE *fp);
26-
FILE *open_outputfile(FILE *fp_out, char *filename);
24+
int **allocate_table(int **labyrinth, int C, int L);
2725
FILE *open_inputfile(FILE *fp_in, char *filename);
26+
FILE *open_outputfile(FILE *fp_out, char *filename);
27+
void error(FILE *fp_in, FILE *fp_out, char *filename_out, char *filename_in);
2828
#endif

Read.c

+21-23
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010

1111
void Read_input_file(char *filename)
1212
{
13-
// int **traversed_path = NULL;
14-
//int *size_traversed = NULL;
1513
int x = 0, y = 0, v = 0, count = 0, P = 0, result = 0; //P= number of grey/black cells, (x,y) = grey/black cells coordinates, v=value of respective cell
1614
int C = 0, L = 0, a = 0, b = 0, c = 0, d = 0; // C=columns, L=lines, (a,b)=coordinates of the cell we want to analyse, P= number of grey/black cells
1715
int **labyrinth = NULL;
@@ -21,40 +19,37 @@ void Read_input_file(char *filename)
2119
FILE *fp_in = NULL, *fp_out = NULL;
2220

2321
fp_in = open_inputfile(fp_in, filename);
24-
2522
out_name = allocate_outputname(out_name, filename);
2623
fp_out = open_outputfile(fp_out, out_name);
27-
while (fp_in != NULL)
24+
25+
while ((fscanf(fp_in, "%d %d", &L, &C)) == 2)
2826
{
29-
if ((fscanf(fp_in, "%d %d", &L, &C)) != 2)
30-
error(fp_in);
3127
if ((fscanf(fp_in, "%d %d %s", &a, &b, test_mode)) != 3)
32-
error(fp_in);
28+
error(fp_in, fp_out, out_name, filename);
3329

3430
if (strcmp(test_mode, "A6") == 0)
3531
if ((fscanf(fp_in, "%d %d", &c, &d)) != 2)
36-
error(fp_in);
32+
error(fp_in, fp_out, out_name, filename);
33+
34+
if ((fscanf(fp_in, "%d", &P)) != 1)
35+
error(fp_in, fp_out, out_name, filename);
3736

3837
labyrinth = allocate_table(labyrinth, C, L); // Dynamic allocation of the main labyrinth
3938

40-
if ((fscanf(fp_in, "%d", &P)) != 1)
41-
{
42-
free_labyrinth(labyrinth, C);
43-
error(fp_in);
44-
}
45-
while ((fscanf(fp_in, "%d %d %d", &x, &y, &v) == 3) && (count < P))
39+
while (count < P)
4640
{
41+
if ((fscanf(fp_in, "%d %d %d", &x, &y, &v) != 3))
42+
{
43+
free_labyrinth(labyrinth, C);
44+
error(fp_in, fp_out, out_name, filename);
45+
}
4746
labyrinth[x - 1][y - 1] = v; //remember that the coordinate (0,0) represents the (1,1) cell
4847
count++;
4948
}
50-
//print_table(labyrinth, L, C);
51-
/* result = choose_test(test_mode, labyrinth, L, C, a, b, c, d, traversed_path, size_traversed);
52-
write_output_file(name, result, filename);
53-
free_labyrinth(labyrinth, L, C);*/
54-
result = choose_test(test_mode, labyrinth, L, C, a, b);
49+
result = choose_test(test_mode, labyrinth, L, C, a, b, c, d);
5550
write_output(fp_out, result);
5651
free_labyrinth(labyrinth, C);
57-
count = 0;
52+
count = 0;
5853
}
5954
free(out_name);
6055
fclose(fp_in);
@@ -89,10 +84,13 @@ char *allocate_outputname(char *out_name, char *in_name)
8984
return out_name;
9085
}
9186

92-
void error(FILE *fp)
87+
void error(FILE *fp_in, FILE *fp_out, char *filename_in, char *filename_out)
9388
{
94-
printf("Error when reading the input file.\n");
95-
fclose(fp);
89+
printf("Error when reading data.\n");
90+
fclose(fp_in);
91+
fclose(fp_out);
92+
free(filename_out);
93+
free(filename_in);
9694
exit(0);
9795
}
9896

RoaP_Int

32.9 KB
Binary file not shown.

enunciado101.sol1

-16
This file was deleted.

main.c

+21-1
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,32 @@ no âmbito da Licenciatura Bolonha em Engenharia Eletrotécnica e de Computadore
3030

3131
int main(int argc, char *argv[])
3232
{
33+
char *filename = NULL;
3334
if (argc != 3)
3435
{
3536
help();
3637
exit(0);
3738
}
38-
Read_input_file(argv[2]);
39+
if (strcmp(argv[1], "-s") == 0)
40+
{
41+
if ((filename = (char *)malloc((strlen(argv[2]) + 1) * sizeof(char))) == NULL)
42+
{
43+
printf("Error when trying to get memory to allocate input file name!\n");
44+
exit(0);
45+
}
46+
strcpy(filename, argv[2]);
47+
}
48+
else
49+
{
50+
if ((filename = (char *)malloc((strlen(argv[1]) + 1) * sizeof(char))) == NULL)
51+
{
52+
printf("Error when trying to get memory to allocate input file name!\n");
53+
exit(0);
54+
}
55+
strcpy(filename, argv[1]);
56+
}
57+
Read_input_file(filename);
58+
free(filename);
3959
return 0;
4060
}
4161

0 commit comments

Comments
 (0)