Ir ao conteúdo
  • Cadastre-se

C Trabalho : Criando um cofre virtual em linguagem C


Duarte2020

Posts recomendados

16 minutos atrás, charles95 disse:

e bom que vou ganhando experiencia nessa linguagem

 

Pense bem nisso: se quer ganhar experiência nessa linguagem ou alguma outra não deveria estar usando um compilador configurado para a versão de 1998

 

Acha mesmo que não vai te fazer falta? Que nada importante mudou nesses anos todos?

 

17 minutos atrás, charles95 disse:

Não tive paciência não

 

Pois é: se tem algo de que vai precisar para estudar ou aprender nessa área é exatamente isso. Paciência. E ler muito.

 

Qual o ambiente que usa pra compilar, o IDE --- sim, IDE é masculino --- e a versão? Sabe ver isso? O mais comum que vejo aqui nesse forum é Code::Blocks e a versão atual acho que é 17.12. Tem um outro comum que vejo aqui que é o Dev-C++ e a versão acho que é 5.11.

 

Você não conseguiu acrescentar uma única opção? Algo simples como
 

A.png.7f789954692a28d8193147d5676d65f2.png

 

nesse Dev-C++ ou 

 

image.png.2f84aa62725b43a998cf73071db900c6.png

 


nesse outro Code::Blocks, por exemplo


Ou isso no caso da Microsoft
 

image.png.fd160a4eed7bdfd2b9c4dc4103850748.png

 

 

Link para o comentário
Compartilhar em outros sites

image.png.51d2bf62a922db9a6053f355fc22924a.png

 

Não tem nada de especial no código que eu escrevi e não era para você ter problemas de portabilidade. Esse lance de declarar variáveis no for realmente é muito antigo, faz mais de 20 anos que se usa isso. E para compilar precisava alterar aquela opção no seu compilador.

 

Mas você fez algo errado --- bem errado --- ao copiar: está claro na figura que colocou a função fase() DENTRO de main() e por isso a linha 24 aparece marcada. BEM MARCADA em vermelho... Não reparou? A barra em vermelho?

 

3 horas atrás, charles95 disse:

erro que aparece na hora de copilar o seu código, eu  nao sei qual é

 

"compilar" é a palavra. E o erro está marcado lá: você colou a função fase() dentro de main() e não é assim que funciona. Quer que eu poste um programa inteiro?

#define _CRT_SECURE_NO_WARNINGS

#include "stdio.h"
#include "stdlib.h"

int fase(int etapa, int alvo);

int main()
{
	int tentativas = 3;
	int senhas = 5;
	int ok = 0;
	int pre_a = 2;
	int  a = 12;
	int pos_a = 4;
	int* p = &a;

	const int senha[5] = { 1, 99, 17, 57, 50 };

	// vai ter 'x' tentativas de acertar as 'y' senhas
	for (int t = 0; t < tentativas; t = t + 1)
	{
		ok = 0;
		printf("\nTentativa %d de %d\n\n", 1 + t, tentativas);
		for (int f = 0; f < senhas; f = f + 1)
		{	// se o cara errou tenta ate 'tentativas'
			if (fase(f, senha[f]) == 0) break;
			ok = ok + 1; // passou mais uma
		};
		if (ok != senhas) continue; // outra tentativa

		printf("\nPORTA LIBERADA!\n\n");
		return 0;
	};
	printf("\nTente outra vez. Encerrando!...\n\n");
	return 0;
};

int fase(int etapa, int alvo)
{
	int numero = -1;
	printf("[Etapa %d de 5] Digite o numero: ", 1 + etapa);
	scanf("%d", &numero);
	if (numero != alvo) return 0;
	printf("voce passou pela etapa %d! Continue...\n\n", 1 + etapa);
	return 1;
};

int fase1(int etapa, int alvo)
{
	int numero = -1;
	printf("[Etapa %d de 5] Digite o numero: ", 1 + etapa);
	scanf("%d", &numero);
	while (numero != alvo)
	{
		printf("\nVoce digitou um numero incorreto!\n");
		printf("Tente novamente\n\n");
		printf("[Etapa %d de 5] Digite o numero: ", etapa);
		scanf("%d", &numero);
	};
	if (numero != alvo) return 0;
	printf("voce passou pela etapa %d! Continue...\n\n", 1 + etapa);
	return 1;
};

