Loops aninhados em C ++

O corpo de um loop pode conter em si uma loop- esta disposição é conhecida como loops aninhados. O circuito interno deve executar para conclusão durante cada iteração do loop externo.

Um programa C ++ usado loops aninhados para criar uma tabela de multiplicação da seguinte forma:

01234567890 0 * 0 0 * 1 0 * 2 0 * 3 0 * 4 0 * 5 0 * 6 0 * 7 0 * 8 0 * 91 1 * 0 1 * 1 1 * 2 1 * 3 1 * 4 1 * 5 1 * 1 * 7 6 * 1 * 92 8 1 2 * 0 2 * 1 * 2 * 3 2 2 2 2 * 4 * 2 * 5 6 7 2 * 2 * 2 * 8 9 // ... e assim por diante. ..

Você pode ver que a linha 0, o programa tem para percorrer a partir da coluna de 0 a coluna 9. O programa repete o processo para a linha 1, novamente para a linha 2, e assim por diante até ao remar 9. Isso implica a necessidade de dois loops : um loop interno para iterar sobre as colunas e um segundo circuito externo para iterar sobre as linhas.

Cada posição na tabela é simplesmente o número de vezes consecutivas o número da coluna.

Isto é exatamente como o seguinte NestedLoops programa funciona:

//// NestedLoops - este programa usa um loop aninhado para // calcular o table.//#include multiplicação #incluir #incluir usando namespace std-int main (int nNumberofArgs, char * pszArgs []) {// exibir o headingsint coluna nColumn = 0-cout lt; lt; "" -enquanto (NColumn lt; 10) {// definir a largura de exibição para dois personagens // (mesmo para um número de dígitos) cout.width (2) - // agora mostrar o numbercout coluna lt; lt; nColumn lt; lt; "" - // Incremento para a próxima columnnColumn ++ -} cout lt; lt; endl - // agora ir loop através da rowsint nrow = 0-while (nrow lt; 10) {// começar com o valuecout linha lt; lt; nrow lt; lt; "-" - // Agora para cada linha, comece com a coluna 0 e // percorrer coluna 9nColumn = 0-while (nColumn lt; 10) {// mostrar o produto da coluna * linha // (uso 2 caracteres, mesmo quando o produto é // um único dígito) cout.width (2) -cout lt; lt; nrow * nColumn lt; lt; "" - // Ir para a próxima columnnColumn ++ -} // ir para a próxima rownRow ++ - cout lt; lt; endl -} // espera até que o usuário está pronto antes de terminar o programa // para permitir que o usuário veja o resultscout programa lt; lt; "Pressione Enter para continuar ..." lt; lt; endl-cin.ignore (10, ' n') - cin.get () - retornar 0-}

A primeira seção cria os cabeçalhos das colunas. Esta seção inicializa nColumn a 0. Em seguida, ele itera nColumn imprimir o seu valor separados por um espaço até nColumn atinge 10. Neste ponto, o programa sai do primeiro ciclo e em seguida, tachas uma nova linha na extremidade da linha para terminar. A figura ilustra este processo graficamente.

image0.jpg

Executando apenas esta seção só gera o seguinte resultado:

0 1 2 3 4 5 6 7 8 9

A expressão cout.width (2) define a largura de exibição para duas colunas - almofada C ++ vontade um espaço na esquerda para números de um dígito.

O segundo conjunto de loops, os loops aninhados, começa às nrow igual a 0. O programa imprime o número da linha seguido por um traço antes de lançar em um segundo ciclo que começa nColumn a 0 novamente e repete-lo de volta a 9. Para cada passar por este circuito interno, o programa define a largura de saída a dois espaços e, em seguida, exibe nrow * nColumn seguido por um espaço.

A largura de exibição redefine-se cada vez que você imprimir algo, por isso é necessário para configurá-lo de volta para 2 de cada vez antes de emitir um número.

O programa gera uma nova linha de saída para mover para a próxima linha de cada vez que incrementa nrow. Isto é mostrado graficamente aqui:

image1.jpg

A saída desse programa aparece como segue:

 0 1 2 3 4 5 6 7 8 90-0 0 0 0 0 0 0 0 0 01 - 0 1 2 3 4 5 6 7 8 92-0 2 4 6 8 10 12 14 16 183-0 3 6 9 12 15 18 21 24 274-0 4 8 12 16 20 24 28 32 365-0 5 10 15 20 25 30 35 40 456-0 6 12 18 24 30 36 42 48 547-0 7 14 21 28 35 42 49 56 638-0 8 16 24 32 40 48 56 64 729 - 0 9 18 27 36 45 54 63 72 81Press Enter para continuar. . .

Não há nada mágico sobre 0 a 9 nesta tabela. Você poderia apenas ter facilmente criado uma tabela de multiplicação de 12 x 12 (ou qualquer outra combinação) alterando a expressão de comparação entre os três enquanto laços. No entanto, para qualquer coisa maior do que 10 x 10, você vai precisar aumentar a largura mínima para acomodar produtos de três dígitos: Use cout.width (3).

menu