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 GrandeDepartamento 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!