Skip to content

Commit e257c14

Browse files
committed
commit
1 parent 02e658e commit e257c14

11 files changed

+371
-0
lines changed

P0/ex1

0 Bytes
Binary file not shown.

P0/ex4

0 Bytes
Binary file not shown.

P0/ex4.c

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ int main()
2121
{
2222
printf(" %d", n - i);
2323
}
24+
printf("\n");
2425
}
2526
else
2627
{

P02/ex1

16.2 KB
Binary file not shown.

P02/ex1.c

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
int* criavetor(int n);
4+
int main(){
5+
int *pi, i, n, j;
6+
printf("Quantos elementos tem o vetor? "); scanf("%d", &n);
7+
pi=criavetor(n);
8+
printf("Vetor original:[ ");
9+
for (i = 0; i < n; i++)
10+
{
11+
printf("%d ", pi[i]);
12+
}
13+
printf("]\n Números pares:[ ");
14+
for (j = 0; j < n; j++)
15+
{
16+
if (pi[j]%2==0)
17+
{
18+
printf("%d ", pi[j]);
19+
}
20+
}
21+
printf("]\n Números impares:[ ");
22+
for (j = 0; j < n; j++)
23+
{
24+
if (pi[j]%2!=0)
25+
{
26+
printf("%d ", pi[j]);
27+
}
28+
}
29+
printf("]\n");
30+
31+
32+
return 0;
33+
}
34+
int* criavetor(int n){
35+
int *pi, i;
36+
pi=(int *)malloc(n*sizeof(int));
37+
for (i = 0; i < n; i++)
38+
{
39+
printf("Introduza o %dº elemento: ", i+1); scanf("%d", &pi[i]);
40+
}
41+
return pi;
42+
}

P02/ex2.c

+186
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
/*****************************************************************/
2+
/* Biblioteca vetor | PROG2 | MIEEC | 2018/19 */
3+
/*****************************************************************/
4+
5+
#include "vetor.h"
6+
#include <string.h>
7+
#include <stdlib.h>
8+
#include <stdio.h>
9+
10+
vetor* vetor_novo()
11+
{
12+
vetor* vec;
13+
14+
/* aloca memoria para a estrutura vetor */
15+
vec = (vetor*)malloc(sizeof(vetor));
16+
if(vec == NULL)
17+
return NULL;
18+
19+
vec->tamanho = 0;
20+
vec->capacidade = 0;
21+
vec->elementos = NULL;
22+
23+
return vec;
24+
}
25+
26+
void vetor_apaga(vetor* vec)
27+
{
28+
int i;
29+
30+
if(vec == NULL)
31+
return;
32+
33+
/* liberta memoria de cada string */
34+
for (i = 0; i < vec->tamanho; i++)
35+
{
36+
free(vec->elementos[i].str);
37+
}
38+
39+
/* liberta memoria dos apontares para as strings */
40+
free(vec->elementos);
41+
42+
/* liberta memoria da estrutura vetor */
43+
free(vec);
44+
}
45+
46+
int vetor_atribui(vetor* vec, int pos, const char* valor)
47+
{
48+
unsigned int len_valor;
49+
50+
if (vec == NULL || pos < 0 || pos >= vec->tamanho)
51+
return -1;
52+
53+
len_valor = strlen(valor);
54+
55+
/* reserva mais espaco se necessario */
56+
if(len_valor > strlen(vec->elementos[pos].str))
57+
{
58+
vec->elementos[pos].str = (char*)realloc(vec->elementos[pos].str, (len_valor+1)*sizeof(char));
59+
if(vec->elementos[pos].str == NULL)
60+
return -1;
61+
}
62+
63+
/* copia valor */
64+
strcpy(vec->elementos[pos].str, valor);
65+
66+
return pos;
67+
}
68+
69+
int vetor_tamanho(vetor* vec)
70+
{
71+
if(vec == NULL)
72+
return -1;
73+
74+
return vec->tamanho;
75+
}
76+
77+
const char* vetor_elemento(vetor* vec, int indice)
78+
{
79+
if (vec == NULL || indice < 0 || indice >= vec->tamanho)
80+
return NULL;
81+
82+
return vec->elementos[indice].str;
83+
}
84+
85+
int vetor_insere(vetor* vec, const char* valor, int pos)
86+
{
87+
int i, n;
88+
89+
if(vec == NULL || pos < -1 || pos > vec->tamanho)
90+
return -1;
91+
92+
/* aumenta elementos do vetor se capacidade nao for suficiente */
93+
if(vec->tamanho == vec->capacidade)
94+
{
95+
if(vec->capacidade == 0)
96+
vec->capacidade = 1;
97+
else
98+
vec->capacidade *= 2;
99+
100+
vec->elementos = (v_elemento*)realloc(vec->elementos, vec->capacidade * sizeof(v_elemento));
101+
if(vec->elementos == NULL)
102+
return -1;
103+
}
104+
105+
/* se pos=-1 insere no fim do vetor */
106+
if(pos == -1)
107+
pos = vec->tamanho;
108+
109+
/* copia todos os elementos a partir da posicao pos ate' ao fim do vetor para pos+1 */
110+
for(i=vec->tamanho-1; i>=pos; i--)
111+
{
112+
vec->elementos[i+1] = vec->elementos[i];
113+
}
114+
115+
/* aloca espaco para a nova string na posicao pos */
116+
vec->elementos[pos].str = (char*)calloc(strlen(valor)+1, sizeof(char));
117+
if(vec->elementos[pos].str == NULL)
118+
return -1;
119+
120+
/* copia valor */
121+
strcpy(vec->elementos[pos].str, valor);
122+
123+
vec->tamanho++;
124+
125+
return pos;
126+
}
127+
128+
int vetor_remove(vetor* vec, int pos)
129+
{
130+
int i;
131+
132+
if(vec == NULL || pos < 0 || pos >= vec->tamanho)
133+
return -1;
134+
135+
/* liberta string na posicao a remover */
136+
free(vec->elementos[pos].str);
137+
138+
/* copia todos os elementos a partir da posicao pos+1 ate' ao fim do vetor para pos */
139+
for(i=pos+1; i<vec->tamanho; i++)
140+
{
141+
vec->elementos[i-1] = vec->elementos[i];
142+
}
143+
144+
vec->tamanho--;
145+
146+
return 0;
147+
}
148+
149+
int vetor_pesquisa(vetor* vec, const char* valor)
150+
{
151+
int i;
152+
153+
if(vec == NULL)
154+
return -1;
155+
156+
/* pesquisa sequencial */
157+
for (i = 0; i < vec->tamanho; i++)
158+
{
159+
if (strcmp(vec->elementos[i].str, valor) == 0)
160+
return i;
161+
}
162+
163+
return -1;
164+
}
165+
166+
int vetor_ordena(vetor* vec)
167+
{
168+
int i, j;
169+
char *tmp;
170+
171+
if(vec == NULL)
172+
return -1;
173+
174+
/* ordenacao por insercao */
175+
for (i = 1; i < vec->tamanho; i++)
176+
{
177+
tmp = vec->elementos[i].str;
178+
for (j = i; j > 0 && strcmp(tmp, vec->elementos[j-1].str) < 0; j--)
179+
{
180+
vec->elementos[j] = vec->elementos[j-1];
181+
}
182+
vec->elementos[j].str = tmp;
183+
}
184+
185+
return 0;
186+
}

P02/realloc

16.3 KB
Binary file not shown.

P02/realloc.c

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
#define NCAR 80
5+
6+
int main(){
7+
char *s;
8+
s= (char *) malloc(NCAR);
9+
printf("Escreva uma frase: ");
10+
fgets(s, NCAR, stdin);
11+
printf("%s\n", s);
12+
s= (char*) realloc(s, 20);
13+
strcpy(s, "Bom dia! ");
14+
printf("%s\n", s);
15+
}

P02/vetor.h

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*****************************************************************/
2+
/* Biblioteca vetor | PROG2 | MIEEC | 2020/21 */
3+
/*****************************************************************/
4+
5+
#ifndef VETOR_H
6+
7+
8+
/**
9+
* registo para armazenar cada elemento (apenas uma string neste caso)
10+
*/
11+
typedef struct
12+
{
13+
char *str;
14+
15+
} v_elemento;
16+
17+
/**
18+
* este registo contem um vetor de elementos, um contador do tamanho e outro para a capacidade
19+
*/
20+
typedef struct
21+
{
22+
/** numero de elementos do vetor */
23+
int tamanho;
24+
25+
/** capacidade do vetor */
26+
int capacidade;
27+
28+
/** array de elementos armazenados */
29+
v_elemento* elementos;
30+
31+
} vetor;
32+
33+
/**
34+
* cria um novo vetor com tamanho 0 e capacidade 0
35+
* retorno: apontador para o vetor criado
36+
* nota: se vetor nao foi criado retorna NULL
37+
*/
38+
vetor* vetor_novo();
39+
40+
/**
41+
* elimina um vetor, libertando toda a memoria ocupada
42+
* parametro: vec apontador para vetor
43+
* nota: se vec = NULL retorna sem fazer nada
44+
*/
45+
void vetor_apaga(vetor *vec);
46+
47+
/**
48+
* indica o o numero de elementos do vetor
49+
* parametro: vec apontador para vetor
50+
* retorno: -1 se ocorrer algum erro ou numero de elementos do vetor
51+
*/
52+
int vetor_tamanho(vetor *vec);
53+
54+
/**
55+
* retorna o elemento armazenado na posicao especificada
56+
* parametro: vec apontador para vetor
57+
* parametro: pos indice do elemento
58+
* retorno: apontador para a string na posicao correspondente
59+
* nota: se ocorrer algum erro retorna NULL (p.ex. se valor pos indicar uma posicao invalida)
60+
*/
61+
const char* vetor_elemento(vetor *vec, int pos);
62+
63+
/**
64+
* insere um elemento na posicao especificada
65+
* parametro: vec apontador para vetor
66+
* parametro: valor string a inserir
67+
* parametro: pos indice do elemento onde se pretende inserir a string, se pos=tamanho ou pos=-1 insere no fim do vetor
68+
* retorno: -1 se ocorrer algum erro (p.ex. se valor pos indicar uma posicao invalida) ou o valor de pos se bem sucedido
69+
* nota: se a capacidade nao for suficiente para guardar novo elemento, devera ser aumentada para 2x em relacao a capacidade anterior; inicialmente aumenta para capacidade 1
70+
*/
71+
int vetor_insere(vetor *vec, const char* valor, int pos);
72+
73+
/**
74+
* remove o elemento da posicao especificada
75+
* parametro: vec apontador para vetor
76+
* parametro: pos posicao
77+
* retorno: -1 se ocorrer algum erro (p.ex. se valor pos indicar uma posicao invalida) ou 0 se bem sucedido
78+
*/
79+
int vetor_remove(vetor* vec, int pos);
80+
81+
/**
82+
* atribui o valor especificado a uma posicao
83+
* parametro: vec apontador para vetor
84+
* parametro: pos posicao onde colocar elemento
85+
* parametro: str string pretendida
86+
* retorno: -1 se ocorrer algum erro (p.ex. se valor pos indicar uma posicao invalida) ou pos se bem sucedido
87+
*/
88+
int vetor_atribui(vetor *vec, int pos, const char* str);
89+
90+
/**
91+
* devolve a posicao do elemento especificado
92+
* parametro: vec apontador para vetor
93+
* parametro: str string pretendida
94+
* retorno: posicao do elemento ou -1 se ocorrer algum erro ou nao encontrar elemento
95+
*/
96+
int vetor_pesquisa(vetor *vec, const char* str);
97+
98+
/**
99+
* ordena um vetor por ordem alfabetica
100+
* parametro: vec apontador para vetor
101+
* retorno: -1 se ocorrer um erro ou 0 se for bem sucedido
102+
*/
103+
int vetor_ordena(vetor *vec);
104+
105+
#define VETOR_H
106+
#endif

P02/vetor_dinamico

16.2 KB
Binary file not shown.

P02/vetor_dinamico.c

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
int* criavetor(int n){
4+
int *pi, i;
5+
pi=(int *)malloc(n*sizeof(int));
6+
for (i = 0; i < n; i++)
7+
{
8+
printf("Introduza o %dº elemento: ", i+1); scanf("%d", &pi[i]);
9+
}
10+
return pi;
11+
}
12+
int main(){
13+
int *pi, i, n;
14+
printf("Quantos elementos tem o vetor? "); scanf("%d", &n);
15+
pi=criavetor(n);
16+
for (i = 0; i < n; i++)
17+
{
18+
printf("%d\n", pi[i]);
19+
}
20+
return 0;
21+
}

0 commit comments

Comments
 (0)