//Este programa calcula todos os numeros primos num dado intervalo
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cout << "Este programa descobre todos os numeros primos num dado intervalo" << endl;
cout << "\nIntroduza um numero, prima ENTER e em seguida introduza outro numero" << endl;
cin >> a >> b;
cout << "\nNumeros primos entre " << a << " e " << b << ":" <<endl;
for (int y = a; y=b; y++)
{
for (int z =2; z <= (y/2); z++)
{
c = y%z;
if (c = 0)
{
}
else
{
cout << y << endl;
}
}
}
cin.get();
cin.get();
return 0;
}
for (int y = a; y=b; y++)
for(var=x; var<=y; var++) {
qualquer();
coisa();
}
var = x;
while(var<=y) {
qualquer();
coisa();
var++;
}
var = x;
while() {
if(var<=y) {
qualquer();
coisa();
var++;
} else {
continue;
}
}
for (int y = a; y=b; y++)
for (int y = a; y[COLOR=Red]<[/COLOR]=b; y++)
[COLOR=Red][B] if (c = 0)[/B][/COLOR]
{
}
else
{
cout << y << endl;
}
if (c!=0) {
cout << y << endl;
}
Vais chegar lá
Troca
porCódigo:for (int y = a; y=b; y++)
eCódigo:for (int y = a; y[COLOR=red]<[/COLOR]=b; y++)
PorCódigo:[COLOR=red][B]if (c = 0)[/B][/COLOR] { } else { cout << y << endl; }
Código:if (c!=0) { cout << y << endl; }
Aquela linha tem uma falha grave: uma vez mais, estás a fazer uma comparação, pelo que usas o "==" em vez do "="
//Este programa calcula todos os numeros primos num dado intervalo
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cout << "Este programa descobre todos os numeros primos num dado intervalo" << endl;
cout << "\nIntroduza um numero, prima ENTER e em seguida introduza outro numero" << endl;
cin >> a >> b;
cout << "\nNumeros primos entre " << a << " e " << b << ":" <<endl;
for (int y = a; y <=b; y++)
{
for (int z =2; z <= (y/2); z++)
{
c = y%z;
if (c != 0)
{
cout << y << endl;
}
}
}
cin.get();
cin.get();
return 0;
}
//Este programa calcula todos os numeros primos num dado intervalo
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
[COLOR=Red] bool primo;[/COLOR]
cout << "Este programa descobre todos os numeros primos num dado intervalo" << endl;
cout << "\nIntroduza um numero, prima ENTER e em seguida introduza outro numero" << endl;
cin >> a >> b;
cout << "\nNumeros primos entre " << a << " e " << b << ":" <<endl;
for (int y = a; y <=b; y++)
{
[COLOR=Red] primo = true;[/COLOR]
for (int z =2; z <= (y/2); z++)
{
c = y%z;
[COLOR=Red] if (c == 0) {
primo = false;
continue;
}
[/COLOR] }
[COLOR=Red] if(primo==true) {
cout << y << endl;
}
[/COLOR] }
cin.get();
cin.get();
return 0;
}
1 - fazer um programa que faça todas as combinações de todas as palavras de n letras do abecedário. Isto é, para 4 letras, AAAA,AAAB,AAAC,AAAD,(...),AAAZ,AABA,AABB,AABC,AABD ,(...),AABZ,(...),AAZZ,ABAA,(......),ZZZZ.
Alguma dica para o exercicio 1?
Mais desafiante seria um algoritmo para as Knuth's Permutation
http://acm.uva.es/contest/data/0012/problemset/p8.pdf
Mas para esse, algo que te poderá ajudar: pega no valor numérico de cada letra e trata cada combinação como um número.
Este é daqueles em que se pensa muito e se escreve pouco.
Se tivesses de fazer combinações de um tamanho fixo poderias utilizar n FOR's para n letras, neste caso como o tamanho recorre-se também à recursão.
E pegando em números para as combinações ajuda como o Neptune disse.
E como passar isso para código?
Alguma dica para o exercicio 1?
cumprimentos,
//Este programa faz todas as combinações de n letras do abcedário
#include <iostream>
using namespace std;
int main()
{
int a;
char abc[25];
cout << "Este programa faz todas as combinações de n letras do abcedário" << endl;
cout << "\nIntroduza um numero:";
cin >> a;
abc[0]='A';
abc[1]='B';
abc[2]='C';
abc[3]='D';
abc[4]='E';
abc[5]='F';
abc[6]='G';
abc[7]='H';
abc[8]='I';
abc[9]='J';
abc[10]='K';
abc[11]='L';
abc[12]='M';
abc[13]='N';
abc[14]='O';
abc[15]='P';
abc[16]='Q';
abc[17]='R';
abc[18]='S';
abc[19]='T';
abc[20]='U';
abc[21]='V';
abc[22]='W';
abc[23]='X';
abc[24]='Y';
abc[25]='Z';
for (int z=0; z<= a; z++)
{
for (int n=0; n<=25; n++)
{
cout << abc[n] << endl;
}
}
cin.get();
cin.get();
return 0;
}
Um aparte, se estás a aprender não seria melhor usar C em vez de C++? ( Não gosto nada de ver esses cout's, prefiro o "velhinho printf" ).
1 - Declaraste uma string com 25 posições mas usaste 26, 0 a 25 = 26 posições;
2 - Não precisas dessas linhas todas para definir o abecedário, podes fazer logo:
char abc[] = "ABCDEFGHIJKLMNROPQRKRSTUVWXYZ";
Ou então escusas de utilizares um string para guardar isto tudo e podes usar antes 'A' + n, onde n é a posição da letra. abc[n] == 'A' + n.
3 - Assim à primeira vista não estou a ver como fazer isso sem ser de forma recursiva, vou tentar fazê-lo assim.
//Este programa faz todas as combinações de n letras do abcedário
#include <iostream>
using namespace std;
int a;
char abc[25];
int combina()
{
for (int z=1; z <=a; z++)
{
for (int n=0; n <= 25; n++)
{
cout << abc[n] << endl;
}
}
cin.get();
return 0;
}
int main()
{
cout << "Este programa faz todas as combinações de n letras do abcedário" << endl;
cout << "\nIntroduza um numero:";
cin >> a;
abc[0]='A';
abc[1]='B';
abc[2]='C';
abc[3]='D';
abc[4]='E';
abc[5]='F';
abc[6]='G';
abc[7]='H';
abc[8]='I';
abc[9]='J';
abc[10]='K';
abc[11]='L';
abc[12]='M';
abc[13]='N';
abc[14]='O';
abc[15]='P';
abc[16]='Q';
abc[17]='R';
abc[18]='S';
abc[19]='T';
abc[20]='U';
abc[21]='V';
abc[22]='W';
abc[23]='X';
abc[24]='Y';
abc[25]='Z';
combina();
cin.get();
cin.get();
return 0;
}
Até podias por abc[1] que se calhar não dava erro, mas está incorrecto visto que estás a usar memória que "não te pertence". Em programas de maiores dimensões que usem frequentemente a memória basta a diferença de um valor num sítio para que o programa crashe.Quanto á string eu sei que usei as 26 posições (o abcedário tem 26 letras)...já mudei um bocado o código, mas o efeito é o mesmo:
Amen"To iterate is human; to recurse, is divine."
Até podias por abc[1] que se calhar não dava erro, mas está incorrecto visto que estás a usar memória que "não te pertence".
O que eu fiz foi uma função que faz o "incremento" de uma certa posição.
Isto é, a sub Main chama a função Increment para incrementar a última posição "AAAA", ficando "AAAB". Isto é num ciclo.
A própria função Increment() faz a transformação de "A" para "B", da letra que está na posição passada como parâmetro da função, de modo a que, se estivermos a incrementar "AAAZ", passa para "AABA", mas faz isto por recursividade - se a última posição estiver "preenchida", ela (função) chama-se a ela mesma para incrementar a posição anterior. Assim, na situação "AZZZ", a função é chamada tantas vezes quantas necessárias para passar a "BAAA" (ela chama-se a ela mesma três vezes).
A recursão é mesmo o melhor a fazer.
Amen