fase1() era o exemplo original, que não retorna enquanto o cara não acertar um valor...

 

Copie com cuidado e não mexa na ordem das coisas.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@charles95 Mas é cabeçudo mesmo, função dentro de main, o cara deu o tempo ai pra te ajudar, e aposto que ele tem outros afazeres, no mínimo tu tem que agradecer (bontando esse código pra funcionar) seguir a experiencia que ele passou, pois ele já deu o trabalho de te passar mastigado e de graça coisa que seu professor não fez nem pagando (O que já é feito) hahaha

  • Amei 1
  • Haha 1
Link para o comentário
Compartilhar em outros sites

@AnonymousLPH @arfnetoO filhão, não é que o professor não ensina.  E que ainda nem cheguei a estudar isso ainda. Foi exatamente  por isso que eu falei que desenvolvi o código usando apenas os conceitos que eu aprendi ate agora no curso, como por exemplo a estrutura de repetição aninhada, loop for. E uma coisa fácil....pra quem ja sabe, ja estudou e ja tem experiencia...Mas pra quem nunca viu, nunca aprendeu e ta começando agora não vai saber. No exemplo que eu peguei, não tinha o main. Na hora de coloca lo, eu não sabia que deveria ser colocado depois da quela função.  Eu ja falei que testou começando a aprender programar agora?? parece que isso não ficou claro.

adicionado 11 minutos depois

@arfneto Esse funcionou, depois que eu fiz umas modificações, ja que com a variável sendo declarada dentro do for não tava funcionando.  Mas não era bem isso que a atividade pedia. Na verdade era pra fazer um loop que sempre voltava para primeira fase quando o usuário erra qualquer numero, e só passaria para a próxima fase quando ele acerta. O loop só chegaria ao fim quando ele chegasse na mensagem "Porta aberta", ou seja, apenas quando desbloqueasse todas as chaves, enquanto isso continuaria em loop infinito. 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

40 minutos atrás, charles95 disse:

No exemplo que eu peguei, não tinha o main. Na hora de coloca lo, eu não sabia que deveria ser colocado depois da quela função.  Eu ja falei que testou começando a aprender programar agora?? parece que isso não ficou claro

 

Não entendo o que quer dizer. Você apenas não prestou atenção à conversa toda. Se tivesse feito isso veria que no tópico #5 


tem um lugar onde está escrito

image.png.79aae3eaf5d18c4130419abca220189c.png

 

E saberia onde colocar a tal função, porque lá tem o programa todo, escrito conforme o enunciado...
 

 

43 minutos atrás, charles95 disse:

Mas não era bem isso que a atividade pedia. Na verdade era pra fazer um loop que sempre voltava para primeira fase quando o usuário erra qualquer numero, e só passaria para a próxima fase

 

Bem, esse foi mais um caso em que você não prestou atenção... Veja o tópico #8


Se tivesse visto teria entendido que foi escrito assim para ajudar um usuário que perguntou
 

 

Citação

tenho uma dúvida que é : Por exemplo o usuario acertou a primeira senha e a segunda na terceira ele erra e aparece a senha incorreta, como fazer para que volte tudo do comeco, para que o cofre so abra se a senha for digitada na sequência exata se errar uma única vez tem que fazer novamente. Grato pela atenção e obrigado

 

E mais uma coisa que não teve ter notado, no programa que você acaba de copiar e testar:

 

image.png.4ee461efb61de23169b411eea22ec955.png

 

Tem as duas funções: a original conforme o enunciado e essa outra opção escrita para ajudar o usuário no tópico #8 que você não deve ter lido ou entendido...

 

49 minutos atrás, charles95 disse:

depois que eu fiz umas modificações, ja que com a variável sendo declarada dentro do for não tava funcionando

 

