Ir ao conteúdo

Simon Viegas

Membro VIP
  • Posts

    3.940
  • Cadastrado em

Tudo que Simon Viegas postou

  1. Olá. Por uma coincidência da vida, um canal de que sigo (que por sinal não é nem de programação em si) postou um vídeo sobre "Métodos de Ordenação". Para quem quiser, vale a pena dar uma conferida no vídeo completo!! Vejam como se comporta um Bubble Sort. Obs. 1: só não entendi porque pega de 6 em 6 linhas... pelo algoritmo "padrão", acho que deveria ser de 2 em 2... mas em fim.... acho que demonstra bem o que quis dizer sobre o que entendo desse método... observem que a ideia é que essa faixa vermelha seria a bolha.. que vai "levando para sua direita" o maior termo a medida que avança... no final de cada ciclo as últimas posição ficam ordenadas. Para esse código: ..que é mais popular, a cada loop, a linha que representa a posição x, já fica na última primeira posição não ordenada, e a linha que representa o y, vai navegando até uma posição antes começa da posição posterior ao x até a última posição, ou seja, as trocas são feitas diretamente na posição que quer ordenar... é parecido, mas é diferente, rs. obs. 2: não sei qual método é mais eficiente, ou quais as diferenças na prática... mas é fato que esse acima é bem mais simples e fácil de entender... apenas estou tentando reforça que está fugindo um pouco da definição que entedi do Bubble Sort, ou seja, apesar de popularmente ser conhecido como Bubble Sort, ele seria outra coisa. obs. 3: como tentado descrever acima, esse código está ordenando do início para o fim, ou seja, vai ficando em ordem da esquerda para direita... (a "bolha" está navegando no sentido oposto a posição que quer ordenar). O "ponteiro da posição" fica indo e voltando. obs. 4: acho eu que o Bubble Sort lá do vídeo tenta usar a característica de manter as verificações em posições próximas. Desta forma, diminuindo um pouco o custo de chegar as posições, ou seja, tende a ser menos custoso ir de uma posição ao lado do que uma posição mais afastada... num estrutura, por exemplo, de uma lista encadeada, para ir da 1ª a 10ª posição, o computador precisa ir pulando de casa em casa, ou seja, do 1 para 2, do 2 para 3... daí precisaria dar muito mais saltos. O que acham? Att
  2. Tranquilo. Eu imaginei que ainda não tinha chegado lá, pois senão provavelmente já estaria usando... . OK. Se for para esse mesmo exercício, pode dar continuidade neste tópico... se for um exercício diferente, por favor, abra um novo tópico.
  3. Olá @Lucas Da Silva Aleixo. Poste o que já conseguiu fazer e onde está com dúvidas. No aguardo.
  4. Caro usuário, Seja bem-vindo ao Fórum do Clube do Hardware. No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware. Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício. Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal. Esperamos que compreenda. Atenciosamente, Equipe Clube do Hardware
  5. Perfeito! Me parece que ficou tudo certo agora! . Lembrar que o tempo de cada corredor tem que ficar como proposto no enunciado: ADENDO: Alguns pontos que podem ser interessante: 1) GERAR NÚMEROS ALEATÓRIOS O Visual disponibiliza uma ferramenta para gerar números aleatórios bem interessantes... Abaixo, para efeito de demonstração, alterei o código para poder gerar os dados de entrada, veja: algoritmo "semnome" var c1,c2,c3,c4, tempo_maior, tempo_menor:real corredor_ma, corredor_me: inteiro inicio //ler os dados do usuário ALEATORIO 1400, 1700 //obs.: as duas últimas casas serão usadas como a parte decimal escreva("Informe o tempo do Corredor 1: ") leia (c1) escreva("Informe o tempo do Corredor 2: ") leia (c2) escreva("Informe o tempo do Corredor 3: ") leia (c3) escreva("Informe o tempo do Corredor 4: ") leia (c4) ALEATORIO OFF //divide por 100 para "criar" 2 casas decimais c1:=c1/100 c2:=c2/100 c3:=c3/100 c4:=c4/100 //inicializa as variáveis tempo_maior := c1 tempo_menor := c1 corredor_ma := 1 corredor_me := 1 //verifica o maior e menor valores se c2 > tempo_maior ENTÃO tempo_maior := c2 corredor_ma := 2 senao se c2 < tempo_menor ENTÃO tempo_menor := c2 corredor_me := 2 fimse fimse se c3 > tempo_maior ENTÃO tempo_maior := c3 corredor_ma := 3 senao se c3 < tempo_menor ENTÃO tempo_menor := c3 corredor_me := 3 fimse fimse se c4 > tempo_maior ENTÃO tempo_maior := c4 corredor_ma := 4 senao se c4 < tempo_menor ENTÃO tempo_menor := c4 corredor_me := 4 fimse fimse //exibe o resultado final escreval("O corredor",corredor_ma," tem maior tempo:",tempo_maior) escreval("O corredor",corredor_me," tem menor tempo:",tempo_menor) fimalgoritmo É muito útil para testes. obs.: mais uma vez lembrando que para o seu código, o valor deve ficar predefinido. O código acima é apenas para demonstração... e ajudar também nos testes. 2) USO DE VETORES Da forma que você fez, utilizando variáveis individuais, foi necessário criar um conjunto de se para cada variável. Se tivessem 1000 nadadores, seriam 1000 variáveis e 2000 se. Então, no Visualg, seria possível substituir as 4 variáveis por um vetor de 4 posições. Desta forma, cada variável pode ser acessada por uma variável, assim, precisando ter apenas um conjunto de se.... Aí precisaria implementar uma laço de repetição para controlar as posições, ou seja, em vez de usar c1, c2, c3 e c4, usaria c[x]... onde o x variaria de 1 a 4. Aí depende já estudou vetores ou se tem interesse em avançar um pouco... No aguardo.
  6. Não entendi esse "quanto tempo"... mas em fim, é só uma questão de referências, ou seja, ao se comparar duas coisas, por exemplo, o "valor atual a ser comparado" e "valor contido no maior", é necessário que ambos as coisas já tenham algum valor antes. Correto? Veja: senao se c1 < tempo_menor então No momento que esta instrução está sendo executada, qual o valor de tempo_menor? a variável não tem (não deveria ter) valor algum nela... a variável não foi inicializada por você. Entretanto, o desenvolvedor Visualg já pré-inicializa as variáveis globais com um valor padrão. Tipo... os reais e os inteiros ficam com 0, os caracteres ficam com "" (sem caracteres), os variáveis lógicas ficam com falso etc. Basta ir pressionando F8 e verificar que no lado direito, ali nas "Áreas das variáveis de memória" o valor que começa. Veja, isso não é "natural", ao se declarar uma variável, o programa apenas "reserva" um espaço na memória, e na memória (provavelmente) já existe um "lixo" estruturas anteriores (o computador não perde tempo zerando a memória, simplesmente larga lá... é como copiar e apagar um filme no HD... veja que para apagar, é praticamente instantâneo, o SO apenas "marca" como apagado e pronto. O "lixo" fica lá.. o espaço fica "livre para ser usado")... daí, para facilitar a vida do programador, o Visualg já atribui um valor a variável. É um processo mecânico... ao criar a variável, já faz o "favor" de dar um valor a ela. Entende? Então, se c1=15.98 e tempo_menor=0, quem é o menor??? Ou seja, a condição NUNCA iria ser verdadeira... Só seria possível atualizar se um dos valores dos c's fossem negativos!! "Ah! Simon, mas o programa esta dando certo." Nops! é apenas uma coincidência... é uma coisa que sempre tento levantar: o que importa não e o resultado, mas sim o mecanismo para chegar a um. Na verdade, o Visualg que é bugado.. rs. Duvida? Mude, por exemplo, o valor de c1 para ser o menor (ex.: 10.23) e veja o que acontece!!! Entretanto, esse "bug" está sendo ocasionada por um erro de sintaxe do seu código. Você não pode colocar o senao e o se na mesma linha, tem que ficar igual como @devair1010 fez. obs.: isso é uma limitação do Visualg, ele teria que aceitar da forma que você fez OU avisar que não poderia fazer assim... no seu caso, ele apenas rodou, mesmo com o a sintaxe errada... Logo: OU Você inicializa o menor com um valor alto e o maior com um valor baixo OU Você inicializa ambos com o primeiro valor (recomendo esse) OU Inicializa de alguma outra forma O que não pode é usar a variável não inicializada . É um erro conceitual. Sobre Que erro? tem como citar para eu entendermos melhor? RESUMINDO: - inicialize as variáveis maior e menor; - não deixe o senao e o se na mesma linha. No aguardo.
  7. Olá @bnmatrix. Justamente! O maior é inicializado com um valor baixo e o menor com um alto. Na primeira verificação sempre o menor ou maior será atualizado. Daí tem que continuar verificando se o c2, c3 e c4 são menores que o menor ou são maiores que o maior. No final, menor e maior terão o menor e maior valor respectivamente. Uma outra forma mais elegante seria inicializar o menor e maior com c1. Daí mesma coisa.. para cada uma das outras variáveis, verifica se é maior ou menor. Tente implementar e pode o código aqui. Qualquer dúvida é só perguntar. No aguardo.
  8. Olá @Davi Lobo. Já conseguiu resolver a questão? Por favor, poste o código atual para servi de base para outro usuários, ou caso não tenha terminado, posta também onde está com dúvidas. No aguardo.
  9. Olá @Leoveira. Então, o foco para resolução de qualquer coisa é primeiramente entender o que ser quer. O enunciado "oficial" geralmente é o melhor caminho, se possível, poste ele exatamente como foi pedido... pois é ele quem define as regras do negócio. Não adiantaria fazer "certo" algo que não se pediu... Então, pelo que você postou, acho quer seria algo assim: 12 //primeira linha, um número 42, 22 //segunda linha, dois números 65, 87, 34 //terceira linha, três número 56, 1, 98, 23 //quarta linha, quatro números Seria isso? caso contrário, além do enunciado, dê uma uma explicação de como mais ou menos seria. Se for isso, ai partimos para entender o funcionamento da lógica aplicada... Veja, a quantidade de números por linha está igual ao "número da linha". A relação é bem direta e simples. Só para frisar: foque no problema... entenda o que ser que ser feito, só depois tente achar uma solução. Acredite: é comum tentarmos focar apenas no resultado, ou seja, em ter que "entrar algo"... focando no problema, a solução vem por osmose. Daí, você precisa implementa essa característica no seu algoritmo... Para ajudar, pense assim. Como faria para imprimir um número em cada linha? tente fazer isso. Simplesmente imprima um número por linha... só isso. E posta o código aqui. Perceba que a lógica (que achei que é) só muda apenas que não será só um número por linha... Posteriormente, quando já tiver conseguindo com uma linha, tente alterar para "imprimir a quantidade de números de acordo com o número da linha". obs.: só tente fazer o programa final (de acordo com enunciado) DEPOIS DE TER CONSEGUIDO COM UMA LINHA... a ideia que você já tenha uma base da estrutura do programa, ou seja, saber como fazer implementar na linguagem de programação escolha, assim tendo que analisar apenas a parte da lógica em relação ao "detalhe" de ir aumentando a quantidade por linha. No aguardo.
  10. Olá. Apesar de não ser exatamente o foco do postagem, vou tentar complementar sobre o método de ordenação escolhido... vamos lá: @devair1010, apesar de popular, creio que esse código acima NÃO SEJA o Bubble Sort... veja, o Bubble Sort tem a seguinte característica: Então, a cada loop, uma bolha vai subindo a levando o menor entre as duas posições adjacentes... ou seja, a medida que vai subindo, vai deixando o elemento da direita maior... no final, a última posição vai ter o maior elemento. Já no seu código, a cada loop, a comparação é feita sempre na mesma posição, ou seja, seria algo como: "a cada passagem fazer a última posição ter o maior elemento da sequência"... Seria como efetuar o algoritmo para encontra o "menor" valor para cada posição. Apesar do algoritmo ser mais simples, entendo que são coisas diferentes. Poderia também ser comparado ao "Selecion Sort", a diferença é que no "Selecion Sort" ele não fica trocando de posição, prefere primeiro achar a posição desejada ao final trocar. Vamos tentar analisar o código do @Esnack: //BUBBLE SHOT for (x = 1; x < n; x++) { //aqui determina a quantidade de loops, ou seja, 'total-1", já que a primeira posição // já estará ordenada quando terminar a segunda. Começa com 1 para facilitar o uso a seguir for (y = 0; y < n - x; y++) { //aqui determina até onde comparar a cada loop, ou seja, "do fundo do tanque até //uma posição anterior a posição que quer ordenar", pois a anterior vai comparar com //a próxima, que por consequencia será a últma. Se a última ficasse a esquerda, não existiria //uma posição depois para comparar OU iria comparar com uma posição que já está ordenada (perda de tempo) if (vetor[y] > vetor[y+1]) { //a bolha compara a posição atual com a próxima, para deixar o da direita maior, logo: //se posição atual menor que a posição posterior aux = vetor[y]; //então efetua a troca vetor [y] = vetor[y+1]; vetor[y+1] = aux; } } } Daí, o que pode existir são variações/melhorias, como em vez de fazer "total-1" vezes para o loop externo, poderia fazer até "enquanto houver trocas". Por ai vai. RESUMINDO: Teoricamente o código dele é um Bubble Sort. Teoricamente o seu código é mais simples, e poderia ser utlizado, mas não poderia* chamar de Buubler Sort. É como chamar chocolate branco de chocolate... pode ter a popularidade ou marketing que for, mas não é!! Assim como tomate não é legume (é fruta); Assim como caju não é fruta (a fruta é a castanha); Assim como o Palmeiras não tem mundial.. Etc No aguardo
  11. Olá a todos. @jailton.pires, seja bem vindo ao Fórum do Clube do Hardware. Inicialmente vamos tentar analisar o código atual e ao mesmo tempo tentar dar uma revisada. 1) NOMENCLATURAS DE VARIÁVEIS É recomendado utilizar nomenclaturas que remetam a funcionalidade da variável. Abaixo demonstro um exemplo: algoritmo "Vendas Bolo" var //DADOS DO BOLO nomeBolo1 , nomeBolo2 :caracter //nome do bolo precoBolo1, precoBolo2:inteiro //preco do bolo para venda //DADOS DE VENDA codigoBolo :inteiro //codigo referente ao bolo desejado qtdBolos :inteiro //quantidade de bolos que deseja comprar totalPedido :inteiro //valor total da venda inicio //"inicializa" os dados dos bolos nomeBolo1 <- "Chocolate" precoBolo1 <- 10 nomeBolo2 <- "Nozes " precoBolo2 <- 5 Observe que só pelo nome dá para supor o que a variável se propõe. Mas no seu código ficou bom também... 2) ESTRUTURA DE SELEÇÃO Os se servem justamente para "selecionar" qual caminho o fluxo do código deve seguir... como sabido, o Visualg vai lendo "de cima para baixo"... a estrutura de seleção então vai verificar a expressão e "desviar" o fluxo de acordo com o seu valor. Se VERDADEIRO entra no se, se FALSE pula para próxima estrutura. Então, no seu código, você aplica um para exibir o bolo selecionado.. OK. Mas para calcular, efetua conta para ambos os bolos.. é necessário "selecionar" também... só calcular para o bolo que foi escolhido, ou seja, precisa de um se/senão para exibir apenas o "Valor total" correspondente ao bolo escolhido. *** Por enquanto seria isso... tente ajustar o seu código com esses 2 itens acima. Ai posta o código aqui, e se for o caso onde está com dúvidas. Agora outros pontos importantes: 3) VERSÃO DO VISUALG Recomendo utilizar a versão mais recente do Visualg. Terá alguns recursos a mais... e também é a versão mais popular. Pela imagem e por algumas características do código, acredito que esteja utilizando a versão 2.0. A versão mais recente está na 3.0.6.5. Link para download: http://visualg3.com.br/ obs.: no lugar do tipo literal, precisará usar caracter. 4) USO DA TAG CODE Aqui é para melhor organização no Fórum... Para postar código aqui, favor utilizar a tag CODE. Basta clicar no botão <> que consta na barra de ferramentas e colar o código lá. Um pouco mais sobre aqui: Poste seus códigos corretamente! 5) USO DE VETORES/MATRIZES EM VISUALG (Array) Sobre o exemplo do @XenoStory referente ao vetor do bolo... só um adendo para ficar mais claro: como o exemplo foi dado como o «funcionamento de linhas e colunas no Excel», subentendem-se que o esse vetor teria 2 coordenadas, ou seja, uma para indicar a linha, e outra para indicar a coluna. Daí, para ler uma informação do bolo, assim como no Excel, é necessário informa as duas coordenadas: da linha e da coluna, ex.: Tendo a tabela: Em qual coordenada está o nome do primeiro bolo? está na linha 1, coluna 2. Perceba que para o contexto do problema, a "matriz" em si, só é a parte destacada em vermelho. O restante é apenas para ilustrar. Para ler do teclado seria algo como: leia(bolo[1,2]) Então... no Visualg esta estrutura é bastante usada... onde a linha representará o "posição do objeto no vetor" (primeiro bolo na posição 1, segundo na posição 2 etc) e a coluna representa cada atributo desse objeto (no caso, posição 1 é do código do bolo, posição 2 é da descrição e a terceira do valor etc). Não tem mistério... Verás que uma das grandes vantagens do vetores é que poderá usar variáveis para acessar as coordenadas... o que reduzirá em muito o tamanho do código. Mas sugiro que tente resolver primeiro o citado no item 1 e 2. Depois tenta entrar nesse mundo dos vetores. No aguardo.
  12. Olá @Bernardo Nunes Qual a sua dúvida? entendi do que falta, mas o que nelas está com dificuldades? Peguei o seu código acima, mas está dando erro. Não compila. Possivelmente por que não postou o código com a tag CODE . Acho que "sumiu" uns [i ]... Por favor, edite a sua postagem e cole novamente o código dentro da tag CODE, beleza? Vamos lá: Escolha um dos pontos e tente fazer... Por exemplo, pegue a parte do "ordenar". Então, assim como citado por @Mauro Britivaldo, existem diversos métodos de ordenação prontos. Você não precisa reinventar a roda . Sugiro utilizar o Bubble Sort... é o mais popular e um dos mais simples de entender e implementar. Agora tudo vai depender também de como quer utilizar a ordenação... mas vamos supor que adicione um item ao menu para "Ordenar de for crescente ", ai só pegar o vetor e aplicar o método correspondente. Ao escolher para listar, os dados devem aparecer em ordem. Para remover, tem o exemplo do @devair1010... altere para um valor que seja definido como "apagado"... poderia ser o 0 também. Para Estatísticas, precisaria especificar melhor o que precisa... RESUMINDO: Tente implementar ou a ordenação ou a remoção, e posta o código aqui e onde está com dúvidas. Depois ver outro item. No aguardo.
  13. Olá @Esnack. Então, ou já não estava funcionando antes, ou você mudou além de onde deveria... o uso do cálculo do tempo não tem interferência alguma. Minha sugestão: Revise seu código código, veja qual comportamento está errado e atue nele. Por exemplo: Peguei o seu código e apenas rodei aqui, deu isso: Tempo de execução do programa: 0.000000 -------------------------------- Process exited after 0.03777 seconds with return value 0 Pressione qualquer tecla para continuar. . . Ou seja, não bate com a sua descrição do erro: RESUMINDO: Poste o que você acha que está errado, ex.: ou Veja, o que importa é o problema e não a partir de qual momento passou a dar problema... ou seja, essa descrição serve para ter uma base do problema em si (que não ficou claro)... se fosse isso, como sugerido por @Mauro Britivaldo, retire o trecho do tempo e volta para o que estava antes... sacou? Tecnicamente você só postou um código e disse que não está funcionando... é necessário especificar melhor "o quê não está funcionando". Mas para adiantar, vamos lá: Você está usando n no último for, mas não inicializou a variável, ou seja, n está provavelmente com 0; Use algo como: int n=100; obs.: deixe com 100 mesmo, mais fácil para testar... mais pra frente, mude pra 1000. Isso resolve o erro de "não aparecer nada"; Ah! lá no primeiro for, use x = n... em vez de x=1000. Faça essa alteração, teste o programa algumas vezes e vê se está tudo certo, caso não, tente encontrar o erro e corrigir. Aí, posta o código atual e onde está com dúvidas... ou o "código final" para revisarmos e também servi de base para outro usuários. No aguardo.
  14. Olá @christian3l. Isso. São pelo menos três pontos diferentes: Rodar sem erros; (não dá erro ao compilar) Entregar o resultado correto; (roda, e as respostas condizem com o que é proposto) Fazer o certo de modo certo. (seguir uma lógica coerente para chegar ao resultado) Então, no seu código, me parece que está conseguindo chegar ao item 2. O programa "aparenta" está respondendo bem as entradas informadas. Se coloco 5, me retorna 120. Se coloco 0, me retorna 1. Se coloco 6, me retorna 720. Em relação ao 3, já vemos um probleminha: uma função foi criada, mas não está sendo utilizada em momento algum. Experimente apagá-la... o programa vai funcionar exatamente da mesma forma, ou seja, o "objetivo" de criar: não foi atendido. Beleza? Abaixo complemento... Em relação ao código Abaixo fiz as alterações e tentei explicar no próprio código, veja: algoritmo "Nome do meu programa" //FUNÇÃO QUE RECEBE UM NUMERO INTEIRO E RETORNA O VALOR DE SEU FATORIAL funcao fatorial(x: inteiro):inteiro var //DECLARAÇÃO DAS VARIÁVEIS LOCAIS (Necessárias para uso interno da função) fat, c :inteiro //observe que fat e c só é necessário para esse escopo do cálculo. Não precisa ser global inicio fat <- 1 //inicializa com o valor padrão para c <- 2 ate n passo 1 faca //do segunto até o próprio valor do número fat <- fat*c //multiplica o valor atual pela o número atual da sequência fimpara retorne fat //retorna o resultado do fatorial de x. ao final, a função conterá o valor da resposta fimfuncao //DECLARAÇÃO DAS VAIÁVEIS GLOBAIS var n :inteiro //valor que será fatorializado resultado :inteiro //recebe o resultado da função inicio escreva("Digite um numero: ") leia(n) resultado:=fatorial(n) //copia o valor retornado em uma variável auxliar escreva("O fatorial de",n," =",resultado) fimalgoritmo ou, como a função já tem a resposta, poderia imprimir direto, ex.: algoritmo "Nome do meu programa" //FUNÇÃO QUE RECEBE NUMERO UM INTEIRO E RETORNA O VALOR DE SEU FATORIAL funcao fatorial(x: inteiro):inteiro //DECLARAÇÃO DAS VARIÁVEIS LOCAIS (Necessárias para uso interno da função) var fat, c :inteiro inicio fat <- 1 para c <- 1 ate n passo 1 faca fat <- fat*c fimpara retorne fat fimfuncao //DECLARAÇÃO DAS VAIÁVEIS GLOBAIS var n :inteiro //valor que será fatorializado inicio escreva("Digite um numero: ") leia(n) escreva("O fatorial de",n," =",fatorial(n)) fimalgoritmo Para simplificar, PROCEDIMENTO e FUNCAO são basicamente a mesma coisa. Elas fazem algo... é como separar um trecho do código e dar um nome a ele, ou seja, toda vez que eu invocar um procedimento ou função, eles irão fazer o que se propõe... sem os procedimentos ou funções, seria, por exemplo, necessário copiar o trecho toda vez que precisasse. Outro ponto interessante, é que pode servi para "organizar" o código.. deixar mais estruturado. Observe que que esse código acima o seu fazem a mesma coisa, a diferença que foi solicitado que o trecho do cálculo do fatorial ficasse separado. Essa separação tem utilidades... Sugiro que faça o seguinte: Compare seu código original: algoritmo "Codigo original" var n, c, fat: inteiro inicio fat <- 1 escreva("Digite um numero: ") leia(n) para c <- 1 ate n passo 1 faca fat <- fat * c fimpara escreva("O fatorial de ", n, " = ", fat) fimalgoritmo com o que postei mais acima. No "meu" código apenas separei o trecho do cálculo do fatorial. Compare um código com o outro.. tente entender TODOS os detalhes. Em relação a esse exercício, alguma dúvida? se sim, quais? obs.: Use esse tópico apenas para esse exercício Fique a vontade para tirar dúvidas sobre ESSE exercício. Após tirar todas as dúvidas, tente ajustar o segundo... Crie uma nova postagem com o código atual e indique onde está com dúvidas ou se precisa que revisemos também. No aguardo.
  15. Olá @Daniel De Marco Fucci. Nesse sentido não... pois você estaria "copiando" de você mesmo, logo, não sendo uma cópia... talvez o problema esteja em terceiros copiarem, ai depende da "filosofia" do professor. Alguns ameaçam que se 2 ou mais forem iguais, todos tomam zero (ou é descontado x pontos). Então, se código é seu, você que desenvolveu, e sabe explicar como funciona e como chegou as determinadas conclusões no algoritmo, eu particularmente não vejo problema algum em usar um fórum. Por sinal, poderia citar interagiu com um para professor e verificar o que ele acha. Outra coisa: não se engane... o professor costumar saber (para não dizer "sempre sabe") se o aluno copiou ou não. Entendo que a a questão não é "ser pego ou não", mas sim "ter copiado de fato ou não". RESUMINDO: Por mim poderia postar o código normalmente, mas vai de você. Se entender que não tem problemas, posta o código. Ai os colaboradores revisam e tentam te passar novas dicas ou sugestões de correções. PS: sobre o que citei: Sugiro que tenha dois programas: - Um sem essa verificação, já que a explicação do enunciado não fala sobre isso; - Outro, que seria basicamente uma copia do primeiro, com uma alteração para verificar se existe algum número repetido. Se tiver repetido, NÃO SERÁ quadrado mágico. (vide explicação no meu comentário anterior) No aguardo.
  16. Olá @Daniel De Marco Fucci. Seja bem vindo ao Fórum do Clube do Hardware. Por favor, poste seu código atual para analisarmos e também poder servir de base para outro usuários. ADENDO: Observação inicial, por favor, poste seu código atual, independente do que levantarei abaixo. Creio eu que a explicação do enunciado está errada... ou pelo menos está incompleta... veja, para ser um "quadrado mágico" não basta "a soma dos elementos de cada linha, coluna e diagonais principal e secundária iguais". Faltou um grande detalhe: Os números não podem ser repetidos. Pesquise sobre "quadros mágicos" em qualquer lugar, e verás que todos* são assim... a maioria das pessoas nem se tocam em citar (na verdade não vi ninguém citando, tive que procurar um pouco mais para achar a citação abaixo) que não pode ser repetido, rs. (acredito eu, que em algum lugar alguém não citou, e o restante "apenas" copiou... só pode). Nesse sentido, uma melhor definição seria essa: Vejam, sem essa característica, todo e qualquer quadrado com número iguais seriam mágicos. Ex.: 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 O que tem de mágico nisso??? Uma excelente explicação, um pouco mais completa e inclusive com vídeo, achei aqui: http://www.profcardy.com/cardicas/quadrado-magico.php obs.: veja que no texto também não reforça que não pode ser repetido, mas todo o contexto levaria também a essa conclusão. RESUMINDO: Se levar em consideração apenas a definição do enunciado está no caminho certo, caso seja na (provável) definição "real", precisaria desenvolver um pouco mais. É relativamente simples, mas que faz muita diferença.
  17. @edgar alvessgsd seja bem vindo ao Fórum do Clube do Hardware. É em qual linguagem? Por favor, poste o código do que já conseguiu fazer e onde está com dúvidas. No aguardo.
  18. Olá. Tem razão em ambos aspectos. Att
  19. Olá @JhekHunter. Respostas: não e fez. Ou seja, não é possível devido a limitação do Visualg (eu pelo menos desconheço como faz), mas de qualquer forma, você precisaria definir o tipo do parâmetro de acordo com o que você precisaria. Algo como: procedimento troca(var veti, vetj :TIPO_DO_VETOR) var aux :TIPO_DO_VETOR inicio aux <- veti veti <- vetj vetj <- aux fimprocedimento Entendeu? Mas, como citado, o Visual não aceita passar vetores por parâmetro... obs.: não lembro se aceita "atribuir vetores" assim diretamente, ou seja, se for o caso, seria necessário atualizar posição por posição. Como está o código que está funcionando? tem como postar aqui?
  20. Sobre "está satisfeita" entra outro mérito.. como citado: Ou seja, nesse sentido ela está pode está "apenas achando que está resolvido"... pelo que já citei: não está Como sugerido anteriormente: independente de exibir um suposto resultado certo ou não, o "processamento" tem falhas, ou seja, na programação nem sempre o fins justificam os meios... mesmo que na tela fique tudo certinho... o enunciado não está sendo respeitado na questão do devolver o resultado do calculo no método. Não entendi exatamente essa parte... mas cai no mesmo foco...: não estamos analisando qual a expressão, mas apenas como vou dar a resposta. Resumidamente deveria ficar algo assim: int expressao (int x, int y) { int resultado_da_expressao; resultado_da_expressao=//aqui o cálculo da expressão qualquer que seja return resultado_da_expressao; } e na hora de exibir: printf("o valor da expressao = %d\n", expressao(x,y)); Para resolver isso: - inicialmente faz com a expressão X*Y. (pois é mais simples, e pode continuar usando int); - altera a expressão para expressão que quiser, ao passo de fazer oooutras adaptações que serão necessárias... (por isso sugeri fazer apenas com X*Y primeiro). Conseguiu entender o que quero dizer? se comentei algo errado, favor citar ou se tiver dúvidas sobre algo, comenta ai... Mas em fim, tudo agora depende @mariana_____silva.. saber em que ponto está para seguir em frente...
  21. Olá @Mauro Britivaldo. Faz sentido para mim... "coerentemente" falando poderia ficar: Assim: X*Y/(2*Y) Ou assim: XY/(2Y) Ou seja, a falta do "*" apenas no numerador gerou dúvidas... Mas, independente da interpretação da expressão, o meu foco é na estrutura do problema, não cálculo da expressão, vejam: O que vez depois do ":", por hora, não importa* (é importante, mas não foi meu foco)... poderia ser qualquer coisa... Então, o que estou colocando em jogo no momento é COMO RETORNAR, e não O QUE RETORNAR. O "erro" estaria evidenciado aqui: Percebam que o método expressao() retorna um valor (não importa o quê), mas depois ainda está sendo dividido por algo (não importa que), mas é percebível que esse algo, teoricamente, faz parte da expressão em si. O que eu enfatizo é que o método deve retornar UMA REPOSTA FINAL (independente do que seja). Deveria ser algo como: printf("o valor da expressao = %d\n", expressao(x,y)); A diferença e importante entre uma coisa e outra. Pois a função precisa "devolver o resultado do calculo". E não "devolver parte do cálculo e terminar a conta depois". Entendem? Devido a isto, nessa minha interpretação do problema, a sugestão continua válida: ADENDO: Por que fazer apenas com "X*Y"? Pois justamente não importava (não imposta ainda) o que se quer devolver, mas que deve devolver algo dessa forma, ou seja, conseguindo fazer com "X*Y", passaria para analisar o que de fato a expressão é... ou devolveria "X*Y(2*Y)" (como supostamente achei que deveria ser); ou devolveria "XY/(2*Y), como citado @Mauro Britivaldo; ou devolveria de alguma outra forma que venha ser entendido como a correta. *** @mariana_____silva, como está o andamento do algoritmo? por favor, poste o que já conseguiu fazer e onde está com dúvidas ou posta o "código final". Obs.: Como citado, particularmente entendo que ainda não está resolvido. No aguardo.
  22. Olá @Code guy. Vamos lá: 1) MODUS OPERANDI O modo de utilizar o aplicativo deve está explícito no próprio aplicativo... ou melhor ainda, está estruturado para ser usado de modo intuitivo, ou seja, sem precisar que seja necessário explicar. Resumindo: precisa revisar isso. Mas por hora, tomemos como "sabido" que precisa do ". " para finalizar. Essa questão não é tão importante agora. 2) TAMANHO DO ALGORITMO Não tem problema algum o tamanho... o mais importante que é que esteja coerente... em relação ao "entender", temos de cara o relatado no item 3. Outra forma interessante é inserir comentários nas linhas. No código do item 3, inserir um exemplo. 3) INDENTAÇÃO DE CÓDIGOS É se suma importância que o código SEMPRE esteja indentando. Então, não existe desculpa, a medida que for alterando o código, já vai deixando indentado... beleza? ... abaixo segue um exemplo de como eu uso: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include<locale.h> char nomeP[20][30],textoP[20][200][50]; ///20(quantidade max de projetos),30(titulo) int seta,posicao=0,quantP=0,linha=-1; ///CIMA = 72 ///BAIXO = 80 //void MenuposicaoS(); //acho interessante usar maiúsculas para separar os termos [SimonViegas] void MenuPosicaoS(); void Novo(); void Projeto(); // int main() { setlocale(LC_ALL,"portugese"); while (1<2) { //??? [SimonViegas] MenuPosicaoS(); Novo(); if(posicao>0) Projeto(); } return 0; } // void MenuPosicaoS() { do { system("cls"); printf("\n\n\t\tUORDI\n\n\t"); if(posicao==0) { printf("->Novo Projeto+\n"); for(int i =0;i<=quantP;i++) { printf("%s\n\t ",nomeP[i]); } } else if(posicao>0) { printf(" Novo Projeto+"); for(int i =0;i<posicao;i++) { printf("\n\t %s",nomeP[i]); } printf("\n\t->"); for(int i =posicao;i<=quantP;i++) { printf("%s\n\t ",nomeP[i]); } } seta = getch(); ///ler a tecla pressionada pelo usuário if (seta == 0 || seta == 224) ///verifica se foi retornado um pré-código referente as setas (as setas geram 2 códigos, e precisam ser lidos 2 vezes) seta = getch(); ///"ler" novamente para coletar o código da tecla em si (pois as setas geram antes um pré-código, como citado anteriormente) if(seta==80) ///se tecla BAIXO posicao++; else if(seta==72) ///se tecla CIMA posicao--; if(posicao>quantP) posicao=0; else if(posicao<0) posicao=quantP; } while(seta!=13); } void Novo(){ system("cls"); if(posicao==0) { quantP++; printf("\n\n\tTITULO:"); gets(nomeP[quantP]); system("cls"); do { linha++; gets(textoP[quantP][linha]); }while(textoP[quantP][linha][0]!='.'); } } void Projeto(){ system("cls"); linha=-1; do { linha++; puts(textoP[posicao][linha]); } while(textoP[quantP][linha][0]!='.'); getch(); } Compare um código com o outro. Qualquer dúvida é só perguntar. Mas se atente a isso. O código tem que está indentado sempre!!! 4) RESTRUTURAÇÃO DA LÓGICA Inicialmente não entendi por que no Novo() você deixou a verificação da posicao dentro do método, e para o Projeto() deixou fora, ou seja, ou ambos ficam dentro, ou ambos ficam fora... não fica interessante tratar de duas formas diferente algo tão próximo. Então, pelo que eu entendi, você deveria poderia usar um conjunto de if ou case para identificar a posição e usar o item que for correspondente, ou seja, o método MenuPosicaoS() vai tratar da animação do menu e a escolha do item... ai o if (ou case) verifica qual o valor da posição e invoca o método correspondente, algo como: MenuPosicaoS(); se (posicao=0) então Novo() senão Projeto(); 5) CONDIÇÃO DE PARADA Não consegui entender como finalizar o programa... mas resumidamente você poderia inserir no "Menu". Algo como: UORDI ->Novo Projeto+ Sair Ai, no gancho do item 4, ficaria algo como: MenuPosicaoS(); se (posicao=0) então Novo() senão se (posicao=ULTIMAPOSICAO) então //ou alguma forma que identifique que foi "sair" //faz algo para sair... como mudar uma flag que está controlando o while senão Projeto(); Ou seja, ou "insere um novo", ou "sai do programa", ou "exibe os dados de um projeto já criado". Quando tiver projetos, ficaria como como: UORDI Novo Projeto+ Meu Primeiro Projeto ->Dicas de implementação de algoritmos Lista de convidados pro baba Sair Talvez, para facilitar a implementação do Sair, poderia colocar em cima. Ai 0 seria sair, 1 novo projeto, e o restante seria listar... *** Por ai vai. No aguardo.
  23. Hum! Entendi. Mas a dica continua...: ou seja, deixa a parta da exibição em cima da leitura... em outras palavras: os if da seta ficam por último. No aguardo.
  24. Olá @Code guy. Como o código já está "pronto", vou tentar levantar algumas questões: 1) LEITURA DA TECLA PELO GETCH() No caso, continua acontecendo o que foi citado: O programa tem que fazer a leitura duas vezes para poder executar o que se deseja, ou seja, está dando 2 loops para fazer uma coisa só. Pelo testes, o seu código está resultando no que deseja, mas, particularmente, entendo que existe um pequeno erro de lógica aí... pois deveria fazer cada tecla em um único loop. Para "provar" isso, poderia inserir esse trecho no código: int cont=0; //usado para contar quantos loops o programa já deu do { system("cls"); cont+=1; printf("Loop %d",cont); Para corrigir isso, poderia fazer algo como sugerido por @vangodp. Poderia ficar com algo assim: seta = getch(); if (seta == 0 || seta == 224) //caso retorne um "pré-código" de setas seta = getch(); //ler novamente (para pegar a segunda parte) Entende? ao pressionar uma seta, o método getch() primeiro retorna um código (224 ou 0)... ao tentar ler novamente uma tecla nova tecla, ele já retorna o código da tecla em si (obs.: a tecla é pressionada uma única vez, mas "consome" duas leituras). Ai entra questão também das outras possibilidades... como do @cyer ou outras que podem existir... 2) CONDIÇÕES MUTUAMENTE EXCLUDENTES Tecnicamente, para condições mutuamente excludentes em if, seria "necessário" o uso do else... pois se uma condição for verdadeira, necessariamente jamais poderia ser um outra... logo, não faz sentido verificar. Veja: Se seta conter 72, JAMAIS, poderá também conter 80 também... logo, precisa do else antes do segundo if. Idem para os if da posicao. Veja por exemplo o código do @cyer... só vai verificar as próximas, se as anteriores não forem verdadeiras. 3) "ORDEM DOS TRATORES" Observe que no seu código você está usando ifs antes mesmo ter ter algum valor para seta, ou seja, está comparando algo que não foi inicializado. E não tem motivo para comparar... já que a comparação vem do fato da intenção de querer mudar, ou seja, do usuário ter pressionado uma tecla... se ninguém pressionou nada, por que verificar? Resumindo: a leitura da seta deve vir antes dos if. Você colocou abaixo. *** Por ai vai. Att.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!