View Full Version : Ciclos for - c++


arodrigues182
27-01-2008, 11:59
Pessoal é assim: no exame que irei ter, irá de certeza absoluta aparecer um exercicio em que nos peça para escrever no papel o resultado do código que lá está. Só que o problema é que o código mete 2 ciclos for metidos "um no outro" e aquilo dá-me resultados que eu não consigo ver. Por exemplo:

#include <iostream>
using namespace std;

int main() {
int i, j;
for (i = 5; i>1; i--) {
for (j = 5-i ; j < 5; j++)
cout << "!";
cout << "V" << endl;
}


}

eu pensava que o resultado ía ser: !V!V!V etc...
mas afinal é isto:

!!!!!V
!!!!V
!!!V
!!V

alguém me pode explicar isto?

Baderous
27-01-2008, 12:11
Isso basta fazeres uma tabela para o i, j e o output e fica feito:

http://img184.imageshack.us/img184/2351/tabelawt6.th.jpg (http://img184.imageshack.us/my.php?image=tabelawt6.jpg)

arodrigues182
27-01-2008, 12:24
Sim. Mas só não percebo é isto:

cout << "!";
cout << "V" << endl;

isto não quer dizer que se tem d escrever sempre !V em cada ciclo?

Baderous
27-01-2008, 12:27
Provavelmente não percebeste porque esse código está mal indentado e provoca essas confusões:

int main() {
int i, j;
for (i = 5; i>1; i--)
{
for (j = 5-i ; j < 5; j++)
cout << "!";
cout << "V" << endl;
}
}

O "!" aparece sempre que existe uma iteração do ciclo interior, enquanto que o "V" só aparece no fim de cada iteração do ciclo exterior.

arodrigues182
27-01-2008, 12:29
Tou a ver. Por outras palavras o V só aparece no fim do primeiro ciclo?

Baderous
27-01-2008, 12:31
Tou a ver. Por outras palavras o V só aparece no fim do primeiro ciclo?

Não é no fim do 1º ciclo, é no fim de cada iteração do 1º ciclo.


iteraçãohttp://www.priberam.pt/dlpo/imagens/transparent.gif


do Lat. interatione

s. f., acto de repetir.

arodrigues182
27-01-2008, 12:40
Acho que já percebi. Obrigado.
Não percebo também é este que mete ponteiros:

#include <iostream>
using namespace std;

int main (){
int * tab = new int[3];
int i;
for (i = 0; i < 3; i++) tab[i] = i * 2;
i = 0;
do {
for (int k = 3 - i; k > 0 ; k--)
cout << "=";
cout << tab[i] << endl;
i++;
} while (i<3);
}

este também pensava que dava tipo: =0 =2 etc...
mas é:

===0
==2
=4

é outra vez o mesmo "problema"?

Baderous
27-01-2008, 12:44
é outra vez o mesmo "problema"?

Sim.

arodrigues182
27-01-2008, 13:00
Só mais uma coisa:

char tab[] = "Coimbra"
char *ptr = & tab[4]

a) cout << tab[4]-tab[6]

este exercicio tem uma serie de alineas mas só tenho duvidas nesta. quando meto isto no pc aparece um numero qualquer. que numero é esse?

Baderous
27-01-2008, 13:59
Só mais uma coisa:

char tab[] = "Coimbra"
char *ptr = & tab[4]

a) cout << tab[4]-tab[6]

este exercicio tem uma serie de alineas mas só tenho duvidas nesta. quando meto isto no pc aparece um numero qualquer. que numero é esse?

tab[4] = 'b' (código ASCII (http://game-editor.com/tutorials/images/ascii.jpg): 98)
tab[6] = 'a' (código ASCII: 97)

tab[4]-tab[6] = 98-97 = 1

Claws
27-01-2008, 16:58
Talvez assim percebas melhor:

int main() {
int i, j;
for (i = 5; i>1; i--)
{
for (j = 5-i ; j < 5; j++)
{
cout << "!";
}
cout << "V" << endl;
}
}

O ciclo de j apenas actua em cout << "!";. Por este apenas actuar em uma única linha de código, podes simplesmente não colocar os "{}".

arodrigues182
27-01-2008, 19:22
tab[4] = 'b' (código ASCII (http://game-editor.com/tutorials/images/ascii.jpg): 98)
tab[6] = 'a' (código ASCII: 97)

tab[4]-tab[6] = 98-97 = 1

Ahhhhhhh. Ok muito obrigado. Não tava mesmo a ver.

É isso mesmo Wildson, assim já se compreende.