Acho que já expliquei isso com detalhe para você: não é esperto mudar um programa para o formato de 30 anos atrás porque seu ambiente de desenvolvimento está configurado errado. O esperto é incluir como te expliquei com detalhes no tópico 26, a opção certa.

 

Muita coisa importante mudou para muito melhor a partir do C de 89 e do C++ de 98. Seria ingenuidade achar que não. Mesmo esse lance de não poder declarar uma variável no for é um porre e se acha mesmo que deve fazer isso em todos os programas não sei o que dizer...

 

Acha mesmo que não vai ter problemas com os próximos programas?

Acha mesmo que a versão C89 de C e a versão C98 de C++, que são as que seu IDE está usando, são as certas em 2020? Acha mesmo que nada esperto apareceu em C desde 1989, 30 anos atrás? Ou em C++ desde 98?

 

Se acha, está errado. E só vai ter mais trabalho. 

 

57 minutos atrás, charles95 disse:

por isso que eu falei que desenvolvi o código usando apenas os conceitos que eu aprendi ate agora no curso

 

Não deve se sentir culpado em, digamos,  virar a página do livro e ver um novo conceito do curso. Sempre vejo alunos que dizer "eu ainda não aprendi isso", mas em se tratando de linguagens e algoritmos e coisas assim, muitas vezes é bem mais simples "virar a página" e ler o que falta do que ficar se debatendo para resolver só com "os conceitos que vi até agora", a menos que o enunciado ou o patrão exija isso.

 

Alguém escreveu
 

Citação

 
"O homem racional se adapta ao mundo. O irracional insiste em tentar adaptar o mundo a ele mesmo. E assim todo progresso depende do homem irracional" - George Bernard Shaw, em "The man and the superman" em torno de 1901
 

 

Pense nisso

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfneto "E saberia onde colocar a tal função, porque lá tem o programa todo, escrito conforme o enunciado..."

 Tem no primeiro exemplo que você postou. Mas como tu disse para usar o segundo exemplo.

 

""Bem, esse foi mais um caso em que você não prestou atenção... Veja o tópico #8""

 

Mas o que o usuário perguntou, é exatamente a mesma coisa que eu.E também a mesma coisa que o primeiro usuário perguntou. Inclusive, acredito eu, que todos nós três estamos lidando com a mesma atividade, dado a semelhança entre as questões e a data quem as perguntas foram feitas.

 

O que o usuário pergunta é como fazer um código que voltar no inicio, na primeira chave, toda vez que o usuário erra um numero. O que não é o que o seu programa  faz, pelo menos nesse código que eu testei. No seu programa quando o usuário digita o primeiro numero, a primeira chave passa para a segunda, da segunda para a terceira e assim sucessivamente, independente se o usuário erra ou não, e só no final aparece a mensagem de erro, e o programa se encerra. 

" não é esperto mudar um programa para o formato de 30 anos atrás porque seu ambiente de desenvolvimento está configurado errado. O esperto é incluir como te expliquei com detalhes no tópico 26, a opção certa."

 

Eu nao mudei nada, tá. Eu simplesmente baxei o Dev C++ versão 5.11. Desinstalei a anterior e instalei essa. 

 

 

 

"Não deve se sentir culpado em, digamos,  virar a página do livro e ver um novo conceito do curso.".

 

Precisaria virar a pagina para entender conceitos usados no seu exemplo. 

Eu não acho que eles iriam passar uma atividade que so pode ser resolvida com conceitos que eles ainda nao ensinaram, ate por que eu consegui faz o que eles pediram usando epenas o que tinha ensinado na aula 01.

 Mas eu estou vendo sobre funções hoje na aula 02, que foi transmitida ontem. 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

