sorteio da mega sena, erro no codigo

1. sorteio da mega sena, erro no codigo

rodrigo
newarch

(usa Arch Linux)

Enviado em 20/12/2021 - 22:44h

boa noite pessoal!
estava revisando tudo que aprendi até agora, mas to encalhado aqui

#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;
int main(void){

srand((unsigned) time(NULL));
int vl[6];
cout << "--- Bem vindo a mega sena ---" << endl;
cout << "escolha 6 numeros: ";
for(int ini=1; ini < 7; ini++){
printf("digite numero[%d]: ", ini);
scanf("%d", vl[ini]);
}


}


o que tem de errado?


  


2. Re: sorteio da mega sena, erro no codigo

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 21/12/2021 - 04:46h


newarch escreveu:

boa noite pessoal!
estava revisando tudo que aprendi até agora, mas to encalhado aqui

#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;
int main(void){

srand((unsigned) time(NULL));
int vl[6];
cout << "--- Bem vindo a mega sena ---" << endl;
cout << "escolha 6 numeros: ";
for(int ini=1; ini < 7; ini++){
printf("digite numero[%d]: ", ini);
scanf("%d", vl[ini]);
}


}

o que tem de errado?

Eu diria que errado é apenas o uso do scanf que pra funcionar ok deveria passar o endereço de vl[ini], assim: scanf("%d", &vl[ini]);
E outra também é o valor de ini começar em 1 e ir até 6, nas linguagens estruturadas modernas o padrão é começar contar do 0, sendo assim: vl[0] é a posição 1, vl[1] é a posição 2, etc até vl[5] que é a posição 6 do vetor.

Uma coisa que você deverria evitar é misturar C com C++. No seu for, você pode trocar facilmente por:

for(int ini=0; ini < 6; ini++){
cout<<"digite numero["<<ini<<"]: ";
cin >> vl[ini];
}



3. Re: sorteio da mega sena, erro no codigo

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/12/2021 - 13:08h

Complementando o que já disse, o SamL, ...

SamL escreveu:
newarch escreveu:
boa noite pessoal!
estava revisando tudo que aprendi até agora, mas to encalhado aqui
#include <iostream>
#include <time.h>
#include <stdio.h>


Como você está usando C++, convém usar <ctime> em lugar de <time.h> e <cstdio> em lugar de <stdio.h>.

using namespace std;
int main(void){


Em C++ (mas não em C!), esse void na lista de parâmetros da função, para indicar que ela não deve receber parâmetro nenhum, é desnecessário, e normalmente não é usado.

	
srand((unsigned) time(NULL));
int vl[6];
cout << "--- Bem vindo a mega sena ---" << endl;
cout << "escolha 6 numeros: ";
for(int ini=1; ini < 7; ini++){
printf("digite numero[%d]: ", ini);
scanf("%d", vl[ini]);
}
}

o que tem de errado?

Eu diria que errado é apenas o uso do scanf que pra funcionar ok deveria passar o endereço de vl[ini], assim: scanf("%d", &vl[ini]);
E outra também é o valor de ini começar em 1 e ir até 6, nas linguagens estruturadas modernas o padrão é começar contar do 0, sendo assim: vl[0] é a posição 1, vl[1] é a posição 2, etc até vl[5] que é a posição 6 do vetor.


Aqui um cuidado com terminologia e a confusão entre ordenação e cardinalidade. Eu acho inapropriado dizer, por exemplo, que “vl[0] é a posição 1”, mas é correto dizer que “vl[0] é o primeiro elemento”. O índice aplicado a um array ou vetor do C ou do C++ é um deslocamento em relação ao seu início. Esse deslocamento é uma quantidade, e, portanto, um valor cardinal. Entretanto, quando se fala em ordenação, não existe algo como “zerésimo”, porque toda ordenação começa com o primeiro elemento, seguido pelo segundo (que é o primeiro deslocado de uma unidade), pelo terceiro (que é o segundo deslocado de uma unidade ou o primeiro deslocado duas unidades) e assim por diante.

Muitas linguagens modernas vem usando, sim, o índice 0 para designar o primeiro elemento de uma coleção, mas não estou certo de que isso seja uma regra universal, pois tenho a sensação de que linguagens e ferramentas voltadas a aplicações matemáticas usam 1 como indicador da primeira posição de seus arrays, justamente porque esse uso na Matemática é mais comum (por exemplo: quando você aprendeu PA e PG, provavelmente aprendeu a chamar o primeiro elemento de a1, não a0).

De fato, acabei de achar um site que usa exatamente esse argumento, e apresenta várias linguagens, incluindo linguagens modernas, que usam 1 como primeiro índice válido em seus arrays: https://iq.opengenus.org/array-indices-start-from-1/.

Uma coisa que você deverria evitar é misturar C com C++. No seu for, você pode trocar facilmente por:

for(int ini=0; ini < 6; ini++){
cout<<"digite numero["<<ini<<"]: ";
cin >> vl[ini];
}




... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


4. Re: sorteio da mega sena, erro no codigo

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 22/12/2021 - 06:13h


paulo1205 escreveu:
Muitas linguagens modernas vem usando, sim, o índice 0 para designar o primeiro elemento de uma coleção, mas não estou certo de que isso seja uma regra universal, pois tenho a sensação de que linguagens e ferramentas voltadas a aplicações matemáticas usam 1 como indicador da primeira posição de seus arrays, justamente porque esse uso na Matemática é mais comum (por exemplo: quando você aprendeu PA e PG, provavelmente aprendeu a chamar o primeiro elemento de a1, não a0).

Valeu Paulo, essa eu não sabia. Eu pensei que somente as linguagens maios antigas que usassem índice 1 como início de array. De qualquer forma, é vivendo e aprendendo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts