Algoritmo Trabb Pardo-Knuth
Este artigo não é sobre aprender algum novo algoritmo complexo, é mais sobre a história da programação. TPK foi introduzido para ilustrar a evolução das linguagens de programação de computador. Quando terminar de ler este artigo, você terá aprendido algo sobre a história da programação, em vez de um novo conceito.
Em seu trabalho de 1977 “O Desenvolvimento Inicial das Linguagens de Programação”, Trabb Pardo e Knuth introduziram um pequeno programa que envolvia arrayes, indexação, funções matemáticas, sub-rotinas, E / S, condicionais e iteração. Este programa foi escrito em várias linguagens de programação antigas para mostrar a evolução das linguagens de programação.
Assim como o “Hello World!” programa tem o propósito de introduzir iniciantes na programação, o TPK tem o mesmo propósito e não tem aplicações práticas.
Algorithm: input 11 numbers into a sequence A reverse sequence A for each item in sequence A call a function to do an operation if result overflows alert user else print result
// C program to implement TPK algorithm
#include <stdio.h>
#include <math.h>
// f(x) = sqrt(|x|) + 5*x**3
double f (double x)
{
return (sqrt(fabs(x)) + 5.0 * pow(x, 3.0));
}
int main (int argc, char* argv[])
{
double y;
int i;
// Read in the values of the array A
double A[11] = {7.9, 7.3, 20.9, 112.0, 5.0, 3.0, 2.9, 9.0, 21.7, 31.2, 4.1};
// In reverse order, apply "f"
// to each element of A and print
for (i=10; i>=0; i--)
{
y = f (A[i]);
if (y > 400.0)
{
printf ("%d TOO LARGE\n", i);
}
else
{
printf ("%d %f\n", i, y);
}
}
return (0);
}
// Java program to implement TPK algorithm
import java.util.*;
import java.io.*;
public class TPKA {
public static void main(String... args) {
double[] input = {7.9, 7.3, 20.9, 112.0, 5.0, 3.0, 2.9, 9.0, 21.7, 31.2, 4.1};
for(int j = 10; j >= 0; j--) {
double y = f(input[j]);
if( y < 400.0) {
System.out.printf("%d %.2f\n", j, y);
} else {
System.out.printf("%d %s\n", j, "TOO LARGE");
}
}
}
private static double f(double x) {
return Math.pow(Math.abs(x), 0.5) + (5*(Math.pow(x, 3)));
}
}
# Python program to implement TPK algorithm
def f(x):
return abs(x) ** 0.5 + 5 * x**3
def main():
s = [7.9, 7.3, 20.9, 112.0, 5.0, 3.0, 2.9, 9.0, 21.7, 31.2, 4.1]
s.reverse()
i = 10
for x in s:
result = f(x)
if result > 400:
print('%d %s' % (i, "TOO LARGE"))
i = i-1
else:
print('%d %f' % (i, result))
i = i-1
print('')
if __name__ == '__main__':
main()
Output: 10 346.629846 9 TOO LARGE 8 TOO LARGE 7 TOO LARGE 6 123.647939 5 136.732051 4 TOO LARGE 3 TOO LARGE 2 TOO LARGE 1 TOO LARGE 0 TOO LARGE
Referências: http://cs.fit.edu/~ryan/compare/tpk-c.html
Este artigo é uma contribuição de Palash Nigam . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou enviar o seu artigo para contribute@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva