Ir ao conteúdo
  • Cadastre-se

Simon Viegas

Moderadores
  • Total de itens

    3.718
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

1.870

Sobre Simon Viegas

  • Data de Nascimento 22-06-1982 (36 anos)

Informações gerais

  • Cidade e Estado
    Salvador/BA
  • Sexo
    Masculino

Outros

  • Biografia
    Carregando...
  • Ocupação
    Técnico e Analista de Sistemas
  • Interesses
    Tecnologia
  1. @L2Murdock748. Sobre o erro da imagem, aí no "texto do código", devem-se usar o "." para separar as casas decimais, em vez de ",". Assim como você fez em outras partes do código. obs.: já no leia(), aceita com "." ou com ",". Por favor, poste o texto do código, em vez de uma imagem... assim fica mais fácil para copiarmos e testarmos. No aguardo.
  2. Vamos lá: Sobre: Se o enunciado fala em "N", "A" e "B", porque usar num, maior, menor etc? Prefira nomenclaturas mais sugestivas. Mais a baixo dou exemplo... Sobre: Não precisa efetuar validações por enquanto... De qualquer forma, acho que não seria válido. Os valores são lidos em sequência... N, A e B. Essa "otimização", por exemplo, seria implementada se fosse explicitada no enunciado... Talvez o que você poderia implementar seria dizer algo como "O valor de B deve ser maior ou igual ao valor de A" etc. Mas em fim... ignore isso... suponha dados perfeitos. O enunciado não fala de "validações". Se quiser, deixe isso após ter um código funcional. Sobre: Aqui temos uma falha na implementação da lógica, ou seja, supondo que o quê você implementou no papel esteja correto, a tradução ficou errada... veja... menor e cout não estão sendo alteradas dentro do while, logo, o resultado desta conta sempre será a mesmo!!! vai entrar em loop infinito. Outro pronto é a condição: você definiu com "!=", ou seja, como é uma multiplicação, é bem provável que nunca seja igual... logo, também podendo entrar em loop infinito.. Poderia utilizar algo assim: count=1; while(multiplo < multiplo2) { multiplo = menor*count; count++; } De qualquer forma, as variáveis usadas estão incompletas... falta o N ai no bolo. Resumidamente poderia ficar com algo assim: #include <string.h> #include <stdlib.h> int main() { int N, A, B; int multiplo; int cont; scanf("%d", &N); scanf("%d", &A); scanf("%d", &B); multiplo = N; cont = 0; while(multiplo < A) { multiplo = N*cont; cont++; } while (multiplo < B) { printf("%d ", multiplo); multiplo = N*cont; cont++; } return 0; } Pronto! um código pronto!!! Eba!! Será??? O que ser poderia fazer agora é testes de mesas... eu não sei explicar muito bem (dá um Google e/ou aguardar explicar melhor ), mas seria basicamente tentar definir as categorias de possibilidades e testar... por exemplo: Se colocar N maior que A e menor que B; Se colocar N maior que A e B; Se colocar N igual a A e diferente de B; Se colocar N igual a B e diferente de A; Se colocar os 3 valores iguais? Se colocar N igual a 0; etc Tem que testar as possibilidades e ir corrigindo. obs.: essas possibilidades se referem a lógica do problema em si. Aqui para cada tipo de entrada, terá que daá a saída correta... alguns dos testes vão dar o tal "INEXISTENTE"... tem que implementar isso. A forma que pensei foi assim: Sobre: Lá no rascunho eu faria: N=6 A=27 B=52 //anoto o que preciso [analisando] tá! o que eu preciso fazer agora? hum! vou encontrar o primeiro múltiplo da lista e ir escrevendo[/analisando] 0, 6, 12, 18, 24, 30 //<--- num cantinho do papel, encontro o primeiro múltiplo que esteja na faixa 30, 36, 42, 48, 54 //começo a escrever a sequência... esse último não escreveria, pois saberia após fazer a conta, que é maior que 52. Deixei só para ilustrar. A resposta é: 30, 36, 42 e 48. //tenho um certo grau de certeza... esses valores estão batendo pra mim.. FIM Veja! não tem nada de programação nessa abordagem... o que estava propondo seria apenas conseguir resolver o problema mesmo. Sobre: Algo como: Encontre o primeiro múltiplo de N que é igual ou maior que A... para isso, poderia pegar o valor de N e ir somando o com o próprio valor de N até satisfazer essa condição. Esse valor encontrado será o primeiro número da sequência. Para o restante, basta ir somando ao mesmo a ele o valor de N e anotando... isto enquanto o resultado for menor ou igual a B. Então, não precisa ser nada rebuscado... é só uma tentativa de descrição mesmo... Sobre: Após alinharmos o entendimento do que se quer fazer, ou seja, que estaríamos com uma lógica viável, traduziríamos para linguagem escolhida, ex.: Em C : Criando um esboço: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { //ler os valores de N, A e B //encontrar o primeiro número da lista //gerar lista //exibir o resultado return 0; } Implementando: #include <stdio.h> int main() { //ler os valores de N, A e B int N, A, B; printf("Digite os valores de ENTRADA\n"); printf("N = "); scanf("%d",&N); printf("A = "); scanf("%d",&A); printf("B = "); scanf("%d",&B); //encontrar o primeiro número da lista int multiploN = 0; while (multiploN < A) { multiploN+=N; } //gerar lista em si e exibir o resultado while (multiploN < B) { printf("%d ",multiploN); multiploN+=N; } return 0; } A lógica foi bem parecida... apenas que pensei em ir somando, em vez de multiplicar valores... obs.: esse código também precisaria fazer os testes de mesa e efetuar as devidas correções. RESUMINDO: Tente fazes os testes de mesa e ajuste o código de acordo com o enunciado. PS: a lógica utilizando divisores também é viável, mas aí podemos deixar para depois. No aguardo.
  3. Olá. Sobre: @0xElfER_R3fl3x0, a dica é interessante. Mas depende. Veja: Repare que o resultado NÃO está ordenado, ou seja, o resultado final sairá diferente. Na sua sugestão, teríamos um resultado assim: O número 3 aparece duas vezes. O número 4 aparece três vezes. O número 5 aparece duas vezes. O número 18 aparece três vezes. Aí tem que analisar se poderá mudar a ordem do resultado ou não. Eu acredito que não teria problema... mas vale a questão: se a ordem não importa, simplificará bastante. Poderia utilizar qualquer método de ordenação tradicional, como os citados. O bom que a lógica da ordenação está pronta (não precisa reinventar a roda). Faltará só criar uma outra lógica para contar a partir desse vetor ordenado; se "deverá" mostrar na ordem da imagem, ainda continuará simples, mas teria que em vez de ordenar, utilizar um método que agrupe os números seguindo a ordem de ocorrência (ou algo do tipo). Após agrupar, teríamos um vetor assim: [5][5][4][4][4][3][3][18][18][18] O restante é igual, ou seja, de um algoritmo para o outro só muda que um ficará em ordem "crescente" ou "decrescente", e o outro ficará agrupado na "ordem da ocorrência". Eu já fiz a minha tentativa... quem quiser tentar fazer ordenando ou agrupando, fiquem a vontade. Se quiserem um base de código para o Bubble Sort: type t_vet100 = array [1..10] of integer; procedure BubbleSort(var v:t_vet100); var i, j:byte; temp:integer; begin for i:=1 to 9 do for j:=1 to 10-i do if v[j] > v[j+1] then begin temp :=v[j]; v[j] :=v[j+1]; v[j+1]:=temp; end; end; Dúvidas, críticas ou sugestões e só postarem. No aguardo.
  4. @isrnick, daria por favor para traduzir esse: ? Creio que será dúvida de outros membros também, rs. adicionado 38 minutos depois PS: Para testar e exibir na tela, fiz assim: #include <stdio.h> #include <string.h> #include <locale.h> int main() { setlocale(LC_ALL, "Portuguese"); //coloquei para aceitar acentos char palavra[200], caractere; int npalavras = 0, nlinhas = 1; FILE *texto; texto = fopen("texto.txt", "r"); //while ( fscanf(texto, "%199s%c", palavra, &caractere) > 0 ) { //testar sem o 199 while ( fscanf(texto, "%s%c", palavra, &caractere) > 0 ) { printf("%s%c",palavra,caractere); if ( strlen(palavra) != 0 ) npalavras++; if ( caractere == '\n' ) nlinhas++; } fclose(texto); printf("\a\n\n%d linhas e %d palavras.\n", nlinhas, npalavras); return 0; } Funcionou: Duas dúvidas: - para quê esse 199 ali no meio? limite de caracteres? - porque a caractere precisa do &, e a palavra não precisa? testei o segundo com e sem, ambos deram certo! No aguardo.
  5. @LuanCeli, vou tentar explicar (de uma forma mais prolixa) da forma que entendi... Antes tudo: inicialmente esqueça que é algo voltado para programação. Entenda o problema em si... como algo do mundo real (e não que você precisa "criar um programa"), ou seja, que vai fazer na mão, como utilizando papel, lápis e calculadora etc. Antes de qualquer coisa, entenda o problema. Essa é a chave! O quê que o enunciado está propondo? Pelo que eu entendi: ele quer os múltiplos de N que estão contidos entre A e B (inclusos). Perceba que uma das etapas está na "interpretação de texto". É simplesmente entender o que se quer. Está relativamente objetivo, veja: Exemplo: N = 7 A = 10 B = 50 Teria como resultado: 14, 21, 28, 35, 42 e 49 Já conseguiu ENTENDER O PROBLEMA? Se sim, beleza. Se não, tire as suas dúvidas postando aqui. (obs.: eu posso ter entendido errado, mas vamos pressupor que estou certo...) Imagine que foi uma questão do Enem. Como você faria para encontrar a resposta? Foi dado como entrada N=6, A=27 e B=48. Qual a saída? Você está lá com a questão na sua frente... "precisa" responder... e aí? Bota mão na massa! Então, no meu caso, fui meio que no automático (possivelmente por já ter tido contato com problemas semelhantes). Imaginei mais ou menos o que precisava (estou evitando spoiler) e fui achando os valores. A minha sugestão é você também imaginar se deparando com essa questão... tente achar os resultados do exemplo que dei acima. Após, vem a questão do tal algoritmo, ou seja, criar o passo a passo genérico para quaisquer números inteiros (válidos para o contexto, é claro). "Como (mais ou menos) fez para chegar a esse algoritmo?" (vamos supor que achou e achou corretamente). Veja, existem diversas formas que achar uma resposta!!! no caso, para esse contexto, só existe uma reposta correta (será sempre um conjunto de números específicos), concorda? entretanto, tecnicamente falando, existem infinitas formas para achar esse resultado, ou seja, o seu futuro algoritmo em C será uma das dessas possibilidades possíveis para achar os valores da saída. @isrnick pode está sugerindo achar de uma forma (que envolve cálculos e verificações de múltiplos), eu imaginei de outra (que sei que segue outro caminho, pois não fiz utilizando dessa forma), assim como você pode achar uma terceiro outro caminho completamente diferente. E todos podem trazer a saída correta! (não entrando na questão da eficiência [seu custo], mas sim no sentido de sua eficácia [resultado]., ou seja, são infinitas formas de cegar a o único resultado correto, nesse contexto). Não se preocupe com perfeição ou descrever os mínimos detalhes... é para ser apenas um esboço de algoritmo. Minha sugestão: - Resolva o exemplo dado: tendo como entrada N=6, A=27 e B=52, qual o valor da saída? o que importa aqui é resultado! - Após, tente entender e descrever os passos que seguiu para achar a resposta. A dica é a seguinte: descreva de uma forma que uma terceira pessoa, que seguindo os passos que você descreveu, conseguiria chegar ao resultado correto. Mas em fim, de uma forma bem superficial mesmo... é só para ter uma base de como faria. - Posta aqui para analisarmos. - Chegando um algoritmo viável, ajudamos a converter para linguagem do C. Veja, de certo modo, aqui as possíveis dúvidas estariam mais relacionadas com a sintaxe, ou seja, a lógica em si já estaria pronta... será basicamente uma "tradução". Esse mesmo algoritmo que você descreveria, servia para uma outra linguagem qualquer*. OU Se já tem uma base do que quer fazer, além de descrever o que o algoritmo irá fazer, já implementa em C. Posta a descrição e o código para analisarmos. OBSERVAÇÃO: Podemos abstrair que são duas partes: [1] o que você quer implementar, ou seja, já ter uma ideia do que precisa fazer; e [2] implementar isso que eu já definiu, ou seja, conseguir traduzir para C. Pelo que você postou, entendi que está com dificuldade no [1]. Só reforçando: Você precisaria entender como você poderia resolver esse problema... por exemplo, se em determinada parte do seu algoritmo, você precisasse saber se um número é divisível por outro, poderia surgir um sub-problema: "como sei se um número é divisível por outro ou não?". Isso por enquanto é secundário... seria "destrinchar" a etapa... subentenda que sabe verificar... no momento oportuno, se fosse o caso, buscaria uma tentativa de solução para isso... e, nesse caso, por exemplo, poderia tentar usar como base a explicação: Entende? na criação de uma algoritmo do problema geral (achar os tais múltiplos lá da faixa), poderia surgir a necessidade de utilizar uma lógica de um algoritmo para uma parte (saber se um número é divisível ou não) desse algoritmo maior. Tente fazer essa abstração!!! Tipo... num futuro problema qualquer ainda mais complexo, poderia existir a possibilidade de justamente precisar de encontrar [3] "os múltiplos dentro de uma faixa". Lá, essa etapa não seria destrinchada.. você simplesmente entenderia que precisaria dessa "saída" e que iria conseguir... iria utilizar ela e tal... ao implementar o código, necessitando destrinchar o [3], poderia surgir outro sub-sub-problema lá da "se é múltiplo ou não", saca?. E vai indo. Por isso que no início, é bom ir tendo contatos com problemas mais simples mesmo... daí verás que um problema mais complexo, tente mais facilmente a ser visto como um conjunto desses problemas mais simples. No possível algoritmo que venha a tentar descrever, você não necessariamente já precisaria descrever como iria verificar se um número é múltiplo de outro ou não, apenas poderia dizer, por exemplo: "bla bla bla verifico se bla bla bla é múltiplo de bla bla bla e depois bla bla bla..". Não precisa descrever como se verificar um múltiplo nesse momento. No aguardo.
  6. Olá. @Alisson Neres, eu costumo tentar enfatizar que a solução do problema deve sempre ser relacionada ao problema em si. Parece óbvio, mas é comum não nos atentarmos a isso... Não adianta o código rodar bem, sem erros, ser bonitão, fazer uma monte de coisas interessantes e úteis, mas não fazer o que se precisa! O que adianta um cozinheiro (programador) fazer uma delicioso espaguete (o que o código está fazendo), mas se o que eu pedi foi um cuscuz (enunciado) ? RESUMINDO: Qual o enunciado do seu problema? esse trecho é uma etapa para algum exercício que lhe foi proposto? ou O quê você está tentando fazer? é algo algum "problema" que você imaginou e está tentando implementar uma solução? Por exemplo, analisando esse trecho: E pelas estruturas dos seus laços de repetições, poderia imaginar que está tentando "validar o valor de a para que tenha apenas valores entre 0 a 100". Se for isso, poderia fazer algo assim: #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, "Portuguese"); int a; do { printf("Digite um número no intervalo de 0 a 100: \n"); scanf(" %d", &a); } while ((a < 0) || (a>100)); system("PAUSE"); return 0; } Exibindo a mensagem de erro, poderia ficar assim: #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, "Portuguese"); int a; do { printf("Digite um número no intervalo de 0 a 100: \n"); scanf(" %d", &a); if ((a < 0) || (a>100)) { printf("\a!ERROR!\n\n"); } } while ((a < 0) || (a>100)); system("PAUSE"); return 0; } Ou assim: #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, "Portuguese"); int a; int OK; do { printf("Digite um número no intervalo de 0 a 100: \n"); scanf(" %d", &a); OK = 1; //inicializa a flag como 1 = true = verdadeiro, ou seja, está OK if ((a < 0) || (a>100)) { printf("\a!ERROR!\n\n"); OK = 0; //muda a flag para 0, ou seja, para "não está OK" } } while (OK != 1); //enquanto não estiver OK system("PAUSE"); return 0; } Poderia ser assim também: #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, "Portuguese"); int a; printf("Digite um número no intervalo de 0 a 100: \n"); scanf(" %d", &a); while ((a < 0) || (a>100)) { printf("\a!ERROR!\n\n"); printf("Qual foi ai?! Eu mandei digitar no intervalo de 0 a 100: \n"); scanf(" %d", &a); } system("PAUSE"); return 0; } etc. Em fim. Vê se ajuda no que você precisa. De qualquer forma, por favor, poste o enunciado do problema ou o que está tentando fazer, assim como o seu código atual para analisarmos. No aguardo.
  7. Tópico já um pouco antigo... vou postar uma tentativa: program FCdH; uses CRT; //necessário em alguns compiladores para reconhecer o ReadKey, ClrScr etc function valorPorExtenso(num:integer):string; const unidade:array[1..19] of string = ('uma', 'duas', 'tres', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove', 'dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove'); dezena :array[2..9] of string = ('vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa'); var numStr:string; numAux:integer; code :word; aux :string; begin if num<=19 then valorPorExtenso:=unidade[num] else if num=100 then valorPorExtenso:='cem' else begin Str(num,numStr); Val(numStr[1],numAux,code); aux:=dezena[numAux]; if numStr[2] <> '0' then begin Val(numStr[2],numAux,code); aux:=aux+' e '+unidade[numAux]; end; valorPorExtenso:=aux; end; end; var vetorA :array [1..100] of integer; //vetor dos números inteiros (1 a x) vetorNum:array [1..100] of integer; //vetor dos números que já ocorreram vetorQtd:array [1..100] of integer; //vetor com a quantidade de repetições por número i, j, contNum :byte; igual :boolean; qtdPos, limite :byte; begin Randomize; repeat repeat ClrScr; write ('Quantidade de posições (1 a 100):'); readln(qtdPos); until (qtdPos>=0) and (qtdPos<=100); repeat ClrScr; write ('Limite maximo de (1 a 100): '); readln(limite); until (limite>=0) and (limite<=100); if limite=0 then exit; contNum:=0; for i:=1 to qtdPos do begin vetorA[i]:=Random(limite)+1; vetorQtd[i]:=0; end; for i:=1 to qtdPos do begin igual:=false; for j:=1 to contNum do if vetorA[i] = vetorNum[j] then begin inc(vetorQtd[j]); igual:=true; break; end; if not igual then begin inc(contNum); vetorNum[contNum]:=vetorA[i]; inc(vetorQtd[contNum]); end; end; for i:=1 to qtdPos do begin write (vetorA[i]:6); if i mod 10 = 0 then writeln; end; writeln; writeln; for i:=1 to contNum do writeln('O numero ',vetorNum[i],' aparece (',vetorQtd[i],') ',valorPorExtenso(vetorQtd[i]),' veze(s) '); ReadKey; until limite=0; end. Não deixei exatamente como solicitado.. apenas para deixar algumas referências. Achando algum erro é só comentarem; Dúvidas para quem não entendeu alguma parte, é só perguntar também. Falou
  8. Vou tentar complementar ao mesmo tempo expondo alguns dicas gerais... @Charles Diogo da Silva, acredito que inicialmente a modelagem do seu algoritmo basicamente deveria depender do que você já estudou (foi dado em aula). Geralmente os exercícios são propostos justamente para reforçar aquilo que está aprendendo. Logo, faz todo sentido biológico utilizar apenas algo que já foi "formalmente" apresentado. Não recomendo utilizar recursos além do que você já estudou! Por que isso? cada tipo de estrutura que está aprendendo tem as suas características... por exemplo: o uso de vetores (array), em detrimento de variáveis simples, facilitaria, e muito, para quando é necessário armazenar esses dados de uma vez e só depois processar. Já utilizar registros (record), em detrimento de "variáveis separadas", deixará o seu código ainda mais simples, pois só precisará de um vetor, em vez de um vetor para cada dado (terá apenas um vetor de registro). Mas então, essas "vantagens" ficarão mais evidentes a medida que você vai evoluindo nos estudos...ou seja, se você já estivesse manjando dos paranauê, já estaria usando esses recurso!!! concorda? Resumindo: Use os recursos mais simples, depois poderá ajustar o código para usar o mais avançados (no sentido que vem depois). Mas vamos lá: Temos 3 pontos importantes já foram levantados, como: - quais tipos de laços de repetições deverá utilizar para cada contexto (for, while e repeat). Cada um funcionada de uma forma mais propícia para cada caso; Então, se não foi determinada uma quantidade de loops, e em vez disso impondo usar "uma condição de parada", o for, deixa de ser uma opção. Use while ou repeat. - uso ou não de vetores (array). Se você já aprendeu, deve usar!. Senão, não use! mesmo que supostamente fique mais simples ou mais coerente (coletar todos os dados antes, para só depois efetuar os cálculos). Faça inicialmente lendo e tratando no mesmo loop. - uso ou não se registro (record); Idem... se já estudou, porque não usar? senão, deixa queto (apesar de ser bacana e bem simples de usar... sobretudo usando em conjunto do vetores) obs.: esse tipo de estrutura também é conhecida como "struct" (de estrutura em inglês) em outras linguagens, como no C e C++, creio que por isso que @Flávio Pedroza usou esse termo. . Outros pontos, também importantes, seriam: - sempre manter o código indentado. Considero essencial! Tem ir acostumando desde cedo.. verá como é útil. - SEMPRE MANTER O CÓDIGO COMPILÁVEL, ou seja, sem erro de sintaxe. obs.: "erro lógica" é outra coisa! - uso de nomenclaturas de variáveis de modo mais sugestivo... e ao mesmo tempo que simples. etc Vamos partir para exemplos em código... Montando o esqueleto inicial: Eu acho interessante deixar o enunciado no corpo do código, ex.: program FCdH; {/* Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apre- sentarem para preenchimento de vagas no seu quadro de funcionários. Supondo que você seja o programador dessa empresa, faça um programa que: Leia, para cada candidato, a idade, o sexo (M e F) e a experiência no serviço (S ou N). Para encerrar a entrada de dados digite zero para a idade. Calcule e mostre: -o número de candidatos do sexo feminino; -o número de candidatos do sexo masculino; -o numero de homens que ja possui experencia no serviço; -o número de Homens que não possui experiencia no serviço; -o número de mulheres que já possui experiencia no serviço; -o numero de mulheres que não possui experiencia no serviço; -o nome do candidato com maior tempo de experiencia no serviço; -soma de todas as idades; -a media de todas as idades; -a média de todas as idades do sexo feminino; -a média de todas as idades do sexo masculino; */} begin end. Dessa forma ficando mais acessível... mas vai do gosto. Identificando as variáveis iniciais: Lendo o enunciado, temos inicialmente esse trecho da "entrada dos dados": Leia, para cada candidato, a idade, o sexo (M e F) e a experiência no serviço (S ou N). Para encerrar a entrada de dados digite zero para a idade. Chegamos a 3 variáveis: .../* -a média de todas as idades do sexo feminino; -a média de todas as idades do sexo masculino; */} var idade :integer; sexo :char; experiencia :char; begin end. Parece-me bem simples essa parte. Continuando... Identificando possíveis "variáveis relacionadas ao resultados": Posteriormente entra as possíveis variáveis para os dados que ele pede: Calcule e mostre: -o número de candidatos do sexo feminino; -o número de candidatos do sexo masculino; -o numero de homens que já possui experiência no serviço; -o número de Homens que não possui experiência no serviço; -o número de mulheres que já possui experiência no serviço; -o numero de mulheres que não possui experiência no serviço; -o nome do candidato com maior tempo de experiência no serviço; -soma de todas as idades; -a media de todas as idades; -a média de todas as idades do sexo feminino; -a média de todas as idades do sexo masculino; As variáveis até agora ficaram assim: var //dados do candidato idade :integer; sexo :char; experiencia :char; //variáveis auxiares para os dados solicitados qtdFem, //número de candidatos do sexo feminino; qtdMasc :integer; //número de candidatos do sexo masculino; qtdMascComExp, //numero de homens que já possui experiência no serviço; qtdMascSemExp, //número de homens que não possui experiência no serviço; qtdFemiComExp, //número de mulheres que já possui experiência no serviço; qtdFemiSemExp :integer; //numero de mulheres que não possui experiência no serviço; nomeMaiorExp :string; //nome do candidato com maior tempo de experiência no serviço; somaIdade :integer; //soma de todas as idades; mediaIdade :real; //media de todas as idades; mediaIdadeFemi:real; //média de todas as idades do sexo feminino; mediaIdadeMasc:real; //média de todas as idades do sexo masculino; Perceba que apenas fui lendo o enunciado e definindo as possíveis variáveis que vou precisar... bem passo a passo mesmo. Só seguir o fluxo. Mas pera aê!!! como é que eu vou saber o nome do candidato se tenho apenas a idade, sexo e experiência??? outra: como raios vou saber quem tem a maior quantidade de experiência se eu só pergunto se "tem experiência ou não tem experiência"??? Percebeu? seguindo a metodologia já veria que tem coisa estranha aí. Já teria que ter resolvido essa parada! Então, por essa minha interpretação, o enunciado está incompleto ou falho... teria que "revisar com quem passou o exercício". Não podemos simplesmente fazer da forma que quisermos... Mas claro que claro que nem tudo deve ser tão rígido assim... enquanto não descobre o que deve ser feito, podemos supor que é para "adaptar" o enunciado... vamos simplesmente aceitar que deveria ler esses dados que está faltando. Ficaria algo assim: var //dados do candidato idade :integer; sexo :char; experiencia :char; //dados do candidato extras, devido ao requisitos solicitados nome :string; tempoExp :integer; //tempo de experiência //variáveis auxiares para os dados solicitados qtdFem, //número de candidatos do sexo feminino; qtdMasc :integer; //número de candidatos do sexo masculino; qtdMascComExp, //numero de homens que já possui experiência no serviço; qtdMascSemExp, //número de homens que não possui experiência no serviço; qtdFemiComExp, //número de mulheres que já possui experiência no serviço; qtdFemiSemExp :integer; //numero de mulheres que não possui experiência no serviço; nomeMaiorExp :string; //nome do candidato com maior tempo de experiência no serviço; somaIdade :integer; //soma de todas as idades; mediaIdade :real; //media de todas as idades; mediaIdadeFemi:real; //média de todas as idades do sexo feminino; mediaIdadeMasc:real; //média de todas as idades do sexo masculino; begin end. Pronto. Temos uma boa base do que vamos precisar.. Oh! perceba que se botar para compilar, deve finalizar sem dar erros. Sempre vá compilando de tempos em tempos!... a cada parte que vai inserindo no código, bota para compilar para ver se tem algum erro de sintaxe. Se tiver, já analisa e corrige logo. Evite deixar para compilar quando tiver muita coisa implementado.. ficará bem mais difícil de corrigir. A medida que o código vai crescendo (e a cabeça esquentando), mais propício a cometer errinhos... melhor achar logo. Começando a implementar a parte do corpo: var //dados do candidato idade :integer; sexo :char; ehExp :char; //se é experiete ou não //dados do candidato extras, devido ao requisitos solicitados nome :string; experiencia :integer; //tempo de experiência //variáveis para os dados solicitados qtdFem, //número de candidatos do sexo feminino; qtdMasc :integer; //número de candidatos do sexo masculino; qtdMascComExp, //numero de homens que já possui experiência no serviço; qtdMascSemExp, //número de homens que não possui experiência no serviço; qtdFemiComExp, //número de mulheres que já possui experiência no serviço; qtdFemiSemExp :integer; //numero de mulheres que não possui experiência no serviço; nomeMaiorExp :string; //nome do candidato com maior tempo de experiência no serviço; somaIdade :integer; //soma de todas as idades; mediaIdade :real; //media de todas as idades; mediaIdadeFemi:real; //média de todas as idades do sexo feminino; mediaIdadeMasc:real; //média de todas as idades do sexo masculino; //variáveis auxiliares qntCand :integer; begin writeln('Dados do candidato:'); qntCand:=0; //inicializa a variável. obs.: no Pascal não precisa. Iria ficar //com 0 automaticamente. Mas é bom acostumar, pois nem sempre é assim... repeat write ('Nome: '); readln(nome); write ('Idade: '); readln(idade); write ('Sexo (M ou F): '); readln(sexo); write ('Tem experiencia? (S ou N): ') readln(ehExp); if (ehExp='S') or (ehExp='s') then begin write ('Tempo de experiencia: '); readln(experiencia); end; until idade = 0; ReadKey; //aguarda alguma tecla ser pressionada end. Perceba que já fiz alguns ajustes nas nomenclaturas das variáveis... Essa questão desse if, a medida que fui testando, achei interessante só perguntar se ele tiver experiência... sei lá. Poderia pode exemplo NÃO usar essa questão de se tem experiência ou não, e apenas quando não tiver, colocaria 0. Sacou? mas veja que isso já é diferente do que ESPECIFICADO no enunciado (mas se posso botar o nome e tempo, que não foi pedido, por que não não posso mudar isso também, rs). Em fim... Agora só ir implementando a computação dos dados e testando: program FCdH; uses CRT; //necessário em alguns compiladores para reconhecer o ReadKey, ClrScr etc {/* Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apre- sentarem para preenchimento de vagas no seu quadro de funcionários. Supondo que você seja o programador dessa empresa, faça um programa que: Leia, para cada candidato, a idade, o sexo (M e F) e a experiência no serviço (S ou N). Para encerrar a entrada de dados digite zero para a idade. Calcule e mostre: -o número de candidatos do sexo feminino; -o número de candidatos do sexo masculino; -o numero de homens que já possui experiência no serviço; -o número de homens que não possui experiência no serviço; -o número de mulheres que já possui experiência no serviço; -o numero de mulheres que não possui experiência no serviço; -o nome do candidato com maior tempo de experiência no serviço; -soma de todas as idades; -a media de todas as idades; -a média de todas as idades do sexo feminino; -a média de todas as idades do sexo masculino; */} var //dados do candidato idade :integer; sexo :char; ehExp :char; //se é experiete ou não //dados do candidato extras, devido ao requisitos solicitados nome :string; experiencia :integer; //tempo de experiência //variáveis para os dados solicitados qtdFemi, //número de candidatos do sexo feminino; qtdMasc :integer; //número de candidatos do sexo masculino; qtdMascComExp, //numero de homens que já possui experiência no serviço; qtdMascSemExp, //número de homens que não possui experiência no serviço; qtdFemiComExp, //número de mulheres que já possui experiência no serviço; qtdFemiSemExp :integer; //numero de mulheres que não possui experiência no serviço; nomeMaiorExp :string; //nome do candidato com maior tempo de experiência no serviço; somaIdade :integer; //soma de todas as idades; mediaIdade :real; //media de todas as idades; mediaIdadeFemi:real; //média de todas as idades do sexo feminino; mediaIdadeMasc:real; //média de todas as idades do sexo masculino; //variáveis auxiliares qntCand :integer; begin writeln('Dados do candidato:'); qntCand:=0; //inicializa a varipavel. obs.: no Pascal não precisa. Iria ficar //com 0 automaticamente. Mas é bom acostumar... repeat //LER DADOS DO CANDIDATO writeln; write ('NOME: '); readln(nome); write ('IDADE: '); readln(idade); write ('SEXO (M ou F): '); readln(sexo); sexo:=UpCase(sexo); write ('TEM EXPERIENCIA? (S ou N): '); readln(ehExp); ehExp:=UpCase(ehExp); if (ehExp='S') then begin write ('Tempo de experiencia (em meses): '); readln(experiencia); end; //ANALISA OS DADOS E FAZ OS "CÁLCULOS" if sexo='M' then //[1] qtdMasc:=qtdMasc+1 //número de candidatos do sexo masculino; else if sexo='F' then qtdFemi:=qtdFemi+1 //número de candidatos do sexo feminino; until idade = 0; writeln; writeln('RELATORIO DOS CANDIDATOS'); writeln; writeln('Numero de candidatos do sexo feminino : ',qtdFemi); writeln('Numero de candidatos do sexo masculino: ',qtdMasc); ReadKey; //aguarda alguma tecla ser pressionada end. Veja que só inseri um "item": a quantidade de de feminino e a quantidade de masculino. Foi necessário fazer vários pequenos testes até chegar nesse ponto. NÃO TENTE IMPLEMENTAR TUDO DE UMA VEZ... É melhor dividir em problemas menores e ir avançando... Continuar implementando: Agora insira outro item qualquer... por exemplo "A media de todas as idades"... como é bem simples. Pode já fazer também "a média de todas as idades do sexo feminino" e "a média de todas as idades do sexo masculino". Só essas 3 coisas tá bom. Faz testes. Vê se tudo dá os resultados corretamente. Posta o código aqui para analisarmos. Depois implementa outro. Por exemplo "o nome do candidato com maior tempo de experiência no serviço". Por ai vai... Sugiro que implemente o código assim. Depois passamos para vetores (array) e/ou registros (record). Te ajudamos a "converter". Verás que é bem simples. No aguardo.
  9. @Alisson Neres, por favor. Poste o código completo para analisarmos e também poder servi de base para outros membros. No aguardo.
  10. Complementando: @devair1010, bem notado, rs. @Charles Diogo da Silva, resumidamente são esses 3 pontos: você usou ";", onde deveria ser ":"; apesar da forma que você fez funcionar, fica redundante e a proposta do case em si perde o sentido. A forma "correta" seria a proposta por @devair1010; lembrando que o o último caso vai de 0 a 4, e não de 0 a 5. Segue exemplos de como poderia ficar: program Idades; uses CRT; var idade :integer; begin writeln('Digite a sua idade'); readln(idade); case idade of 5 ..10 :writeln('Você é Infantil'); 11..17 :writeln('Você é Juvenil'); 18..1000:writeln('Você é Adulto'); 0 ..4 :writeln('A idade digitada é de uma criança'); end; //fim case idade end. obs.: sugiro acostumar a identificar o end; do case... pois não existe um begin correspondente. Vai evitar confusões em códigos maiores... Uma outra forma de ler os dados do usuário é deixar a leitura no lado, ex.: write ('Digite a sua idade: '); readln(idade); O número digitado vai ficar depois do ": ". Fica também interessante deixar assim: write ('Digite a sua idade: '); readln(idade); Lembrando que no Pascal, o que separa as instruções é o ";", ou seja, esse trecho acima tem "duas linhas".
  11. Só olhar o erro. No PascalZim também diz a linha, ou seja, era para ter um ";" mesmo lá? (dica: compare com as outras linhas) No aguardo. adicionado 10 minutos depois obs.: seguindo a lógica do restante do código, seria de 0 a 4 (e não 0 a 5).
  12. Olá. @guhbrj, continuo sem entender. Por exemplo, inseri o número 20. O resultado na tela ficou assim: Entre com um numero: 20 x = 1 num = 20 x = 2 num = 10 x = 3 num = 5 20 = 2^4 Pelas contas que eu fiz, 2^4 = 16, e não 20. Qual proposta desse código e a relação com o problema do @CARRETA PCZAO?
  13. 7# Eu passei os valores por parâmetro. Usei o i. (cada valor de i, será um valor de num) Mas então, qual o objetivo dessa função pot()? 8# Em relação à questão: Pelo que eu entendi, antes teria que verificar se de fato @CARRETA PCZAO precisa disso ou não, ou seja, pode está querendo algo que não tem relação com o que foi proposto. Vide:
  14. Olá. Alguns pontos: 1# Qual o enunciado do problema? é bom analisá-lo para saber se o que você quer fazer de fato é o que foi solicitado. Por exemplo. Se você informou 9, e deveria exibir 3^2, provavelmente isso não tem algo a ver com "pegar as vezes que ele é dividido e dar a potência", ou seja, 3^2 simplesmente seria "o resultado da raiz do número (3, que é a raiz de 9), elevado ao grau da raiz (2 porque a raiz foi quadrada)". Exemplo: 16 = 4^2 25 = 5^2 11 ~= 3,3166^2 etc Se fosse ao cubo. 8 = 2^3 64 = 4^3 29 ~= 3.07231^3 etc Resumindo: Apenas vai pegar o resultado e depois exibir ^2. Mas em fim, poste o enunciado completo. 2# SOBRE A INDENTAÇÃO DE CÓDIGOS Sempre mantenha o código indentado. É de fundamental importância. Exemplo: #include<stdio.h> #include<stdlib.h> #include<windows.h> float rai(float num); main() { printf("a raiz quadrada e = ou ~= %f ",rai(16)); } float rai(float num) { int i; float r=num, cont; //raiz recebe o numero for(i=0; i<num; i++) { //faz o laço ate for menor que o numero passado r=r/2+num/(2*r); cont=r; printf("%f \n",cont); } return r; } 3# SOBRE USO DE RECURSOS NÃO UTILIZADOS OU DESNECESSÁRIOS Só use o que você precisa, exemplo: #include<stdio.h> //#include<stdlib.h> float rai(float num); main() { printf("a raiz quadrada e = ou ~= %f ",rai(16)); } float rai(float num) { int i; float r=num; for(i=0; i<num; i++) { //faz o laço ate for menor que o numero passado r= r/2 + num/(2*r); printf("%f \n",r); } return r; } 4# SOBRE A NOMENCLATURA DAS FUNÇÕES A nomenclatura rai não me parece interessante. Indico utilizar uma nomenclatura mais sugestiva, exemplo: float raizQ(float num); Fica por si só subentendido que é "uma função que retorna a Raiz Quadrada de um número real". obs.: lá no inglês, por exemplo, usam-se algumas abreviações/reduções que no idioma funcionam... como pow() em alusão a power() e sqrt() em alusão a square root etc. Em fim... prefira usar nomenclaturas funcionais. 5# Não consegui entender a necessidade para uso de um for nesse algoritmo. Perceba que na formula que você usou dentro do laço, em determinado momento está ocorrendo de começara repetir o resultado, ou seja, a condição de parada do for não está muito coerente. Resumidamente: Você precisa reformular o algoritmo para calcular uma raiz quadrada. Exibir o tal dessa estrutura "3^2" é algo posterior, ou seja, se nem está calculando corretamente a raiz, como vai utilizar algo do cálculo para exibir alguma coisa? 6# @guhbrj, o seu código não está funcionando muito bem. Veja: #include<stdio.h> //#include<stdlib.h> int pot(int num, int x); main() { int i; for(i; i<20; i++) printf("Raiz(%d) = %f \n",i,pot(i,1)); } int pot(int num, int x) { if(num/2>1) return pot(num/2, x+1); else return x; } *** No aguardo.
  15. @CARRETA PCZAO, alguns pontos: 1# Sempre mantenha o código indentado. É imprescindível. Ex.: char *msg(int num, char *str); main() { char str[50], str1[50]; int num = 5; str1 = msg(num, str); printf("%s", str1); } char *msg(int num, char *str) { if (num == 0) strcpy(str, "Opa escolheu 0"); else strcpy(str, "Opa escolheu <> 0"); return str; } Visualmente já dá uma base da estrutura. 2# Você postou um código, mas não disse o que está acontecendo nele. Por exemplo: "Ao compilar está dando erro nessa linha: str1 = msg(num,str); No DevC++ acusa: 6 10 C:\xxx\Dev-Cpp 5.11 TDM-GCC 4.9.2\_FONTES\_FCdH.c [Error] assignment to expression with array type Não entendi esse erro" 3# Tendo o erro, já ajudaria bastante, pois já daria uma base do que era (sem precisar analisar linha a linha ou ter compilar)... diz algo como "erro na atribuição para expressões com vetor". (vide Google Translator) Até você mesmo pesquisando por "[Error] assignment to expression with array type", acharia comentários indicando essa solução de @devair1010 (no caso, usar strcpy() em vez de "="), ou seja, para atribuir esse tipos de valores, usam-se uma função, em vez de usar o tradicional "=". *** Att,

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×