Links de interesse:

1.  Numerical Computation Guide - http://docs.sun.com/source/806-3568/ncgTOC.html (em especial Appendix D) ou http://dlc.sun.com/pdf/806-3568/806-3568.pdf

2.  Floating point - http://en.wikipedia.org/wiki/Floating_point

3.  IEEE 754 floating-point test software - http://www.math.utah.edu/~beebe/software/ieee/

4.  Handling Floating-Point Exceptions in Numeric Programs - http://www.jhauser.us/publications/1996_Hauser_FloatingPointExceptions.pdf

5.  What every computer scientist should know about floating-point arithmetic - http://delivery.acm.org/10.1145/110000/103163/p5-goldberg.pdf?key1=103163&key2=3420467321&coll=GUIDE&dl=GUIDE&CFID=26981430&CFTOKEN=38909577

6.  Not a Number of Floating Point Problems - http://www.jot.fm/issues/issue_2006_03/column8/

7.  Decimal Floating-Point: Algorism for Computers - http://speleotrove.com/decimal/IEEE-cowlishaw-arith16.pdf

8.  Comparison of Floating Point Numbers - http://www.mrupp.info/Data/2007floatingcomp.pdf

9.  The trouble with rounding floating point numbers - So, Prudence, computers do make mistakes… - http://www.theregister.co.uk/2006/08/12/floating_point_approximation/

10.  Comparison of Fortran and C - http://www.fortran.gantep.edu.tr/90/unfp/ch1-2.html

11.  Ph 465 Assignments Fall 2003 - http://www.physics.orst.edu/~rubin/COURSES/CPcourse/HW/Notes_Probs465.pdf

12.  The development and use of scientific software - http://qspace.library.queensu.ca/bitstream/1974/1188/1/Sanders_Rebecca_J_200804_MSc.pdf

13.  Choosing a Programming Language - http://msdn.microsoft.com/en-us/library/cc168615.aspx

14.  The new IEEE-754 standard for floating point arithmetic - http://drops.dagstuhl.de/opus/volltexte/2008/1448/pdf/08021.MarksteinPeter.ExtAbstract.1448.pdf

/ Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Técnicas de Programação
Prof.: José Eustáquio Rangel de Queiroz
PROVA FINAL - SEMESTRE 2014.2
DATA: 24/03/2015 (TURMA 02)
Matrícula / Nome / Nota
LEIA COM ATENÇÃO ANTES DE INICIAR!!!
A) Atentar para o fato de que todas as questões a seguir referem-se à linguagem C++;
B) Criar e nomear uma pasta com seu nome em maiúsculas, seguido de sua matrícula;
C) Construir no Dev-C++ os códigos solicitados, conforme os enunciados das 5 questões a seguir e salvá-los na pasta criada nomeando-os, de acordo com a questão, como q1.cpp, q2.cpp, etc.;
D) Compactar, com o WinZip ou o WinRar, a pasta contendo os códigos das questões; e
D) Enviar o arquivo compactado para

1. Seja o seguinte código, escrito por um programador desorientado:

#include <iostream>

#define OK 0

#define VAZIA 1

#define CHEIA 2

#ifndef NO_H

#define NO_H

class NO{

int numero;

NO * proximo;

public:

NO();

int Get();

void Set(int num);

void SetProximo(NO *prox);

NO * GetProximo();

~NO();};

#endif

#ifndef FILA_H

#define FILA_H

class FILA{

NO *cabeca;

public:

FILA();

int Insere(int numero);

int Retira();

int Imprime();};

#endif

using namespace std;

NO(){}

Get(){ return(numero);}

Set(int num){ numero = num;}

void SetProximo(NO *prox){proximo = prox;}

NO * GetProximo(){return(proximo);}

~NO(){proximo = NULL;}

FILA(){cabeca = NULL;}

int Insere(int numero){

int retorno;

NO *percorre, *no;

no = new NO;

if (no == NULL) retorno = CHEIA;

else{

no->Set(numero);

if (cabeca == NULL)

{

no->SetProximo(cabeca);

cabeca = no;

retorno = OK;

}

else

{

for ( percorre = cabeca;((percorre->GetProximo()) != NULL); percorre = percorre->GetProximo());

percorre->SetProximo(no);

no->SetProximo(NULL);

retorno = OK;}}

return(retorno);}

int Retira(){

int retorno;

NO *no;

no = cabeca;

if (no == NULL) retorno = VAZIA;

else{

if (no->GetProximo() == NULL) cabeca = NULL;

else cabeca = no->GetProximo();

delete no;

retorno = OK;}

return (retorno);}

int Imprime(){

int retorno;

NO *percorre, *no;

if (cabeca == NULL){

retorno = VAZIA;}

else{

if (cabeca->GetProximo() == NULL){cout < cabeca->Get() < endl;}

else{

cout < "IMPRIMINDO FILA" < endl;

for (percorre = cabeca;((percorre->GetProximo()) != NULL); percorre = percorre->GetProximo())

cout < percorre->Get() < endl;

cout < percorre->Get() < endl;}

retorno = OK;}

return(retorno);}

Analisá-lo e alterá-lo convenientemente, visando a transformá-lo em uma fila que armazene 15 inteiros. O programa deverá permitir a um usuário a escolha, em um menu de opções, da funcionalidade de seu interesse, dentre aquelas permitidas por uma fila. O código deverá ser testado e o resultado do teste deverá ser armazenando em um arquivo (q1.dat).

2. Criar uma classe para verificar se dois números complexos, ambos double,

e ,

são diferentes, a partir de duas classes, Modulo e Argumento. Testar o código, armazenando o resultado em um arquivo (q1.dat).


DICA: Conforme a fórmula de Moivre, se c = ρ (cos θ + i . sen θ) ≠ 0 e n ∈ Z, neste caso o módulo de cn é ρn e o argumento de cn é a primeira determinação positiva ou nula de nθ, i.e.:

3. Construir um programa que receba aleatoriamente do usuário 15 valores inteiros e os ordene, a partir do método quicksort. Testar o código, armazenando o resultado em um arquivo (q3.dat).

4. Construir um programa que contenha uma estrutura para o armazenamento de cinco valores inteiros, dos quais os dois primeiros correspondam a dois números quaisquer, enquanto os demais correspondam a resultados de seguintes operações bit a bit: (i) NÃO (NOT); (ii) NÃO E (NAND); e (iii) DESLOCAMENTO DE 3 BITS PARA A ESQUERDA (RIGHT SHIFT). Os resultados das referidas operações deverão ser inicializados por funções que recebam a referência à estrutura e inicializem seus membros. Testar o código, armazenando o resultado em um arquivo (q4.dat).

SUCESSO!