@charles95 Amigo, quando tu se forma nessa área, eu não sou um cara formado e atuando, mas pesquisei até aprender que: Você vai se tornar um profissional que resolve problemas dos outros. Se tu não resolve o seu problema, mesmo com o código que ele passou ali mastigado e de mão beijada, como você vai resolver o problema dos outros? A parada é essa, tu vem aqui a pessoa vai te auxiliar com um exemplo prático, alguns podem até te dar mastigado e pronto, mas tu tem que pegar e decifrar o código, destruir sua mente de madrugada(manhã, ou tarde haha), se tu quer realmente aprender a resolver problemas: Essa é uma profissão de prática, ou seja, ela é difícil, um exemplo é ter o sonho de ser igual ao Pablo Picasso, mas a única coisa que faz é pegar uma revista de colorir por números e começar a pintar com a "falsa impressão" de que está aprendendo, se tu não parar de querer algo mastigado e começar a se virar, decifrar e aprender além do que deve, tu não vai passar de um coloridor de revistas. O que eu digo é, ele passou algo bem prático e LIMPO, e  seu dever, (se quer aprender com um cara que já tem 60 anos e muita experiência na área) é replicar , entender e reproduzir um código do seu jeito. 

Link para o comentário
Compartilhar em outros sites

@AnonymousLPH "Se tu não resolve o seu problema,"  Na verdade, eu fiz o meu código. Eu resolvi o meu problema.

Eu não pedi nada mastigado, eu pedi ajuda, uma forma de fazer o programa voltar do inicio quando o usuaria erra e tal e blabla bla...ja expliquei tudo isso já. 

   O código dele não era exatamente o que a questão pedia. porém, entretanto, eu queria entende o por que esse codigo não estava funcionando aqui, mesmo ele não sendo o que eu queria. Por isso eu pedi ajuda. Mas eu ja entendi qual era o erro, certo? é errando e aprendendo. 

 

Link para o comentário
Compartilhar em outros sites

34 minutos atrás, charles95 disse:

Mas o que o usuário perguntou, é exatamente a mesma coisa que eu.E também a mesma coisa que o primeiro usuário perguntou. Inclusive, acredito eu, que todos nós três estamos lidando com a mesma atividade, dado a semelhança entre as questões e a data quem as perguntas foram feitas.

 

O que o usuário pergunta é como fazer um código que voltar no inicio, na primeira chave, toda vez que o usuário erra um numero. O que não é o que o seu programa  faz, pelo menos nesse código que eu testei. No seu programa quando o usuário digita o primeiro numero, a primeira chave passa para a segunda, da segunda para a terceira e assim sucessivamente, independente se o usuário erra ou não, e só no final aparece a mensagem de erro, e o programa se encerra

 

Não entendo o que quer dizer. Preste atenção: a questão original só foi exposta depois da abertura do tópico. No #5 tem uma solução como pedido, um exemplo. No tópico #8 um OUTRO usuário perguntou sobre como poderia alterar o comportamento para voltar ao início da leitura quando o cara erra ao invés de ficar encalhado em cada opção até o usuário acertar cada senha da série.

 

No programa que você copiou tem as duas funções, fase() e fase1() que você deve ter incluído sem ler.

 

Não adianta explicar de novo o que já disse. Não vai mudar o que está lá escrito, nmo tópico #5, no #8, nos seguintes ou no programa que copiou ontem.

 

34 minutos atrás, charles95 disse:

Eu nao mudei nada, tá. Eu simplesmente baxei o Dev C++ versão 5.11. Desinstalei a anterior e instalei essa

 

Se usa esse programa então poderia lá onde eu te mandei até o desenho da tela e saberia como alterar para poder usar as versões de menos de 30 anos da linguagem que está tentando aprender em 2020. Você não é meu aluno, e se fosse teria no primeiro dia ouvido algo sobre versões e linguagem e tal.

 

34 minutos atrás, charles95 disse:

Eu não acho que eles iriam passar uma atividade que so pode ser resolvida com conceitos que eles ainda nao ensinaram, ate por que eu consegui faz o que eles pediram usando epenas o que tinha ensinado na aula 01

 

O fato desse programa Dev-C++ vir configurado dessa forma é simplesmente uma bobagem. Acho mesmo ***** o cara em 20 de março de 2020, vi agora a data da última versão
 

image.png.a71351d8cf9601f919ff6539e91dc7d7.png

 

ainda tenha a cara de pau de deixar como padrão o C de 1989 e o C++ de 1998. E também não entendo como alguém, algum instrutor, escola ou hobbysta usa isso. Você vê em foruns daqui até a Austrália caras explicando como mudar esse troço. Não consigo entender.

 

