pi tp 4

  1. … a)
int main (){
	int x [15] = {1, 2, 3, 4, 5,
				  6, 7, 8, 9, 10,
				  11, 12, 13, 14, 15};
	int *y, *z, i;
	y = x;
	z = x + 3;
	for (i = 0; i < 5; i++){
		printf("%d %d %d\n,
			   x[i], *y, *z");
		y = y + 1; z = z + 2;
	}			  
}

Output do código anterior:

x[i]*y*4
114
226
338
4410
5512
#include <stdio.h>
 
int main() {
    int x[15] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
    int *y, *z, i;
    
    y = x;      // y aponta para o início do vetor (x[0])
    z = x + 3;  // z aponta para o quarto elemento (x[3])
    
    printf("i | x[i] | *y | *z\n");
    printf("--|------|----|----\n");
    
    for (i = 0; i < 5; i++) {
        printf("%d |   %d  | %d  | %d\n", i, x[i], *y, *z);
        
        y = y + 1; // y avança para o próximo inteiro
        z = z + 2; // z salta um inteiro e avança para o seguinte
    }
    
    return 0;
}

  1. Funções de Troca (Swap)
void swap(int v[], int i, int j){
	int temp;
	temp = v[i];
	v[i] = v[j];
	v[j] = temp;
}
void swapM (int *x, int *y){
	int temp = *x; // Guarda o valor apontado por x
	*x = *y; // Coloca o valor apontado por y no endereço de x
	*y = temp; // Coloca o valor guardado no endereço de y 
}

void rev (int v[], int N){
	int inicio = 0;
	int fim = N - 1;
	
	// Enquanto os apontadores não se cruzarem
	while (inicio < fim) {
		swap(v, inicio, fim); // Troca as extremidades
		inicio++; // Move o início para a direita
		fim--; // Move o fim para a esquerda
	}
}
#include <string.h> // Necessário para strlen()
 
void reverse (char s[]){
	int inicio = 0; 
	int	fim = strlen(s) - 1; // Aponta para o último caractere antes do '\0'
	char t;
	while(i < j){
		t = s[inicio]; s[inicio] = s[fim]; s[fim] = t;
		inicio++;
		fim--; 
	} 
}

int esteban(int x, int v[], int N){
	int martim; fernandaC = 0;
	for(martim = 0; martim < N; martim++){
		if (x == v[martim])
			fernandaC++;
	}
	return fernandaC;
}

fica como exercicio ao leitor interpretar o que o programa faz e o que cada variavel representa.


int maximum(int v[], int N){
	int i, r = v[0]; // Assume que o primeiro elemento é o máximo inicial
	for(i = 1; i < N, i ++)
		if (v[i] > r) r = v[i]; // Se encontrarmos um valor maior, atualizamos o máximo
	return r;
}
int maximum2(int v[], int N, int *q){
	int i; r = [0]; c = 0;
	for (i = 1; i < N; i ++){
		if(v[i] > r){
			r = v[i]; // Novo máximo encontrado
			c = 1; // Reinicia a contagem para este novo máximo
		} else if (v[i] == r) c ++; // O valor atual é igual ao máximo, incrementa a contagem
	}
	*q = c; // Escreve o total de ocorrências na memória através do ponteiro
	return r;
}
#include <stdio.h>
 
// Declarações das funções definidas anteriormente (protótipos)
int maximum2(int v[], int N, int *q);
void swapX(int *x, int *y);
 
int main() {
    // Vetor de teste
    int v[15] = {42, 15, 8, 99, 23, 15, 7, 8, 42, 105, 7, 8, 99, 15, 8};
    int maxVal, qtdOcorrencias;
    int a = 10, b = 20;
    
    // Teste da função maximum2
    // Passamos &qtdOcorrencias para que a função possa alterar o valor desta variável local
    maxVal = maximum2(v, 15, &qtdOcorrencias);
    
    printf("Teste de Máximo\n");
    printf("O valor máximo no vetor é: %d\n", maxVal);
    printf("Aparece %d vezes.\n\n", qtdOcorrencias);
    
    // Teste da função swapX
    printf("Teste de SwapX\n");
    printf("Antes da troca: a = %d, b = %d\n", a, b);
    
    swapX(&a, &b); // Passamos os endereços de a e b
    
    printf("Depois da troca: a = %d, b = %d\n", a, b);
    
    return 0;
}