Lista I Resolução

Share Embed Donate


Short Description

Download Lista I Resolução...

Description

Exercícios de Linguagem de Programação Programação II Lista 1

1. Quais serão os valores de x, y e p ao final do trecho de código abai xo? int x, y, *p; y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x; Resp: x = 3, y = 4, p apontando para y (*p = 4). 2. Os programas (trechos de código) abaixo possuem erros. Qual(is)? Como deveriam ser? a) void main() { int x, *p; x = 100; p = x; //p deveria receber o endereço de x, já que p é um ponteiro (e x não). Ponteiros “armazenam” o endereço para o qual eles apontam! O código correto seria: p = &x; printf(“Valor de p: %d.\ %d.\n”, *p); } b) void troca (int *i, int *j) { int *temp; *temp = *i; *i = *j; *j = *temp; } A variável “temp” não precisava ser um ponteiro, já que apenas precisa armazenar um valor inteiro, sem precisar apontar para algum lugar. Suponha que os elementos do vetor v são do tipo int e cada int ocupa 8 bytes no seu computador. Se o endereço de v[0] é 55000, qual o valor da expressão v + 3? Se v (ou o endereço de v[0]), que representa o primeiro item do vetor está no byte de endereço 55000, logo o índice v[3] (ou v + 3) estará no byte 55000 + 8*3 = 55024. Nota: em máquinas de 32 bits, inteiros ocupam 32 bits (4 bytes).

3.

Escreva uma função mm que receba um vetor inteiro v[0..n-1] e os endereços de duas variáveis inteiras, digamos min e max, e deposite nessas variáveis o valor de um elemento mínimo e o valor de um elemento máximo do vetor. Escreva também uma função m ain que use a função mm. #include #include #define tam 5 void mm(int vet[],int* min, int* max){ int i; *min=vet[0]; *max =vet[0]; for (i=0; i< tam;i++){

4.

if (*min>vet[i]) *min = vet[i]; if (*maxpI + n2->pI; num->pIm = n1->pIm + n2->pIm; return num; } NumComplexo* multiplica(NumComplexo *n1, NumComplexo *n2){ NumComplexo *num = (NumComplexo *)malloc(sizeof(NumComplexo)); num->pI = n1->pI * n2->pI; num->pIm = n1->pIm * n2->pIm; return num; } void inverteNum(NumComplexo *n1) { n1->pI = (-1)*n1->pI; n1->pIm = (-1)*n1->pIm; } main.c #include #include #include "NumComplexo.h"

int main() { NumComplexo num1, num2,num3; printf("Primeiro Numero complexo\n "); printf("Digite a parte real "); scanf("%d", &num1.pI); printf("Digite a parte imaginaria "); scanf("%d", &num1.pIm); printf("\nSegundo Numero complexo\n "); printf("Digite a parte real "); scanf("%d", &num2.pI); printf("Digite a parte imaginaria "); scanf("%d", &num2.pIm); num3 = *somar(&num1, &num2); printf("\nResulado da soma dos numeros complexos\n"); if (num3.pIm>0) printf("%d + %di",num3.pI,num3.pIm); else printf("%d %di",num3.pI,num3.pIm); num3 = *multiplica(&num1, &num2); printf("\nResulado da multiplicação dos numeros complexox\n"); if (num3.pIm>0) printf("%d + %di",num3.pI,num3.pIm); else printf("%d %di",num3.pI,num3.pIm); printf("\nInverte Numero complexo\n"); inverteNum(&num1); if (num1.pIm>0) printf("%d + %di",num1.pI,num1.pIm);

  else printf("%d %di",num1.pI,num1.pIm); return 0; } 7. Escreva uma especificação de tipos abstratos de dados (TAD) para os números reais. Vamos supor que um número real seja representado por uma estrutura em C, como esta: struct realtype { int esquerda; int direita; }; onde esquerda e direita representam os dígitos posicionados à esquerda e à direita do ponto decimal, respectivamente. Se esquerda for um inteiro neg ativo, o número real representado será negativo. Escreva uma rotina para criar um número real Escreva rotinas adição, subtração e multiplicação que aceitem duas dessas estruturas e definam o valor de uma terceira estrutura para representar o número que seja a soma, a diferença e o produto, respectivamente, dos dois registros de entrada. TReal.h typedef struct TRealTipo { int esquerda; int direita; }realTipo; realTipo criaNumero(int esquerda, int direita); realTipo soma(realTipo n1, realTipo n2); realTipo subtracao(realTipo n1, realTipo n2); realTipo multiplicacao(realTipo n1, realTipo n2); TReal.c realTipo criaNumero(int esquerda, int direita){ realTipo num ; num.esquerda = esquerda; num.direita = direita; return num; } realTipo soma(realTipo n1, realTipo n2){ realTipo n3; n3.esquerda = (n1.esquerda+n2.esquerda) ; n3.direita = ((n1.direita+n2.direita)); return n3; } realTipo subtracao(realTipo n1, realTipo n2){ realTipo n3; n3.esquerda = n1.esquerda - n2.esquerda; n3.direita = n1.direita - n2.direita; return n3; } realTipo multiplicacao(realTipo n1, realTipo n2){ realTipo n3; n3.esquerda = n1.esquerda * n2.esquerda;

n3.direita = n1.direita * n2.direita; return n3; } 8. Você deverá implementar um tipo abstrato de dados TConjunto para representar conjuntos de números inteiros. Seu tipo abstrato deverá armazenar os elementos do conjunto e o seu tamanho n. Considere que o tamanho máximo de um conjunto é 20 elementos e use arranjos de 1 dimensão (vetores) para a sua implementação. Seu TAD deve possuir procedimentos (ou funções quando for o caso) para: a) criar um conjunto vazio; b) ler os dados de um conjunto; c) fazer a união de dois conjuntos; d) verificar se dois conjunto são iguais (possuem os mesmos elementos); e) imprimir um conjunto; TConjunto.h typedef struct TConjunto{ int tamanho; int elemento[20]; }conjunto;

int cria(int n, conjunto *c); void ler(conjunto *c); int uniao (conjunto c1, conjunto c2, conjunto *c3); int iguais (conjunto c1, conjunto c2); void imprima(conjunto c1); TConjunto.c #include "TConjunto.h" #include int cria(int n, conjunto *c){ int i; if (n tamanho= n; for (i = 0; i < n;i++){ c->elemento[i] = 0; return 1; } } c->tamanho = 0; return 0; } void ler(conjunto *c){ int i; for (i=0; i < c->tamanho; i++){ printf("Digite elemento %d ",i); scanf("%d", &c->elemento[i]); } } int uniao (conjunto c1, conjunto c2, conjunto *c3){ int i,j=0; if (c1.tamanho + c2.tamanho tamanho = c1.tamanho + c2.tamanho; for (i=0; ielemento[j] = c1.elemento[i];  j++; } for (i=0; ielemento[j] = c2.elemento[i];  j++; } return 1; } return 0; } int iguais (conjunto c1, conjunto c2){ int i; if (c1.tamanho == c2.tamanho ){ for (i=0; i
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF