Nonformally, algorithm is some strictly determined computational procedure, which for correct input data "produces" requested "output data" called "result" of algorithm's run. Algorithm is then chain of computational steps leading to transforming input data into output data.
Algorithm may be also treated as means of solving concrete computational problem. Determining problem is about precising requirements regarding relation between input data and output, and algorithm describes correct computational procedure, which ensures, that this relation becomes achieved.
Algorithm is proper, when for each instance of alorithmic problem it stops and gives correct result.
Algorithm is improper may never stop or after stopping, give incorrect result. Improper algorithms may be still useful, if their erroneous runs might be controlled.