Ir ao conteúdo

Simon Viegas

Membro VIP
  • Posts

    3.940
  • Cadastrado em

Tudo que Simon Viegas postou

  1. ADENDO: Olá @Ikkyy. A ideia é válida. Para exemplificar: tipo //tipo de dados para locação t_locacao = registro posCliente :caractere //posição do cadastro do cliente no vetor "vetCliente" posAutomovel :caractere //posição do cadastro do cliente no vetor "vetAutomovel" diasAluguel :caractere //quantidade de dias que o carro foi alugado dataDevolucao:caractere //data da devolução do carro para concessionária fimregistro Ai, uma função localizaria a posição do cliente no vetor cliente pelo CPF, e a uma função localizaria a posição do automóvel no vetor automovel pela Placa. Algo do tipo: posCliente:=buscaCliente(CPF) se posCliente>0 faca vetLocacao[posLocacao].posCliente:=posCliente posAutomovel:=buscaAutomovel(Placa) se posAutomovel>0 faca vetLocacao[posLocacao].posAutomovel:=posAutomovel Na hora que precisar dos dados do Cliente ou Automóvel, seria algo assim: Se for usar um procedimento, algo como: exibirCliente(vetLocacao[posLocacao].posCliente) Ou acessando o vetor diretamente: escreval ("Nome :",vetCliente[vetLocacao[posLocacao].posCliente].nome) escreval ("RG :",vetCliente[vetLocacao[posLocacao].posCliente].RG) ... Idem para automóvel. Ai depende como quer implementar... como os dados não são salvos, poderia simplesmente ter um vetor com registro apenas dos dados principais. Veja ai... qualquer coisa é só postar. No aguardo.
  2. Esse sintaxe usada não é válida. Para acessar um campo do registro, usam-se ".". Algo como: locacao[codLoca].valor_final2 <- locacao[codLoca].valor_final + locacao[codLoca].valor3
  3. @lucass132 ADENDO: O ideal seria você especificar onde está com erro, mas pegando um dos seus código acima, temos: do { system("cls"); printf("\n------MENU-----\n1 - Cadastrar\n2 - Pesquisar\n3 - SAIR"); printf("\nDigite um numero: "); scanf("%d",&op); switch(op) { case 1: printf("Você escolheu o primeiro!\n"); break; case 2: printf("Você escolheu o segundo!\n"); break; case 3: printf("Você escolheu o terceiro!\n"); break; default: printf("Você não escolheu o primeiro,segundo ou terceiro!\n"); break; } } while(op != 3); Nesse caso, daria algo como: "O programa compila e abre, mas ao escolher um item, não acontece nada. Escolhe uma opção e não continua." Neste caso, perceba que ao "selecionar um caso", você apenas está exibindo um texto e dar um break. Daí o While repete (se diferente de 3)... ao fazer isso, limpa a tela e exibe o menu novamente, ou seja, o processo é tão rápido, que dá a impressão que não fez nada... mas na verdade "imprime e logo limpa a tela". Você precisa invocar a função correspondente, algo como: case 1: cadastro(); break;
  4. Olá @lucass132. Em qual parte não está funcionando? qual erro deu? Por favor, poste o seu código completo e onde está com dúvidas. No aguardo.
  5. Beleza. 1) ACESSO AOS DADOS Para acessar um dado, é da mesma forma que o outro vetor, algo como: escreval ("Valor:", cadastro_classificacoes[codClass].valor) A ideia é que "posição igual = mesmo usuário". Lembrando que não precisa do nome, pois já está no outro vetor.
  6. Sinal de "negação", ou seja, um "não". Que é o poder de "inverter" aquilo que foi associado... Pelo que eu vi, o isdigit() retorna um int, no caso "zero" ou "non-zero". O "não" tem o poder de inverter, ou seja, se a função retornar "zero", ao fazer a operação com o "não", vai resultar em "non-zero"... e vice-versa. Resumidamente seria: a função isdigit() "verifica se o caractere informado é número". Mas como o que está sendo verificado é se o caractere NÃO é um número, usou-se "não isdigit()". adicionado 8 minutos depois PS: creio que a função sempre retornar "0" ou "1". O "0" para false, e o "1" para true. Daí, quando não for um número, vai retornar "0" (false), mas o if quer saber se não é um número, logo, faz a comparação com a negação do resultado. Essa verificação de "números" também ocorre no while abaixo, onde verifica o valor do w. Quando "não é número", este passa a ser "1" (true), daí o while repete ("enquanto verdade repete").
  7. Apesar do tópico ser antigo. Aproveitei para ajustar o "tutorial", seguindo a sugestão abaixo: PS: eu acabei de testar e funcionou perfeitamente.
  8. Olá Esse vetor é do mesmo programa? Se for, não precisa do nome. Seria apenas o valor. A relação entre um vetor e outro será a posição. obs.: Caso a posição não fosse possível, poderia associar pelo CPF, pois este é único. Diferente do nome. Se possível, poste o código completo para analisarmos. No aguardo.
  9. Sim.
  10. Olá @lucass132. Basta reindentar o código, veja: int main (void) { int op = 0; cadastro(); pesquisa(); do { system("cls"); printf("\n------MENU-----\n1 - Cadastrar\n2 - Pesquisar\n3 - SAIR"); scanf("%d",&op); printf("Digite um numero: "); scanf("%d",&op); switch(op) { case 1: printf("Você escolheu o primeiro!\n"); break; case 2: printf("Você escolheu o segundo!\n"); break; case 3: printf("Você escolheu o terceiro!\n"); break; default: printf("Você não escolheu o primeiro,segundo ou terceiro!\n"); break; } //aqui teria uma }. Falta fechar com o "} while (xxx)") return 0; //aqui falta outra }. (Fecjar o main()) No aguardo.
  11. Caso não funcione, tentem "descobrir" o código. Algo como: #include <stdio.h> #include <conio.h> int main() { char x; printf("Digite um caracter : "); x = getch(); printf("O caracter digitado foi %d.", x); } Daí usa-o no if.
  12. Aproveitando: Acho que é <10 mesmo, mas no senão não tem essa incrementação no codigoC, ou é necessário reorganizar a estrutura do código... veja, se/senão é algo dicotômico, ou seja, se não for uma coisa, necessariamente será a outra. E nas duas possibilidades, você tem a mesma instrução... logo, a instrução ficou repetida (já que sempre será executada). Daí basta colocar uma vez antes do se OU depois do fimse (e retirando os que já tem, é claro). Mas sugiro o seguinte: poderia começar o codigoC com 0, e logo após entrar no case 1, incrementaria em 1. Faz os pequenos ajustes necessários. No aguardo.
  13. Olá. Que problema? se for em relação à "Área de variáveis...", ignore, creio que não funciona bem com registros. Tente cadastrar uns dados e depois imprimir eles. Se for outra coisa, tente especificar melhor e/ou poste o código completo. Se puder demonstrar o exemplo ficaria melhor... caso estiver se referindo a necessidade de declarar o itens do registro também no var, é notável que no mínimo iria aparentar uma redundância... se fosse necessário, "internamente" o compilador deveria fazer isso, já que seria uma processo bem robótico e fixo (tudo que está no registro, precisaria está no var). Mas garanto que no seu caso não é de fato necessário declarar novas variáveis. Ao declarar aquelas variáveis, seria como está criando outras variáveis quaisquer... apenas elas tem a coincidência de ter a mesma "nomenclatura" (nome e nome, rg e rg etc)... isso é possível pois estão em escopos diferentes, ou seja, algumas linguagens aceitam (o que é coerente). Para exemplificar, poder existir algo assim: tipo cadastro_cliente=registro nome: caractere rg: caractere cpf: caractere cendereco: caractere data_nascimento: caractere carteira_hab: caractere fimregistro cadastro_funcionario=registro nome : caractere cpf : caractere codigo : caractere fimregistro Percebe que existe nome e cpf nos 2 registros. Não tem problema... são estruturas distintas em escopos diferentes... se não me engano isso seria uma espécie "polimorfismo" (não lembro se é isso mesmo, ou tem outro nome). Não há a necessidade de "exclusividade", pois cada um tem um modo de acesso distinto. Ex.: clientes[1].nome:="João" funcionarios[1].nome:="Maria" Já se tivesse um nome no var, teria também outro acesso, ex.:: clientes[1].nome:="João" funcionarios[1].nome:="Maria" nome:="Pé de Feijão" São 3 escopos distintos... No aguardo.
  14. Olá @Ikkyy. Pelo menos 2 pontos pontos a serem analisados: 1) DECLARAÇÃO DE VARIÁVEIS [1] Parte dessas variáveis estão declaradas, mas sem uso (com exceção do x). Pois esses dados estão no registro, ou seja, você está declarando um vetor de registros com determinados dados, e está declarando esses mesmos dados em forma de variável. Resumindo: apague essa linha (deixando o x, é claro). Não aparece porque você não está utilizando elas... o código está utilizando o vetor de registro. Como sugerido, essas variáveis não deveriam existir. Veja que você usa leia (clientes[codigoC].nome), e essas variáveis extras que você declarou seriam acessadas, por exemplo, assim: leia (nome). Entende? essa variável nome não precisa existir, pois você já tem o registro, e nem muito menos está utilizando elas de alguma outra forma. RESUMINDO: ao declarar um registro, não é necessário declarar as mesmas variáveis do registro no var. 2) ESTRUTURA DE SELEÇÃO [2] Se codigoC começa com 1, esse se sempre resultará em falso (false), logo não se faz necessário ter um se (será uma espécie contradição. Que é a negação da tautologia, logo não necessitando de verificação, pois o resultado sempre será igual . ). Resumidamente: ou a condição está errada; ou simplesmente apague toda essa estrutura, já que nunca será utilizada. (obs.: creio eu que seria algo como <=10, ou algo do tipo). *** No aguardo.
  15. Olá @Zukhe. Foi apenas um detalhe na sintaxe... repeat não precisa de begin/end. Apenas o seu until. Segue seu código original indentado: Program Pzim ; var x,y:integer; Begin y:= 30; x := y; repeat begin readkey; if readkey = #65 then begin x := x -1; end else if readkey = #68 then begin x := x +1; end else if readkey = #83 then begin y := y +1; end else if readkey = #87 then begin y := y -1; end; write ('X'); gotoxy (x,y); end; End. Obs.: esses if não precisam de begin/end. Basta apagá-los. Lembrando que antes do else não teme tirar o ";". Por favor, posta o seu código final para analisarmos. No aguardo.
  16. Dê uma pesquisada sobre recursividade. Veja de um modo geral. Recursividade é a base do problema. Mas seria mais ou menos o seguinte. Toda vez o que programa invoca uma função qualquer, o computador simplesmente vai executar o que tem que executar, e ao terminar a função, continua a partir do momento que foi chamado. Ex.: leia(x) escreva("Você digitou",x) fimAlgoritmo Ao invocar a função leia(), este vai fazer o que tem que fazer e ao terminar o programa vai para próxima linha após ele. Após invoca o escreva(), este vai fazer o que tem que fazer e ao terminar o programa vai para próxima linha após ele. Após invoca o fimAlgoritmo... Agora imagine uma qualquer, função A(), que ao executar o que tem que fazer, precisa chamar outra função B()... ou seja, a função B() fará o que tem que fazer, e ao terminar o programa vai para próxima linha após ele dentro de A(), que continuará executando o que tem que executar até terminar e voltar para onde ela foi invocada. Deu para entender? Na recursividade, apenas acontece que a função A() vai chamar a própria função A(). Seria como A() invocando B(), mas B() sendo sendo o próprio A(). Como dentro de A() chama a si mesmo, está estrutura obrigatoriamente tem que está preparada para de algum modo parar... se a condição de parar não for preparada, o programa iria ficar em loop infinito. No caso do QuikSort(), ao chegar no ponto que precisa dividir (i deixa de ser menor igual a j), ela verifica se precisa analisar o lado esquerdo da lista. Após terminar o esquerdo, verificará se precisa analisar o direito dela. Acontece que ao analisar o lado esquerdo, essa nova lista também pode ser subdividida em outras duas, onde o QS irá verificar o esquerdo dessa nova lista. Esse outra subista também pode ser dividida... por ai vai. Até que não possa mais, e voltar para o ponto anterior a último que foi invocada... verificará a lado direito, que por sua vez pode ser subdividida e ser analisada o seu lado esquerdo, que pode ser dividida novamente e ser analisada o lado esquerdo deste... etc etc etc. Assista o vídeo e perceba que: 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; No caso, perceba que o item 2 e 3 são uma invocação do QS, logo seriam os próprios 3 itens... 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; Entende? cada vez que a condição é válida e um QS é necessário, é iniciado uma nova recursividade. Um exemplo aleatório: 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela; 1. particiona a lista (faz aquelas trocas lá); 2. verifica se tem uma nova lista ao lado esquerdo de j e invoca um QS() com ela; 3. verifica se tem uma nova lista ao lado direito de i e invoca um QS() com ela;
  17. Acho que para esse exercício não precisa ordenar, basta usar o conceito de "menor" tradicional. Algo como "inicializar o menor como sendo o primeiro. Ai verifica um a um os próximos, se for menor que o menor, atualiza. No final, menor vai está com o menor nome."
  18. Posta as regras que está usando para eu poder analisar adicionado 30 minutos depois Adendo: Acho que esta etapa está errada.. não é ainda para "dividir". Só para quando o j for menor que o i. E mesmo assim não é para simplesmente dividir, mas sim "fazer uma chamada recursiva". Dê uma analisada no vídeo que postei. No aguardo. adicionado 41 minutos depois ...após parar, vai fazer da posição inicial até o j. Depois do i até a posição final... algo assim.
  19. @anonymouatour, O que diz o algoritmo sobre isso? apenas sigas os passos que deveria seguir... a questão do seu exemplo já ter o lado esquerdo ao pivô já ordenado ou não, não quer dizer nada. Sigas as etapas e pronto. Ao final, o vetor estará ordenado. De um modo geral, pelo que eu vi, o Quick Sort não é um método trivial... ou seja, tem uma certa complexidade. Um dos pontos chaves do método é a questão do uso de recursividade no processo (é o mais comum, pelo que eu vi, dá para fazer sem também)... você precisa ter uma noção sobre como funciona essa tal de recursividade antes. Então, você já trabalha com procedimentos e funções? basicamente a recursividade consiste em um procedimento invocar a se mesmo e funciona de forma que, cada vez que a uma instância invocada terminar, a próxima instrução vai continuar exatamente onde este último foi chamado. E vai seguindo o fluxo... da mesma forma que poderá invocar novamente a si mesmo, ou terminar... se terminar, volta para onde foi chamado e continua... a ideia é que vai continuar de onde parou sempre e está estruturado de tal forma que a lógica funciona. Abaixo encontrei um vídeo que explica como funciona o Quick Sort. Tenta dar uma estudada nele. obs.: eu não tenho certeza (não almocei ainda, rs... preciso assistir com mais calma), mas acho que ela confunde umas partes (que não comprometem o entendimento), por exemplo quando o pivô é o 52 meio que em diante, onde ela compara logo o lado direito já dizendo que já está ordenado, mas acho o algoritmo segue da esquerda para direita, ou seja, primeiro vai ordenando todo o lado esquerdo, com as suas recursividades quando necessário, e só após chegaria no a conclusão que o 52 já está ordenado (resumindo: ela conclui o 52 já está ordenado antes da hora).... mas veja... não tenho certeza, foi uma impressão... tenho que ver com mais calma. De um modo geral, o vídeo explica bem o funcionamento, dá uma boa noção da recursividade e para onde vai o i e o j... dos pouco que o vi, foi o melhor... a maioria apenas segue os passos, mas não explica por que deveria ser assim ou assado. No aguardo.
  20. Olá @mosiah santos. Mantenha seu código indentado. Ex.: #include <stdio.h> #include <stdlib.h> int main () { int Opt; float preco_total,desconto; do { printf("Centro Automotivo\n"); printf("..................\n\n"); printf("1 - Motor\n"); printf("2 - Suspencao\n"); printf("3 - Freio\n"); printf("4 - Sair\n"); printf("Selecione uma opcao:"); scanf("%d",&Opt); if (Opt == 1) { printf("voce selecionou opcao 1 :\n\t motor \n"); printf(" 1 - Alto consumo de oleo lubrificante\n"); printf(" 2 - Excesso de fumaca sendo expelida pelo escapamento\n"); printf(" 3 - Baixa potencia\n"); printf("selecione uma opcao\n"); desconto = 100; } else if (Opt == 2) { printf ("voce selecicionou a opcao 2:\n\t suspencao\n"); printf(" 1 - Ruidos e batidas nas rodas\n"); printf(" 2 - Vibracoes e direcao puxando\n"); printf(" 3 - Desgaste irregular dos pneus\n"); printf("selecione uma opcao\n"); desconto = 200; } else if (Opt == 3) { printf ("voce selecicionou a opcao 3:\n\t Freio\n"); printf(" 1 - O carro ou pedal vibrar ao pisar no pedal de freio\n"); printf(" 2 - O carro puxar para algum lado quando freia\n"); printf(" 3 - Ouvir algum chiado ou ronco quando pisa no freio"); printf("selecione uma opcao\n"); desconto = 300; } } while (Opt !=4); system("pause"); return 0; } /* else if (codigo == 4) { calculo = valorproduto + (0.1 * valorproduto); } printf("PRECO FINAL = %.2f\n",calculo); */ obs.: para inserir um dente, utilize o tab. O trecho que foi comentado está depois do programa e não está se relacionando com o restante do código. Tente atualizar algoritmo e caso tenha alguma dúvidas, tente indicar em qual parte ou qual erro está dando. No aguardo.
  21. Olá. @CiroboyBR, interessante essa interpretação. @dondney, nesse sentido, a sugestão seria ter mais uma versão disponível.. ou seja, como pode existir essa ambiguidade na interpretação, seria interessante tê-las e "entregar" todas... ou tirar as antes dúvidas. Por favor, se possível, depois nos informe qual seria a certa. PS.: apenas para complementar, eu não sei dizer, mas meio que entendo que um quadrado se refere a toda superfície mesmo, ou seja, seria análogo a um círculo, onde o que conta é a superfície. Tanto que eles têm "área". Em detrimento da circunferência, onde este seria apenas a aresta*. Nesse sentido, o último desenho seria uma espécie de quadranferência . O que acham?
  22. Olá @Patrick Weber. Por favor, poste seu código para analisarmos e também poder servir de bases para futuros visitantes. Adendo: Esse é o enunciado completo?: Alguns pontos: - O item 1 não foi solicitado; (creio que já verificou isso, caso contrário não teria resolvido) - O item 2 foi solicitado, mas não foi utilizado E nem foi armazenado; - O item 3 foi solicitado, mas não foi utilizado ; - O item 4 foi solicitado, mas não foi utilizado E nem foi armazenado; - O item 5 foi solicitado, foi utilizado, mas não foi armazenado; - De um modo geral, o que é armazenado são as notas, não a média. A média se trata apenas de um cálculo, ou seja, teoricamente o vetor media ("medias") não deveria existir, ao mesmo tempo que deveria ter um vetor de notas para cada aluno (notas seria uma matriz, ex. [100][4]). Perceba, um aluno tem as 4 notas, quando é necessário ter a média, acessaria essas notas, faz o cálculo e exibe. Se só armazenar a média, como um professor vai saber a nota que teve na segunda avaliação por exemplo? ao mesmo tempo, se já tenho as notas para calcular a média, para quer armazenar ela? seria redundante. - Não foi especificado o valor da média para ser aprovado, nem que a média deveria ser verificada. (ou você não citou isso, ou isso não precisaria ser feito). Outro detalhe... Da forma que você fez o algoritmo, não precisaria de vetores, pois está "lendo, usando e descartando"... talvez apenas para as notas (facilitar a leitura), ou seja, se for usar vetores, para os outros dados além das notas, teria que de fato "usá-los". Por exemplo, primeiro você ler todos os dados. Só após, faz os cálculos e exibe os resultado. Se for para "já exibir o resultado ao ler os dados do aluno", não precisa de vetor. No aguardo.
  23. Olá @anonymouatour. Vou tomar como base a linguagem utilizada no Visualg ("Portugol") 1) ENCONTRAR O PIVÔ Pelo que eu entendi, você quer encontrar a posição do meio. Logo, seria algo como: posPivo := (posicao_inicial_do_vetor+posicao_final_do_vetor) \ 2 No caso, (1+10)\2 = 11\2 = 5. Nesse sentido, perceba que está sendo utilizado o "\" (barra deitada para esquerda), pois, se o dividendo for ímpar (como é o caso), o seu algoritmo não iria funcionar se usasse o "/". Pois 11/2 = 5.5, percebe? Não existe a posição 5.5. obs.: como suposto, "\" é diferente de "/". São operadores aritméticos diferentes. É equivalente ao "div" em algumas outras linguagens. Vide referência do Visualg. Simples: já estão "ordenados em relação ao pivô. Não tem problema algum... faz parte. A lógica do algoritmo é exatamente a mesma para qualquer organização dos números... o que poderia mudar seria apenas o tempo que o algoritmo iria demorar para ordená-los. Adendo: @devair1010, O método de ordenação escolhido foi o Quick Sort. Acho que está usando como referência um outro, como o Bubble Sort (são lógicas diferentes). No aguardo.
  24. Olá @dondney. 1) CUIDADO COM A INDENTAÇÃO O for deve ficar na mesma direção do resto do programa, ex.: #include<stdio.h> #include<ctype.h> int main(){ int i,j,x,y; char ch='*'; printf("__________________________________________________\n"); printf("Programa que imprime um QUADRILATERO em forma de '%c'\n", ch); printf("__________________________________________________\n"); printf("De o numero de linhas: "); scanf("%i", &x); printf("De o numero de colunas: "); scanf("%i", &y); printf("\n"); for(i=1;i<=x;i++){ for(j=1;j<=y;j++){ printf(" %c", ch); } printf("\n"); } } 2) VALOR INICIAL DE VARIÁVEL Testei aqui e funcionou normalmente. Para seu contexto, teoricamente é a mesma coisa. As duas formas funcionam... veja, vamos supor que temos x=5. Se i começar com 0, para o for ter 5 loops (voltas), teria que executar o 0, 1, 2 ,3 e 4, ou seja, "uma posição antes do valor de x). Logo, tirando o "=", ficam apenas "i<x" (seria o mesmo que i<=x-1). Já se começar com i=1, terá que ir de 1 a 5, daí ficando "i<=x". No caso, usar começando com 0, seria para estimular/acostumar usar a forma padrão da maioria das linguagens, ou seja, tornar natural o conceito que o "primeiro valor" é o 0, não o 1. Obs.: está referência é para o funcionamento interno. A visão do usuário é começando com 1 mesmo... entende? "A primeira posição do para o usuário é a 1, mas internamente estaria acessando a posição 0 do vetor". Isso costuma ser transparente (o usuário não precisa saber disso. Não há necessidade... é algo "técnico"). 3) USO DE ESPAÇOS Vale salientar que tecnicamente pode está deixando de ser um "quadrado". É interessante essa noção... seria bom "discutir" com o professor/facilitador. O "espaço" não faz parte do processo em si... está apenas como um recurso estético. Não importa o que é "visto", mas o que ele representa. Digo isso com o mesmo sentido do uso do "0" citado acima, vejam essa analogia: Essa figura é um quadrado... pois está lá que são ângulos retos, e todos os lados tem o mesmo tamanho. Entende? Essas informações poderia está no outro local indicando isso. É comum ocorrer em provas e concurso. Onde os gráficos NÃO NECESSARIAMENTE estão em escala ou representam os dados perfeitamente. Servem apenas para "ilustrar". Se tá escrito que é um quadrado, é um quadrado. OBS.: sugiro deixar com o espaço mesmo, apenas estou fazendo uma observação do que interpreto. *** No aguardo.
  25. Olá @victornunes139. Acho que pode está dependendo de como está tentando acessar a posição. Por favor, poste o seu código atual e onde está dando erro para podermos analisar melhor. No aguardo.

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!