Ir ao conteúdo
  • Cadastre-se

Anderson Eiji

Membro Júnior
  • Posts

    8
  • Cadastrado em

  • Última visita

Reputação

1
  1. Na verdade tava fazendo errado, porque o enunciado do professor é esse: Escreva um programa em Pascal, utilizando o algoritmo de classificação sorteado para sua equipe (no caso Shellsort), que receba como entrada um frase escrita pelo usuário com até 255 caracteres (letras e/ou números). Cada caractere da frase deve ser armazenado individualmente em uma unidade de um vetor ou lista (ponteiros). Seu programa deve mostrar na tela o conjunto de entradas (letras e números da frase) em ordem crescente de valores de acordo com a Tabela ASCII. Utilize o conceito de programação modular (funções e procedimentos) para a criação do programa em questão. Obs.: Em Pascal a função chr(int) imprime na tela o caractere de valor int, entre 1 – 256. Dai, refiz e o professor me ajudou. Ficou assim: Program Shellsort; const n = 255; type vetor = array [0..n] of integer; var elemento: string; Opcao,i: integer; v:vetor; procedure Parada; var Tecla: char; begin gotoxy(60, 25); write('Pressione algo !'); Tecla := readkey; end; procedure inserir(i:integer); begin writeln; write('digite o elemento a frase: ');readln(elemento); for i:=1 to length(elemento) do begin v[i]:=ord(elemento[i]); end; end; procedure imprimir_frase(var i:integer); var Nl, Nc: byte; begin clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nl := 1; Nc := 1; for i := 1 to length(elemento) do begin gotoxy(Nc, Nl); write(elemento[i]:5,'- ',(ord(elemento[i]))); Nl := Nl + 1; if Nl = 22 then begin Nl := 1; Nc := Nc + 15; if Nc > 65 then begin Parada; clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nc := 1; end; end; end; gotoxy(11, 24); writeln('Atencao... Exibicao Concluida !'); end; procedure ShellSort; var a, j: integer; h: integer; x: integer; begin gotoxy(11, 24); writeln('Aguarde... Ordenando - ShellSort !'); h := 1; repeat h := 3 * h + 1 until h > length(elemento); repeat h := h div 3; for a := h + 1 to length(elemento) do begin x := v[a]; j := a; while (j > h) and (v[j - h] > x) do begin v[j] := v[j - h]; j := j - h; end; v[j] := x; end; until h = 1; gotoxy(11, 24); writeln('Atencao.... Ordenacao Concluida !'); end; procedure imprimir(var i:integer); var Nl, Nc: byte; begin clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nl := 1; Nc := 1; for i := 1 to length(elemento) do begin gotoxy(Nc, Nl); write(i:5,'- ',(v[i])); // se quiser o número digitado inicialmente coloca chr(v[i])) Nl := Nl + 1; if Nl = 22 then begin Nl := 1; Nc := Nc + 15; if Nc > 65 then begin Parada; clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nc := 1; end; end; end; gotoxy(11, 24); writeln('Atencao... Exibicao Concluida !'); end; // programa principal Begin repeat clrscr; //limpa a tela writeln('(1) digitar o elemento inteiro.'); writeln('(2) imprimir o elemento sem estar ordenado.'); writeln('(3) imprimir o elemento ordenado por Shellsort.'); writeln('(4) sair do programa.'); writeln; //imprime uma linha em branco write(' digite a opção desejada: '); readln(opcao); case opcao of 1: begin writeln (' você escolheu a opção 1. '); writeln; inserir(i); end; 2: begin writeln (' você escolheu a opção 2. '); writeln; imprimir_frase(i); end; 3: begin writeln (' você escolheu a opção 3. '); writeln; Shellsort; imprimir(i); end; 4: writeln (' você escolheu a opção 4. '); else writeln (' você digitou uma opção invalida. '); end; writeln; writeln(' Digite qualquer tecla para continuar .....'); readkey; until (opcao = 4); end.
  2. @Simon Viegas , uma pergunta se eu for fazer por lista através de apontador (ponteiro), mudaria a complexidade do procedimento Shellsort, ne? Uma vez que precisaria um laço de repetição para percorrer a lista e encontrar tal posição... porque por lista através de apontador (lista encadeada) só é possível acessar a posição sequencialmente, certo?
  3. @Simon Viegas , deu certo aqui, muito obrigado!! Mas deve ter algumas coisas a melhorar que não sei.. Program Shellsort_Lista_Linear_Por_Arranjo; const inicioArranjo = 1; MaxTam = 255; type Apontador = integer; TipoItem = record Chave: string; end; indice = 1..MaxTam; TipoLista = record item: array [indice] of TipoItem; Primeiro: Apontador; Ultimo: Apontador; end; var elemento: TipoLista; opcao: integer; c:TipoItem; procedure inserir(var elemento: TipoLista); var i,k,s:Apontador; begin if (MaxTam-(elemento.Ultimo-1) = MaxTam) then begin writeln(' digite uma quantidade de elementos, sendo menor ou igual que ',MaxTam,'.'); write(' quantos elementos serão digitados?: ');readln(k); while (k > MaxTam) do begin writeln(' digite uma quantidade de elementos, sendo menor ou igual que ', MaxTam,'.'); write('quantos elementos serão digitados: ');readln(k); end; if (k = 0) then begin writeln; writeln (' nenhum valor será digitado!'); end else begin writeln; for i:=elemento.Ultimo to k do begin write('digite um valor do elemento e tecle <ENTER>: ');readln(c.Chave); elemento.Item[elemento.Ultimo]:=c; elemento.Ultimo:=elemento.Ultimo + 1; end; end; end else begin s:=MaxTam-(elemento.Ultimo-1); writeln(' digite uma quantidade de elementos, sendo menor ou igual que ',s,'.'); write(' quantos elementos serão digitados?: ');readln(k); while ((k + s) > MaxTam) do begin writeln(' digite uma quantidade de elementos, sendo menor ou igual que ',s,'.'); write('quantos elementos serão digitados: ');readln(k); end; writeln; if (k = 0) then begin writeln; writeln (' nenhum valor será digitado!'); end else begin writeln; for i:=elemento.Ultimo to (k + s) do begin write('digite um valor do elemento e tecle <ENTER>: ');readln(c.Chave); elemento.Item[elemento.Ultimo]:=c; elemento.Ultimo:=elemento.Ultimo + 1; end; end; end; end; procedure inserir2(x:TipoItem; var elemento:TipoLista); begin elemento.Item[elemento.Ultimo]:=x; elemento.Ultimo:=elemento.Ultimo + 1; end; procedure FazListaVazia(var elemento: TipoLista); begin elemento.Primeiro:=inicioArranjo; elemento.Ultimo:=elemento.Primeiro; writeln; writeln(' lista zerada com sucesso!'); end; function Vazia(var elemento:TipoLista):boolean; begin Vazia:=elemento.Primeiro=elemento.Ultimo; end; procedure ShellSort(var elemento:TipoLista); var i, j: Indice; h: integer; x: TipoItem; begin gotoxy(11, 24); writeln('Aguarde... Ordenando - ShellSort !'); h := 1; repeat h := 3 * h + 1 until h > elemento.Ultimo - 1; repeat h := h div 3; for i := h + 1 to elemento.Ultimo - 1 do begin x.Chave := elemento.item[i].Chave; j := i; while (j > h) and (elemento.item[j - h].Chave > x.Chave) do begin elemento.item[j] := elemento.item[j - h]; j := j - h; end; elemento.item[j] := x; end; until h = 1; gotoxy(11, 24); writeln('Atencao.... Ordenacao Concluida !'); end; procedure Parada; var Tecla: char; begin gotoxy(60, 25); write('Pressione algo !'); Tecla := readkey; end; procedure imprimir(var elemento: TipoLista); var Nl, Nc: byte; i: Indice; begin if (Vazia(elemento)=true) then writeln (' Nenhum valor foi digitado!') else begin clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nl := 1; Nc := 1; for i:= elemento.Primeiro to (elemento.Ultimo-1) do begin gotoxy(Nc, Nl); write(i:5,'- ',elemento.Item[i].Chave); Nl := Nl + 1; if Nl = 22 then begin Nl := 1; Nc := Nc + 15; if Nc > 65 then begin Parada; clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nc := 1; end; end; end; gotoxy(11, 24); writeln('Atencao... Exibicao Concluida !'); end; end; procedure inserir2_; begin if (elemento.Ultimo > MaxTam) then begin writeln (' O programa tem capacidade máxima de ',MaxTam,' caracteres!'); writeln(' Restam mais ',MaxTam-(elemento.Ultimo-1),' caracteres.'); end else begin write('digite um valor: ');readln(c.Chave); inserir2(c,elemento); writeln; writeln(' Restam mais ',MaxTam-(elemento.Ultimo-1),' caracteres.'); end; end; // programa principal Begin FazListaVazia(elemento); repeat clrscr; //limpa a tela writeln('(1) digitar o elemento inteiro a cada ENTER e sabendo da quantidade do elemento.'); writeln('(2) digitar um valor do elemento sem saber a quantidade a ser digitada.'); writeln('(3) imprimir elemento não ordenado.'); writeln('(4) imprimir elemento ordenado por Shellsort.'); writeln('(5) zerar a lista de elementos.'); writeln('(6) sair do programa.'); Writeln; //imprime uma linha em branco write(' digite a opção desejada: '); readln(opcao); case opcao of 1: begin writeln (' você escolheu a opção 1. '); writeln; inserir(elemento); end; 2: begin writeln (' você escolheu a opção 2. '); writeln; inserir2_; end; 3: begin writeln (' você escolheu a opção 3. '); writeln; imprimir(elemento); end; 4: begin writeln (' você escolheu a opção 4. '); writeln; Shellsort(elemento); imprimir(elemento); end; 5: begin writeln (' você escolheu a opção 5. '); writeln; FazListaVazia(elemento); end; 6: writeln (' você escolheu a opção 6. '); else writeln (' você digitou uma opção invalida. '); end; writeln; writeln('Digite qualquer tecla para continuar .....'); readkey; until (opcao = 6); end.
  4. @Simon Viegas , tive que arrumar o Shellsort mesmo, colocando um -1, porém agora a opção 2 desse programa em baixo não está pegando, e preciso entregar amanhã, Program Shellsort_LISTA_ENCADEADA_ARRANJO; const inicioArranjo = 1; MaxTam = 255; type Apontador = integer; TipoItem = record Chave: string; end; indice = 1..MaxTam; TipoLista = record item: array [indice] of TipoItem; Primeiro: Apontador; Ultimo: Apontador; end; var elemento: TipoLista; opcao: integer; c:TipoItem; procedure inserir(x:TipoItem; var elemento:TipoLista); begin if (elemento.Ultimo > MaxTam) then writeln ('O programa tem capacidade máxima de 255 caracteres!') else begin elemento.Item[elemento.Ultimo]:=x; elemento.Ultimo:=elemento.Ultimo + 1; end; end; procedure inserir2(var elemento: TipoLista); //arrumar, pois não está mostrando para imprimir var i,k:integer; x:TipoItem; begin writeln(' digite uma quantidade de elementos, sendo menor que 255.'); write(' quantos elementos serão digitados?: ');readln(k); if (k > 255) then while (k > 255) do begin writeln(' digite uma quantidade de elementos, sendo menor que 255.'); write('quantos elementos serão digitados: ');readln(k); end; writeln; for i:=elemento.Ultimo to k do begin write('digite o elemento a ser ordenado e tecle <ENTER>: ');readln(x.Chave); elemento.Item[i]:=x; end; end; procedure FazListaVazia(var elemento: TipoLista); begin elemento.Primeiro:=inicioArranjo; elemento.Ultimo:=elemento.Primeiro; writeln; writeln(' vetor dos elementos zerado com sucesso!'); end; function Vazia(var elemento:TipoLista):boolean; begin Vazia:=elemento.Primeiro=elemento.Ultimo; end; procedure ShellSort(var elemento:TipoLista); var i, j: Indice; h: integer; x: TipoItem; begin gotoxy(11, 24); writeln('Aguarde... Ordenando - ShellSort !'); h := 1; repeat h := 3 * h + 1 until h > elemento.Ultimo - 1; //coloquei um -1 aqui, tava elemento.Ultimo repeat h := h div 3; for i := h + 1 to elemento.Ultimo - 1 do begin x.Chave := elemento.item[i].Chave; //normal é só x; j := i; while (j > h) and (elemento.item[j - h].Chave > x.Chave) do begin elemento.item[j] := elemento.item[j - h]; j := j - h; end; elemento.item[j] := x; end; until h = 1; gotoxy(11, 24); writeln('Atencao.... Ordenacao Concluida !'); end; procedure Parada; var Tecla: char; begin gotoxy(60, 25); write('Pressione algo !'); Tecla := readkey; end; procedure imprimir(var elemento: TipoLista); var Nl, Nc: byte; i: Indice; begin clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nl := 1; Nc := 1; for i:= elemento.Primeiro to (elemento.Ultimo-1) do begin gotoxy(Nc, Nl); write(i:5,'- ',elemento.Item[i].Chave); Nl := Nl + 1; if Nl = 22 then begin Nl := 1; Nc := Nc + 15; if Nc > 65 then begin Parada; clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nc := 1; end; end; end; gotoxy(11, 24); writeln('Atencao... Exibicao Concluida !'); end; // programa principal Begin FazListaVazia(elemento); //elemento.Ultimo:=1; repeat clrscr; //limpa a tela writeln('(1) digitar um valor para o elemento.'); writeln('(2) digitar o elemento inteiro a cada ENTER e sabendo da quantidade do elemento.'); writeln('(3) imprimir elemento não ordenado.'); writeln('(4) imprimir elemento ordenado por Shellsort.'); writeln('(5) zerar a lista de elementos.'); writeln('(6) sair do programa.'); Writeln; //imprime uma linha em branco write(' digite a opção desejada: '); readln(opcao); case opcao of 1: begin writeln (' você escolheu a opção 1. '); writeln; write('digite um valor: ');readln(c.Chave); inserir(c,elemento); end; 2: begin writeln (' você escolheu a opção 2. '); writeln; inserir2(elemento); end; 3: begin writeln (' você escolheu a opção 3. '); writeln; imprimir(elemento); end; 4: begin writeln (' você escolheu a opção 4. '); writeln; Shellsort(elemento); imprimir(elemento); end; 5: begin writeln (' você escolheu a opção 5. '); writeln; FazListaVazia(elemento); end; 6: writeln (' você escolheu a opção 6. '); else writeln (' você digitou uma opção invalida. '); end; writeln; writeln('Digite qualquer tecla para continuar .....'); readkey; until (opcao = 6); end.
  5. Boa tarde, @Simon Viegas Agora o erro é outro. Eu armazeno os valores de um a um, ai depois quando eu seleciono a opção 2 para ordenar e imprimir, não aparece todos os valores ordenados Program Shellsort_LISTA_ENCADEADA_ARRANJO; const inicioArranjo = 1; MaxTam = 255; type Apontador = integer; TipoItem = record Chave: string; end; indice = 1..MaxTam; TipoLista = record item: array [indice] of TipoItem; Primeiro: Apontador; Ultimo: Apontador; end; var elemento: TipoLista; opcao: integer; c:TipoItem; procedure inserir(x:TipoItem; var elemento:TipoLista); begin elemento.Ultimo:=1; if (elemento.Ultimo > MaxTam) then writeln ('O programa tem capacidade máxima de 255 caracteres!') else begin elemento.Item[elemento.Ultimo]:=x; // erro ao entrar com um valor: posição 0 está fora dos limites do vetor elemento.Ultimo:=elemento.Ultimo + 1; end; end; procedure FazListaVazia(var elemento: TipoLista); begin elemento.Primeiro:=inicioArranjo; elemento.Ultimo:=elemento.Primeiro; writeln; writeln(' vetor dos elementos zerado com sucesso!'); end; function Vazia(var elemento:TipoLista):boolean; begin Vazia:=elemento.Primeiro=elemento.Ultimo; end; procedure ShellSort(var elemento:TipoLista); var i, j: Indice; h: integer; x: TipoItem; begin gotoxy(11, 24); writeln('Aguarde... Ordenando - ShellSort !'); h := 1; repeat h := 3 * h + 1 until h > elemento.Ultimo; repeat h := h div 3; for i := h + 1 to elemento.Ultimo do begin x.Chave := elemento.item[i].Chave; //normal é só x; j := i; while (j > h) and (elemento.item[j - h].Chave > x.Chave) do begin elemento.item[j] := elemento.item[j - h]; j := j - h; end; elemento.item[j] := x; end; until h = 1; gotoxy(11, 24); writeln('Atencao.... Ordenacao Concluida !'); end; procedure Parada; var Tecla: char; begin gotoxy(60, 25); write('Pressione algo !'); Tecla := readkey; end; procedure imprimir(var elemento: TipoLista); var Nl, Nc: byte; i: Indice; begin clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nl := 1; Nc := 1; for i:= elemento.Primeiro to (elemento.Ultimo) do //tava: elemento.Ultimo - 1 begin gotoxy(Nc, Nl); write(i:5,'- ',elemento.Item[i].Chave); Nl := Nl + 1; if Nl = 22 then begin Nl := 1; Nc := Nc + 15; if Nc > 65 then begin Parada; clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nc := 1; end; end; end; gotoxy(11, 24); writeln('Atencao... Exibicao Concluida !'); end; // programa principal Begin FazListaVazia(elemento); repeat clrscr; //limpa a tela writeln('(1) digitar o elemento.'); writeln('(2) imprimir elemento ordenado por Shellsort.'); writeln('(3) zerar a lista de elementos.'); writeln('(4) sair do programa.'); Writeln; //imprime uma linha em branco write(' digite a opção desejada: '); readln(opcao); case opcao of 1: begin writeln (' você escolheu a opção 1. '); writeln; write('digite o elemento a ser digitado: ');readln(c.Chave); inserir(c,elemento); end; 2: begin writeln (' você escolheu a opção 2. '); writeln; Shellsort(elemento); imprimir(elemento); end; 3: begin writeln (' você escolheu a opção 3. '); writeln; FazListaVazia(elemento); end; 4: writeln (' você escolheu a opção 4. '); else writeln (' você digitou uma opção invalida. '); end; writeln; writeln('Digite qualquer tecla para continuar .....'); readkey; until (opcao = 4); end.
  6. Estou fazendo por lista. O programa compilar, mas ao digitar um valor para o vetor, logo de inicio o programa trava e fala que "a posição zero está fora dos limites do vetor". Se puderem me ajudar, agradeço Program Shellsort_LISTA_ENCADEADA; const inicioArranjo = 1; MaxTam = 255; type Apontador = integer; TipoItem = record Chave: string; end; TipoLista = record item: array [1..MaxTam] of TipoItem; Primeiro: Apontador; Ultimo: Apontador; end; indice = 1..MaxTam; var elemento: TipoLista; opcao: integer; c:TipoItem; procedure inserir(x:TipoItem; var elemento:TipoLista); begin if (elemento.Ultimo > MaxTam) then writeln ('O programa tem capacidade máxima de 255 caracteres!') else begin elemento.Item[elemento.Ultimo]:=x; elemento.Ultimo:=elemento.Ultimo + 1; end; end; procedure FazListaVazia (var elemento: TipoLista); begin elemento.Primeiro:=inicioArranjo; elemento.Ultimo:=elemento.Primeiro; writeln; writeln(' vetor dos elementos zerado com sucesso!'); end; function Vazia(var elemento:TipoLista):boolean; begin Vazia:=elemento.Primeiro=elemento.Ultimo; end; procedure ShellSort(var elemento:TipoLista); var i, j: Indice; h: integer; x: TipoItem; begin gotoxy(11, 24); writeln('Aguarde... Ordenando - ShellSort !'); h := 1; repeat h := 3 * h + 1 until h > elemento.Ultimo; repeat h := h div 3; for i := h + 1 to elemento.Ultimo do begin x.Chave := elemento.item.Chave; //normal é só x; j := i; while (j > h) and (elemento.item[j - h].Chave > x.Chave) do begin elemento.item[j] := elemento.item[j - h]; j := j - h; end; elemento.item[j] := x; end; until h = 1; gotoxy(11, 24); writeln('Atencao.... Ordenacao Concluida !'); end; procedure Parada; var Tecla: char; begin gotoxy(60, 25); write('Pressione algo !'); Tecla := readkey; end; procedure imprimir(var elemento: TipoLista); var Nl, Nc: byte; i: Indice; begin clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nl := 1; Nc := 1; for i:= elemento.Primeiro to (elemento.Ultimo - 1) do begin gotoxy(Nc, Nl); write(i:5,'- ',elemento.Item.Chave); Nl := Nl + 1; if Nl = 22 then begin Nl := 1; Nc := Nc + 15; if Nc > 65 then begin Parada; clrscr; gotoxy(01, 24); writeln('Mensagem: Aguarde... Exibe Elementos !'); Nc := 1; end; end; end; gotoxy(11, 24); writeln('Atencao... Exibicao Concluida !'); end; // programa principal Begin repeat clrscr; //limpa a tela writeln('(1) digitar o elemento.'); writeln('(2) imprimir elemento ordenado por Shellsort.'); writeln('(3) zerar a lista de elementos.'); writeln('(4) sair do programa.'); Writeln; //imprime uma linha em branco write(' digite a opção desejada: '); readln(opcao); case opcao of 1: begin writeln (' você escolheu a opção 1. '); writeln; write('digite o elemento a ser digitado: ');readln(c.Chave); inserir(c,elemento); end; 2: begin writeln (' você escolheu a opção 2. '); writeln; Shellsort(elemento); imprimir(elemento); end; 3: begin writeln (' você escolheu a opção 3. '); writeln; FazListaVazia(elemento); end; 4: writeln (' você escolheu a opção 4. '); else writeln (' você digitou uma opção invalida. '); end; writeln; writeln('Digite qualquer tecla para continuar .....'); readkey; until (opcao = 4); end.
  7. @Simon Viegas , sim, agora eu vi, pois quando eu jogo o valor 30 tá dando erro falando que tem divisão por zero, quando que deveria ser 2,7182. Mudei, e agora só está dando E = 2, estou vendo o porque agora... Program fatorial_no_denomidador; var E,soma:real; n,fat,i,x:integer; opcao:char; begin while (opcao <> 'n') do begin clrscr; E:=1; x:=1; write(' Digite um número inteiro e positivo (>0): ');readln(n); while (n<=0) do begin writeln; writeln(' ',n,' não é positivo!'); writeln; write(' Digite um número inteiro e positivo: ');readln(n); clrscr; end; if(n>0) then begin soma:=0; while (x<=n) do begin fat:=1; for i:=1 to x do begin fat := fat*i; //1*1, 1*2, 2*3, 6*4, 24*5... end; soma:= soma + (1 div fat); x := x + 1; end; E:= E + soma; end; writeln; writeln(' O valor gerado pela expressao é ',E:0:4); writeln; writeln(' Deseja digitar outro número para N! no denominador? sim <s> e não <n> '); write(' Resposta: ');readln(opcao); writeln; writeln(' digite qualquer tecla para continuar...'); readkey; end; readkey; end. @Simon Viegas , eu coloquei uma condição (se fat<>0), pois quando n era maior que 30 tava dando erro falando ser 'divisão por zero' e agora deu certo. Só não sei o porque tava dando erro, sendo que 30! é diferente de zero, ou seja, 1//30! o resultado é aproximadamente igual a 0, mas não é divisão por zero...e se puder explicar, agradeço O do porque só aparecia o número 2 já entendi, pois div é divisão inteira e / (barra) é divisão real... Program fatorial_E; var E,soma:real; n,fat,i,x:integer; opcao:char; begin while (opcao <> 'n') do begin clrscr; E:=1; x:=1; write(' Digite um número inteiro e positivo: ');readln(n); while (n<=0) do begin writeln; writeln('n,' não é positivo!'); writeln; write(' Digite um número inteiro e positivo: ');readln(n); clrscr; end; if(n>0) then begin soma:=0; while (x<=n) do begin fat:=1; for i:=1 to x do begin fat := fat*i; //1*1, 1*2, 2*3, 6*4, 24*5... end; if (fat<>0) then begin soma:=soma+(1/fat); end else break; x := x + 1; end; end; E:=E+soma; writeln; writeln(' O valor gerado pela expressao é ',E:0:6); writeln; writeln(' Deseja digitar outro número para N! no denominador? sim <s> e não <n> '); write(' Resposta: ');readln(opcao); writeln; writeln(' digite qualquer tecla para continuar...'); readkey; end; readkey; end. Creio que já entendi o porque a variavel fat estava dando 0, pois a variavel fat estava declarada como integer, quando passei a fat para o real (fat:real;) não precisou mais da condição. Uma vez que 30! é um valor muito grande acaba ultrapassando a faixa dos limites do tipo integer e retornando um zero, porém ao declarar como tipo real (até o 100! deu certo) a faixa dos limites é maior que a do integer, logo não precisando da condição... Program fatorial_E; var E,soma,fat:real; n,i,x:integer; opcao:char; begin while (opcao <> 'n') do begin clrscr; E:=1; x:=1; write(' Digite um número inteiro e positivo(>0): ');readln(n); while (n<=0) do begin writeln; writeln(' ',n,' não é positivo!'); writeln; write(' Digite um número inteiro e positivo: ');readln(n); clrscr; end; if(n>0) then begin soma:=0; while (x<=n) do begin fat:=1; for i:=1 to x do begin fat := fat*i; //1*1, 1*2, 2*3, 6*4, 24*5... end; soma:=(1/(fat))+soma; x := x + 1; end; end; E:=E+soma; writeln; writeln(' O valor gerado pela expressao é ',E:0:9); writeln; writeln(' Deseja digitar outro número para N! no denominador? sim <s> e não <n> '); write(' Resposta: ');readln(opcao); writeln; writeln(' digite qualquer tecla para continuar...'); readkey; end; readkey; end.
  8. Boa noite, o meu ficou diferente, pois pelo do Rosberguedes não estava funcionando. Portanto, ficou assim: Program Fatorial; var E,soma:real; n,fat,i,x:integer; opcao:char; begin while (opcao <> 'n') do begin clrscr; E:=0; x:=1; write(' Digite um número inteiro e positivo: ');readln(n); while (n<0) do begin writeln; writeln(n,' não é positivo!'); writeln; write(' Digite um número inteiro e positivo: ');readln(n); clrscr; end; if(n>0) then while (x<=n) do begin fat:=1; soma:=0; for i:=1 to n do begin fat := fat*i; //1*1, 1*2, 2*3, 6*4, 24*5... E:=1/(fat); // o 6 é 1*2*3 e 24 é 1*2*3*4... soma:=E+soma; end; x := x + 1; end; E:=1+soma; writeln; writeln(' O valor gerado pela expressao é ',E:0:4); writeln; writeln(' Deseja digitar outro número para N! no denominador? sim <s> e não <n> '); write(' Resposta: ');readln(opcao); writeln; writeln(' digite qualquer tecla para continuar...'); readkey; end; readkey; end.

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