ProgII - Lista 6

Fazer os seguintes programas:

  1. Levando-se em conta que:

    O que será exibido na saída padrão quando o programa abaixo for executado?

    typedef struct {
            char    *tipo;
            char    *logradouro;
            int     numero;
            char    *complemento;
    } Endereco;
    typedef struct {
            char            *nome;
            int             idade;
            char            sexo;
            double          salario;
            Endereco        endereco;
    } Empregado;
    
    void funcao1(Empregado emp);
    void funcao2(Empregado *pEmp);
    void funcao3(int v[]);
    
    int main() {
            Endereco end = {"Rua", "Sergipe", 111, "apto. 102"};
            Empregado emp1 = {"Ana Paula", 20, 'F'};
            Empregado emp2, empregados[100], *ptrEmp;
            int vetor [] = {10, 15, 20};
    
            printf("sizeof(Endereco) = %d\n", sizeof(Endereco));
            printf("sizeof(Empregado) = %d\n", sizeof( Empregado));
            printf("sizeof(emp1) = %d\n", sizeof(emp1));
            printf("sizeof(empregados) = %d\n", sizeof(empregados));
            printf("sizeof(ptrEmp) = %d\n", sizeof(ptrEmp));
            emp2 = emp1;
            printf("&emp1 (%d) e' diferente do &emp2 (%d)\n", &emp1, &emp2);
            ptrEmp = &emp2;
            emp2.nome = "Maria Paula";
            emp1.endereco = end;
            //Fazendo acesso a membros
            printf("end.logradouro = %s\n", end.logradouro);
            printf("emp1.nome = %s\n", emp1.nome);
            printf("emp1.salario = %.2f\n", emp1.salario);
            printf("(*ptrEmp).nome = %s\n", (*ptrEmp).nome);
            printf("emp1.endereco.tipo = %s\n",   emp1.endereco.tipo);
            printf("ptrEmp->idade = %d\n", ptrEmp->idade);
            funcao1(emp2);
            printf("ptrEmp->idade = %d\n", ptrEmp->idade);
            funcao2(ptrEmp);
            printf("ptrEmp->idade = %d\n", ptrEmp->idade);
            funcao2(&emp1);
            printf("ptrEmp->idade = %d\n", ptrEmp->idade);
            funcao3(vetor);
            printf("vetor[1] = %d\n", vetor[1]);
            return 0;
    }
    
    void funcao1(Empregado emp) { emp.idade++; }
    
    void funcao2(Empregado *pEmp) { pEmp->idade++; }
    
    void funcao3(int v[]) { v[1] = 100; }
  2. O que será exibido na saída padrão quando o programa abaixo for executado?
    typedef struct {
            char    *tipo;
            char    *logradouro;
            int     numero;
            char    *complemento;
    } Endereco;
    typedef struct {
            char            *nome;
            int             idade;
            char            sexo;
            double          salario;
            Endereco        endereco;
    } Empregado;
    
    void funcao(int v[], Empregado emp, Empregado *pEmp);
    
    int main() {
            Endereco end = {"Rua", "Sergipe", 111, "apto. 102"};
            Empregado emp1 = {"Juliana Duarte", 20, 'F', 3000};
            Empregado emp2, empregados[100], *ptrEmp;
            int vetor [] = {10, 15, 20};
    
            emp1.endereco = end;
            emp2 = emp1;
            ptrEmp = &emp1;
            emp2.nome = "Maria Duarte";
            emp2.idade = 30;
            emp2.salario = 5000;
            //Fazendo acesso a membros
            printf("Antes de chamar funcao\n");
            printf("emp1.nome = %s\n", emp1.nome);
            printf("emp1.idade = %d\n", emp1.idade);
            printf("emp1.salario = %.2f\n", emp1.salario);
            printf("(*ptrEmp).nome = %s\n", (*ptrEmp).nome);
            printf("ptrEmp->idade = %d\n", ptrEmp->idade);
            printf("emp2.nome = %s\n", emp2.nome);
            printf("emp2.idade = %d\n", emp2.idade);
            printf("emp2.salario = %.2f\n", emp2.salario);
            funcao(vetor, emp2, ptrEmp);
            printf("\nApos chamar funcao\n");
            printf("vetor[0] = %d\n", vetor[0]);
            printf("vetor[1] = %d\n", vetor[1]);
            printf("vetor[2] = %d\n", vetor[2]);
            printf("emp1.idade = %d\n", emp1.idade);
            printf("emp1.salario = %.2f\n", emp1.salario);
            printf("emp2.idade = %d\n", emp2.idade);
            printf("emp2.salario = %.2f\n", emp2.salario);
            return 0;
    }
    void funcao(int v[], Empregado emp, Empregado *pEmp) {
            v[0] = ++(emp.idade);
            v[1] = ++(pEmp->idade);
            v[2] = (int) ++(pEmp->salario);
    }
  3. Fazer um programa para criar um arquivo de acesso aleatório (ou arquivo de bytes) que será usado por uma agenda eletrônica. O arquivo deve conter os seguintes dados de cada pessoa: nome, telefone celular, telefone residencial, telefone comercial, endereço e email. Os dados serão digitados pelo usuário.
  4. Fazer um programa para ler o arquivo criado no exercício anterior e exibir os dados na saída padrão.