Vou repetir: Em Tools | Compiler Options você inclui essas letrinhas

 

image.png.89ccb4408037fbf929a69ed321a4cd9f.png

 


Só isso. 10 letras. E tecla OK. E o compilador já tinha te mostrado isso na tela...

 

Para comparar, o ambiente que eu uso sequer admite algo anterior a C++ '14

 

34 minutos atrás, charles95 disse:

que so pode ser resolvida com conceitos que eles ainda nao ensinaram

 

Ninguém vai te ensinar isso. Sequer é um conceito.

 

Preste atenção: antes de 1989 você tinha que declarar

int c89()
{
	int i = 0;
	for (i = 0; i < 4; i = i + 1)
	{
		int j = 0;
		for (j = 0; j < 4; j = j + 1)
		{
			printf("i,j = (%d,%d)\n", i, j);
		}
	}
}

E precisava declarar as variáveis fora do loop. E era um porre porque muitas vezes a variável só existia como contador lá dentro mesmo. Num programa grande tinha muito disso. E como elas continuam existindo durante o programa todo era uma chance de erro também.

 

A partir de 89 passou a ser possível escrever

int c()
{
	for (int i = 0; i < 2; i = i + 1)
		for (int j = 0; j < 2; j = j + 1)
			printf("i,j = (%d,%d)\n", i, j);
}

 

Declarando a variável dentro do for que some depois que o comando executa.

 

É só isso: uma comodidade. Grande.

 

Mas não seja ingênuo ao achar que foi só isso que mudou nesses anos todos. A linguagem evoluiu MUITO e ninguém seriamente que ficar de fora.

 

Esse ambiente Dev-C++ é ruim, como é o Code::Blocks. A única razão pra usar isso nos tempos recentes é a sua escola obrigar. Seu patrão não porque eu nunca vi uma empresa usar isso, mas se existir um então será um motivo válido.

 

39 minutos atrás, charles95 disse:

Eu não acho que eles iriam passar uma atividade que so pode ser resolvida com conceitos que eles ainda nao ensinaram

 

Cuidado para não superestimar a sabedoria e interesse "deles"

 

Link para o comentário
Compartilhar em outros sites

@arfneto "No tópico #8 um OUTRO usuário perguntou sobre como poderia alterar o comportamento para voltar ao início da leitura quando o cara erra"   

  Foi a mesma coisa que o primeiro cara perguntou também. Veja o trexo da pergunta:

" Duarte2020: Só que não estou conseguindo retornar ao início quando erro uma senha, para começar tudo de novo , só estou precisando jeitar Isso, vcs podem me explicar detalhadamente,  ficarei grato, um abraço a todos."

 

Isso dai eu ja configurei ja, ta tudo ok.

 

 

 

 

exemplo.png.3d67138eb8a3f4213dcf5a083edf2f9f.png

Link para o comentário
Compartilhar em outros sites

55 minutos atrás, charles95 disse:

Veja o trexo da pergunta:

 

"trecho" certo?

image.png.93d8e3d68564f8d26c3791cd2fff5e95.png

 

o -v é outra opção, tem que ter um espaço. Ou pode deixar apenas -std=c17

 

Estaria ok se você tivesse digitado certo. Com o v grudado ao 7 sua opção vai ser ignorada.

 

1 hora atrás, charles95 disse:

"No tópico #8 um OUTRO usuário perguntou sobre como poderia alterar o comportamento para voltar ao início da leitura quando o cara erra"

 

Não, não foi e por isso as duas opções fase() e fase1() estão até no programa que você copiou e não viu. Leia atentamente. E escreva atentamente para não incorrer em erro como acima quando não deixou o espaço entre o 7 e o v

 

O -v serve para mostrar a versão do compilador. Não é necessário. Eu recomendo num primeiro momento porque assim pode confirmar que o compilador está usando as opções que você colocou antes...

Veja
 

image.thumb.png.fa58d4eb0a2b025715223bf1bed47374.png

 

e assim você vê que por exemplo está usando gcc 8.2 e o padrão c17

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!