  In this paper, we study a model, which was first presented by Bunte and
Lapidoth, that mimics the programming operation of memory cells. Under this
paradigm we assume that cells are programmed sequentially and individually. The
programming process is modeled as transmission over a channel, while it is
possible to read the cell state in order to determine its programming success,
and in case of programming failure, to reprogram the cell again. Reprogramming
a cell can reduce the bit error rate, however this comes with the price of
increasing the overall programming time and thereby affecting the writing speed
of the memory. An iterative programming scheme is an algorithm which specifies
the number of attempts to program each cell. Given the programming channel and
constraints on the average and maximum number of attempts to program a cell, we
study programming schemes which maximize the number of bits that can be
reliably stored in the memory. We extend the results by Bunte and Lapidoth and
study this problem when the programming channel is either the BSC, BEC, or $Z$
channel. For the BSC and the BEC our analysis is also extended for the case
where the error probabilities on consecutive writes are not necessarily the
same. Lastly, we also study a related model which is motivated by the synthesis
process of DNA molecules.
