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.

Go Premium (uma experiência sem anúncios com muitos mais recursos)