Lista Exercicios Struct Ponteiro Pilha

5
Centro Universitário FIEO Lista de Exercícios Struct, ponteiros e pilhas Prof. Rodrigo Bossini – [email protected] Estrutura de Dados I Data de Entrega: 10/04/2014 (entregar por email) Instruções: A lista pode ser resolvida em grupos de um a quatro alunos. Deve ser feito somente um envio das soluções, por email( [email protected] ) . Cada participante do grupo deve participar ativamente de cada uma das soluções. As listas de exercícios são o principal meio de estudo e preparo para as avaliações. Não deve ser realizado compartilhamento de soluções entre grupos. 1) Escreva uma definição de tipo apropriada para as seguintes entidades do mundo real. Para cada uma, pense em atributos interessantes e os adicione à sua definição. Coloque pelo menos três atributos em cada um. Lembre-se, você pode fazer a definição de um tipo e depois utilizá-la na definição de outro. Por exemplo, é bem razoável que um computador tenha um mouse. a) Uma pessoa b) Um aluno c) Uma conta bancária d) Um cachorro e) Um mouse f) Um teclado g) Um computador h) Uma disciplina i) Um curso superior k) Uma escola l) Uma prova de múltipla escolha m) Uma mensagem de e-mail n) Um peixe o) Uma linguagem de programação p) Uma fila de banco q) Um histórico de destinos escolhidos em um dispositivo de gps 2) Considere o seguinte trecho de código. #include <stdlib.h> #include <stdio.h> const int N = 10; int main(int argc, char **argv) { int idades [N]; int notas1 [N];

Transcript of Lista Exercicios Struct Ponteiro Pilha

  • Centro Universitrio FIEOLista de Exerccios

    Struct, ponteiros e pilhasProf. Rodrigo Bossini [email protected]

    Estrutura de Dados IData de Entrega: 10/04/2014 (entregar por email)

    Instrues: A lista pode ser resolvida em grupos de um a quatro alunos. Deve ser feito somente um envio dassolues, por email( [email protected]) . Cada participante do grupo deve participar ativamente de cada

    uma das solues. As listas de exerccios so o principal meio de estudo e preparo para as avaliaes. No deve serrealizado compartilhamento de solues entre grupos.

    1) Escreva uma definio de tipo apropriada para as seguintes entidades do mundo real. Para cada uma, pense em atributos interessantes e os adicione sua definio. Coloque pelo menos trs atributos em cada um. Lembre-se, voc pode fazer a definio de um tipo e depois utiliz-la na definio de outro. Por exemplo, bem razovel que um computador tenha um mouse.

    a) Uma pessoab) Um alunoc) Uma conta bancriad) Um cachorroe) Um mousef) Um tecladog) Um computadorh) Uma disciplinai) Um curso superiork) Uma escolal) Uma prova de mltipla escolham) Uma mensagem de e-mailn) Um peixeo) Uma linguagem de programaop) Uma fila de bancoq) Um histrico de destinos escolhidos em um dispositivo de gps

    2) Considere o seguinte trecho de cdigo.

    #include #include const int N = 10;int main(int argc, char **argv) {

    int idades [N];int notas1 [N];

  • int notas2 [N];double medias [N];

    int i;for (i = 0; i < N; i++){

    printf ("Digite idade do aluno %d", i + 1);fflush(stdout);scanf ("%d", &idades[i]);printf ("Digite nota 1 do aluno %d", i + 1);fflush(stdout);scanf ("%d", &notas1[i]);printf ("Digite nota 2 do aluno %d", i + 1);fflush(stdout);scanf ("%d", &notas2[i]);

    }

    for (i = 0; i < N; i++){medias[i] = (notas1[i] + notas2[i]) / 2.0;

    }

    for (i = 0; i < N; i++){printf ("Media do aluno %d = %.2f", i+1, medias[i]);fflush(stdout);

    }

    system ("pause");return 0;

    }

    Este programa armazena a idade, nota 1, nota 2 e mdia de um conjunto de N alunos. Ao final, exibe-se a mdia de cada um. Altere esse programa para fazer o seguinte:

    Exibir a mdia na nota 1 de alunos cuja idade seja maior do que 22.Exibir a mdia na nota 2 para alunos cuja faixa etria esteja entre 29 e 33 inclusive.Exibir o nmero de alunos cuja idade maior que 27 e cuja mdia na nota 2 seja pelo menos 8.

  • 3) No exerccio 2, observe como alguns dados relacionados esto soltos em vetores diferentes. Por exemplo, os vetores notas1, notas2, idades e medias, na posio 1, tem valores que dizem respeito ao mesmo aluno.Rescreva o cdigo do exerccio 2 usando struct. Ou seja, crie um tipo de dado Aluno que tem todos os dados necessrios e ento declare um vetor de N alunos. A seguir, faa os mesmos clculos pedidos no exerccio 2.

    4) Considere o seguinte problema. Uma universidade deseja fazer o controle do rendimento acadmico de seus alunos. Para tal, deve-se levar em considerao as seguintes restries. Devem ser armazenados dados sobre os cursos. Cada curso tem um cdigo inteiro e um nome, que pode ter at 100 caracteres. Cada curso tem tambm 10 disciplinas. Cada disciplina tem um cdigo inteiro e um nome. Os alunos tm idade e nome. Cada aluno pode cursar um nico curso. Em cada disciplina do curso que cursa, cada aluno faz duas provas etem uma mdia ponderada calculada. A primeira prova sempre tem peso 2 e a segunda prova sempre tem peso 3.

    Identifique os tipos de dados que precisam ser definidos, bem como seus atributos. Faa estas definies usando typedef e struct.

    A seguir, escreva um programa que declara um vetor de 10 alunos. Escreva uma estrutura de repetio que permita a obteno dos dados (curso, disciplinas e notas) de cada aluno. A seguir, calcule a mdia de cada aluno em cada disciplina e as exiba.

    5) Faa o teste de mesa (no papel) do seguinte programa e descubra o que ele mostra para o usurio. Explique oque ele faz.

    #include #include const int N = 10;int main(int argc, char **argv) {

    int * p1, *p2, a, b;p1 = &a;

    p2 = &b;

    a = 2;

    b = 3;

    printf ("%d\n", *p1);printf ("%d\n", *p2);int res = *p1 + *p2;printf ("%d\n", res);return 0;

    }

  • 6) Faa o teste de mesa do seguinte programa.

    #include #include void func (int * a, int b, int *c){

    *a = *a + 1;

    b = *a;

    b++;

    (*a)--;

    *c = *c + *a + b;

    b--;

    }

    int main(int argc, char **argv) {

    int a = 2, b = 3, c = 4;printf ("%d %d %d\n", a, b, c);func (&a, b, &c);

    printf ("%d %d %d\n", a, b, c);func (&b, a, &c);

    printf ("%d %d %d\n", a, b, c);return 0;

    }

    7) Mostre a definio de uma pilha (definio do tipo e funes push e pop) que capaz de armazenar itens de cada um dos tipos que voc definiu no exerccio 1.

    8) Escreva uma funo que recebe dois ponteiros para inteiro e faz a troca dos valores armazenados nas posies para as quais os ponteiros apontam. Chame sua funo de swap.

    9) Escreva a definio de uma pilha (definio de tipo com struct e as funes push, pop, esta_vazia e esta_cheia) considerando que o topo da pilha zero quando ela est vazia.

  • 10) Escreva a definio de uma pilha (definio do tipo de dado com struct, funes push, pop, esta_vazia, esta_cheia) que utiliza a posio zero do vetor que armazena seus itens para conter o valor que indica seu topo. Assim, os itens da pilha so armazenados a partir da posio 1 do vetor.

    11) Escreva um programa que permita ao usurio escolher as seguintes opes:1 Rio de Janeiro2 So Paulo3 Santos4 Porto Alegre-1 Sair0 - Histrico

    Ou seja, o usurio pode indicar uma cidade que gostaria de visitar a cada iterao de um loop. E digitar -1 para sair do programa. Simples assim. Mas seu programa deve tambm armazenar o histrico de opes. Quando o usurio digitar 0, o programa deve mostrar o histrico de opes realizadas, sendo que a mais recente deve aparecer primeiro. Ou seja, a ltima opo escolhida a primeira a ser mostrada. Para armazenar o histrico utilize uma pilha. Mas cuidado, para exibir cada item na pilha, voc vai ter que desempilhar um a um. E depois disso, precisar manter o histrico como era antes, para que o usurio possa rev-lo caso deseje. Como fazer isso? Dica: Utilize uma pilha auxiliar para empilhar os elementos enquanto os exibe. Depois, empilhe-os de volta para a pilha original, desempilhando um a um da pilha auxiliar.