Ir para conteúdo
Fórum Script Brasil

jrsilvamg

Membros
  • Total de itens

    37
  • Registro em

  • Última visita

Posts postados por jrsilvamg

  1. Não estou conseguindo entender, seu que o valor do item a é 10 pois compilei no Dev C++, mas não estou conseguindo compreender como as coisas acontecem no problema abaixo.

    Problema: Manuscritamente resolva os itens a) e B) por meio da função Rec:

    a ) Qual o valor de Rec(5,3) ?

    b ) Quantas chamadas serão feitas na avaliação acima?

    int Rec(int n,int m)
    {
        if (n==m || n==0)
    
            return 1;
        else
        {
            return Rec(n-1,m) + Rec(n-1,m+1);
        }
    
    }
    
    int main(void)
    {
        int n = 5, m = 3;
    
        printf("%d",Rec(n, m));
    
        getch();
    }
    Fico no aguardo
    Execute o código e veja se te ajuda você a atender o que acontece nesta recursividade. Quando estou com duvidas do que acontece durante a execução do código eu coloca alguns printf para ver o que esta acontece e qual será meu retorno. esta linha return Rec(n-1,m) + Rec(n-1,m+1); o Rec(n-1,m) chama a função Rec novamente já Rec(n-1,m+1) fica esperando o Rec(n-1,m) acabar de ser executado para chamar a funcao Rec novamente, mas quando o Rec(n-1,m) chama a função Rec haverá um novo return Rec(n-1,m) + Rec(n-1,m+1); que será executado primeiramente o Rec(n-1,m) pra depois executar Rec(n-1,m+1) que está recursividade só irar ter final quando executar o if (n==m || n==0) retornando o valor 1.
    #include <stdio.h>
    #include <stdlib.h>
    
    int Rec(int n,int m){
        
        if (n==m || n==0){
           printf("\nEntrou no if: n = %d - m = %d\n", n, m);
           return 1;
        }else{
             printf("Entrou no else: n = %d - m = %d\n", n, m);
             return Rec(n-1,m) + Rec(n-1,m+1);
        }
    }
    
    int main(int argc, char *argv[]){
        int n = 5, m = 3;
        
        printf("%d",Rec(n, m));
        getch();
    
      system("PAUSE");    
      return 0;
    }

    o objetivo do programa e somar os if que são executados 10 vezes retornado uma soma no valor de 10.

  2. beleza RS25

    Você pode usar uma recursividade para fazer isto.

    Exemplo imprimir de 1 a 10 do maior pro menor.

    Código

    #include <stdio.h>
    #include <stdlib.h>
    
    void volta(int x);
    
    int main(int argc, char *argv[]){
        int x = 0;
       volta(x);
    
      system("PAUSE");    
      return 0;
    }
    
    void volta(int x){
         if (x==10) return;
         
         if (x < 10){
               x++;
               volta(x);
               }        
         printf("[%d]\n", x);        
    }

    ok!!!! B)

  3. O problema que ficou é na hora de calcular a área do círculo que é PI * raio², mas quando compilo utilizando PI, dá erro. =/

    Foi mau eu esqueci do PI la na função.

    Dois detalhes para rodar o programa

    1. o define é sem o ; no final

    #define PI 3.1415

    2. eu esqueci do PI

    acirc = PI * pow(c , 2);

    #include <stdio.h>
    #include <stdlib.h>
    
    #define PI 3.1415
    
    int main(int argc, char *argv[]){
        
        float a, b, c, acirc, aret, atri;
        
        printf("Digite numero 1: ");
        scanf("%f", &a);
        
        printf("Digite numero 2: ");
        scanf("%f", &b);
    
        printf("Digite numero 3: ");
        scanf("%f", &c);
    
        acirc =  PI * pow(c , 2);
        printf("A área do circulo é %.2f\n", acirc);
        //scanf("%f", a); // qual a necessidade deste scanf aqui
    
        aret = a * b;
        printf("A área do retangulo é %.2f\n", aret);
        //scanf("%f", &aret); // qual a necessidade deste scanf aqui
    
        atri = sqrt( ((a+b+c)/2) * (((a+b+c)/2) - a) * (((a+b+c)/2) - b ) * (((a+b+c)/2) - c));
        printf("A área do triangulo é %.2f\n", atri);
        //scanf("%.2f", &atri); // qual a necessidade deste scanf aqui
    
      system("PAUSE");    
      return 0;
    }

    Espero que agora resolva.

  4. Então, o uso da árvore é para o seguinte: Suponha que eu tenha uma tabela hash com alguns valores inseridos. O método que estou tentando implementar vai utilizar a árvore pra encontrar uma possível alocação pra um novo valor nessa tabela, de forma que a busca nessa tabela seja a mais eficiente possível. Ainda não consegui completar o raciocinio, e por conta disso n tenho mt coisa da arvore pronta. Eu fiz as funções para a árvore e, meu problema tá sendo no main. Pensei em usar um while(*p->numero != 0) para continuar completando a árvore até encontrar uma posição da tabela que esteja vaga, MAS eu não consigo pensar em como percorrer cada nó da árvore na ordem certa pra usar a função de inserir. Entendeu? As funções que fiz são essas:


    #include <stdio.h>
    #include <stdlib.h>

    typedef struct No{
    int numero;
    struct No *pEsquerda; //ponteiro apontando para o filho esquerdo
    struct No *pDireita; //ponteiro apontando para o filho direito
    struct No *p; //ponteiro para percorrer a arvore
    }No;

    void criarArvore(No **pRaiz){
    *pRaiz = NULL; //inicializa a arvore
    }

    void inserir (No **pRaiz)
    {
    if (*p->pEsquerda == NULL) // Se o lado esquerdo da árvore estiver vazio, inserir
    {
    *p->Esqueda = hash(i) + inc(i);
    }
    else {
    if (*p->pDireita == NULL) // Se o lado esquerdo estiver ocupado, adicionar no direito.
    {
    *p->pDireita = hash(i) + inc(tabela[i]);
    }
    }
    }
    [/codebox]

    Queria mesmo era uma idéia de como fzer... Realmente empaquei em como percorrer isso aí... Obrigado desde já!

    Tem uns 15 dias que eu tive que fazer um trabalho para faculdade sobre Arvore

    que pega alguns numero, faz o embaralhamento deste numero e ai insere na arvore assim que e inicializado o programa

    O codigo tem as seguintes funcoes

    printf("1 -> Inserir numero\n");//Insere novo numero

    printf("2 -> Imprime ordem crescente\n");

    printf("3 -> Imprime ordem decrescente\n");

    printf("4 -> Imprime maior numero\n");

    printf("5 -> Imprime menor numero\n");

    printf("6 -> Imprime nos folhas\n");

    printf("7 -> Imprime sub-arvore direita de um no\n");

    printf("8 -> Imprime sub-arvore esquerda de um no\n");

    printf("9 -> Imprime arvore\n");//imprime na tela no formato de arvore

    printf("0 -> Finalizar o programa\n\n");

    Codigo

    [code]#include <stdio.h> #include <stdlib.h> #define max 10 typedef long TipoChave; typedef struct Registro {   TipoChave Chave;   /* outros componentes */ } Registro; typedef struct No * Apontador; typedef struct No {   Registro Reg;   Apontador Esq, Dir; } No; typedef Apontador TipoDicionario; //chamadas de funcoes void Inicializa(Apontador *p); void Permut( TipoChave A[], int n); void Insere(Registro x, Apontador *p); void TestaI(No *p, int pai); void Testa(No *p); void Cabecalho(); void OrdemCrescente(No *p); void OrdemDecrescente(No *p); void ImprimeArvore(int camada, No *p); void MaiorNumero(No *p); void MenorNumero(No *p); void NoFolhas(No *p); void ProcuraNumeroDir(No *p, int numero); void ProcuraNumeroEsq(No *p, int numero); int MenuOpcao(int opcao); double rand0a1(); int main(int argc, char *argv[]){          int opcao,         //variavel para indicar as opcoes p/ usuario         i,             //contador         numero;        //recebe o numero que o usuario quer inserir na arvore     No *Dicionario;     Registro x;     TipoChave vetor[max];          //inicializa o dicionario com NULL     Inicializa(&Dicionario);          //cria um vetor ordenado     for (i = 0; i < max; i++)     vetor[i] = i+1;          //embaralha os numeros no vetor     Permut(vetor,max-1);          //insere cada chave na arvore e testa sua integridade apos cada insercao     for (i = 0; i < max; i++){         x.Chave = vetor[i];         Insere(x, &Dicionario);         Testa(Dicionario);     }          while(opcao!=0){ // enquanto o usuario não digitar 0 o programa não ira finalizar              //funcao onde mostra o Menu de opcoes para usuario         opcao = MenuOpcao(opcao);                  //imprime na tela a funcao que o usuario selecionou         switch(opcao){                       case 1 : { //CASE 1 = Insere um numero na arvore                            Cabecalho();                            printf("Opcao [1] - Insere numero na arvore\n\n");                                                       printf("Digite -1 para sair\n\n");                            do{                               printf("Inserir o numero: ");                               scanf("%d", &numero);                                                              if(numero!=-1){                                         x.Chave = numero;                                         Insere(x, &Dicionario);                                                           }                             }while (numero!=-1);                                                       break;                       }                       case 2 : {//CASE 2 = Imprime na tela a ordem crescente da arvore                            Cabecalho();                            printf("Opcao [2] - Imprime em ordem crescente\n\n");                                                       OrdemCrescente(Dicionario);                            break;                       }                       case 3 : {//CASE 3 = Imprime na tela a ordem decrescente da arvore                            Cabecalho();                            printf("Opcao [3] - Imprime em ordem decrescente\n\n");                                                       OrdemDecrescente(Dicionario);                            break;                       }                       case 4 : {//CASE 4 = Imprime o maior numero na tela                            Cabecalho();                            printf("Opcao [4] - Imprime do maior numero da arvore\n\n");                                                       MaiorNumero(Dicionario);                                                       break;                       }                       case 5 : {//CASE 5 = Imprime o menor numero na tela                            Cabecalho();                            printf("Opcao [5] - Imprime do maior numero da arvore\n\n");                                                       MenorNumero(Dicionario);                                                       break;                       }                       case 6 : {//CASE 6 = Imprime na tela os nos folhas                            Cabecalho();                            printf("Opcao [6] - Imprime do nos folhas\n\n");                                                       NoFolhas(Dicionario);                                                       break;                       }                       case 7 : {//CASE 7 = Imprime na tela os numero a direita do numero informado pelo usuario                            Cabecalho();                            printf("Opcao [7] - Imprime sub-arvore direita de um no\n\n");                                                       printf("\n\nDigite um numero: ");                            scanf("%d",&numero);                                                       ProcuraNumeroDir(Dicionario, numero);                                                       break;                       }                       case 8 : {//CASE 8 = Imprime na tela os numero a esquerda do numero informado pelo usuario                            Cabecalho();                            printf("Opcao [8]\n\n");                                                                                  printf("\n\nDigite um numero: ");                            scanf("%d",&numero);                                                       ProcuraNumeroEsq(Dicionario, numero);                                                       break;                       }                       case 9 : {//CASE 9 = Imprime na tela a arvore binaria                            Cabecalho();                            printf("Opcao [9] - Imprime a arvore binaria\n\n");                                                       ImprimeArvore(0, Dicionario);                                                       break;                       }                       case 0 : {//CASE 9 = Imprime na tela a arvore binaria                            exit (0);                            break;                       }                       default :                               Cabecalho();                               printf(">>> ERRO <<<\n");                               printf("\n\nOpcao invalida.\n\n");                                        }        printf("\nPresione ENTER para voltar ao MENU\n\n");        system("PAUSE");     }       } // funcoes // Inicializa a arvore void Inicializa(Apontador *p){     *p = NULL; } double rand0a1(){   double resultado = (double) rand()/ RAND_MAX; /* Dividir pelo maior inteiro */   if(resultado>1.0)     resultado = 1.0;     return resultado; } // faz o embaralhamento dos numeros void Permut( TipoChave A[], int n) {   int i,j;   TipoChave b;   for(i = n; i>0; i --){       j = (i * rand0a1());       b = A[i];       A[i] = A[j];       A[j] = b;     } } // insere na arove os dados informados void Insere(Registro x, Apontador *p){     if (*p == NULL){         *p = (Apontador)malloc(sizeof(No));         (*p)->Reg = x;         (*p)->Esq = NULL;         (*p)->Dir = NULL;         return;     }     if (x.Chave < (*p)->Reg.Chave){         Insere(x, &(*p)->Esq);         return;     }     if (x.Chave > (*p)->Reg.Chave)         Insere(x, &(*p)->Dir);         else             printf("Erro : Registro já existe na arvore\n"); } void TestaI(No *p, int pai){     if (p == NULL)     return;     if (p->Esq != NULL){         if (p->Reg.Chave < p->Esq->Reg.Chave){             printf("Erro: Pai %ld menor que filho a esquerda %ld\n", p->Reg.Chave, p->Esq->Reg.Chave);             exit(1);         }     }     if (p->Dir != NULL){         if (p->Reg.Chave > p->Dir->Reg.Chave){             printf("Erro: Pai %ld maior que filho a direita %ld\n",  p->Reg.Chave, p->Dir->Reg.Chave);             exit(1);         }     }     TestaI(p->Esq, p->Reg.Chave);     TestaI(p->Dir, p->Reg.Chave); } void Testa(No *p){     if (p != NULL)         TestaI(p, p->Reg.Chave); } //-------------- Cabecalho ------------------------------------------- void Cabecalho(){      system("cls");           printf("#################################################\n");      printf("#\t\t   AEDIII\t\t\t#\n");      printf("#-----------------------------------------------#\n");      printf("#\t\tArvore Binaria\t\t\t#\n");      printf("#################################################\n\n"); } //-------------- Menu de opcao ------------------------------------------- int MenuOpcao(int opcao){            Cabecalho();     printf(">> Menu - Escolha umas das opcoes abaixo\n\n");          printf("1 -> Inserir numero\n");     printf("2 -> Imprime ordem crescente\n");     printf("3 -> Imprime ordem decrescente\n");     printf("4 -> Imprime maior numero\n");     printf("5 -> Imprime menor numero\n");     printf("6 -> Imprime nos folhas\n");     printf("7 -> Imprime sub-arvore direita de um no\n");     printf("8 -> Imprime sub-arvore esquerda de um no\n");     printf("9 -> Imprime arvore\n");     printf("0 -> Finalizar o programa\n\n");                  printf("Digite uma opcao: ");     scanf("%d", &opcao);          return opcao;   } //-------------- Imprime a ordem crescente da arvore ------------------- void OrdemCrescente(No *p){     if (p == NULL)         return;          OrdemCrescente(p->Esq);     printf("> %d\n", p->Reg.Chave);     OrdemCrescente(p->Dir);      } //-------------- Imprime a ordem decrescente da arvore ------------------- void OrdemDecrescente(No *p){     if (p == NULL)         return;          OrdemDecrescente(p->Dir);     printf("> %d\n", p->Reg.Chave);     OrdemDecrescente(p->Esq);      } //--------------Imprime a arvore na tela --------------------------------- void ImprimeArvore(int camada, No *p){      int i;           if(p == NULL)         return;               ImprimeArvore(camada+1, p->Dir);           for(i=0;i<camada;i++)         printf("      ");               printf("%d\n",p->Reg.Chave);      ImprimeArvore(camada+1, p->Esq); } //--------------Procura o maior numero da arvore-------------------------- void MaiorNumero(No *p){     if((p->Dir != NULL) && (p->Dir->Reg.Chave > p->Reg.Chave))         MaiorNumero(p->Dir);         else             printf("Maior numero encontrado foi: %d\n\n", p->Reg.Chave); } //--------------Procura o menor numero da arvore-------------------------- void MenorNumero(No* p){     if((p->Esq != NULL) && (p->Esq->Reg.Chave < p->Reg.Chave))          MenorNumero(p->Esq);          else              printf("Menor numero encontrado foi: %d\n\n", p->Reg.Chave); } //-----------------Procura os nos folhas da arvore------------------------ void NoFolhas(No *p){    if(p == NULL)         return;             NoFolhas(p->Dir);       if(p->Esq == NULL && p->Dir == NULL)         printf("%d\n",p->Reg.Chave);             NoFolhas(p->Esq);    } //--------------Procura os nos a Direita de numero selecionado------------ void ProcuraNumeroDir(No *p, int numero){    if (p == NULL)        return;           if (numero == p->Reg.Chave)        OrdemCrescente(p->Dir);    if (numero < p->Reg.Chave)        return ProcuraNumeroDir(p->Esq, numero);        else            return ProcuraNumeroDir(p->Dir, numero);                            } //--------------Procura os nos a Esquerda de numero selecionado------------ void ProcuraNumeroEsq(No *p, int numero){    if (p == NULL)        return;           if (numero == p->Reg.Chave)        OrdemDecrescente(p->Esq);    if (numero < p->Reg.Chave)        return ProcuraNumeroEsq(p->Esq, numero);        else            return ProcuraNumeroEsq(p->Dir, numero);                            }[/code]

    Espero que ajude!!

    Também fiz um sobre tabela HASH semana passada se quiser eu posto ele aqui!!!

  5. Saudações,

    É possível fazer assim:

    printf("cora%c%co",135,134);
    Poderia postar um exemplo de como fez? :blink: Abraços, William Rodrigues.
    tenta assim:
    #include<stdio.h>
    #include<math.h>
    
    int main(int argc, char *argv[]){
        
        char c = 135;
        char a = 131;
        
        printf("Cora\%c\%co", c,a);
        
      system("Pause");
      return 0;
    }
    a letra ã eu não achei o codigo ASCII pra imprimir na tela mais os demais você encontra com este codigo aqui mostras todo os códigos ASCII em C.
    #include <stdio.h>
    #include <stdlib.h>
    int main() {
      int c = 0;
      do 
         printf("[%d] %c\n", c, c);
      while (++c <= 255);
      system("Pause");
    }

    na verdade toda letra ou simbolo e um codigo que e lido pelo compilador.

    ver em outras linguagens

    http://pt.wikipedia.org/wiki/ASCII

  6. Boa noite a todos.

    Tenho um trabalho simples pra fazer, redigi o código e tentei compilá-lo.

    Ele dá erro no "pi"que usei e quando eu o tiro ele compila, mas executa só o primeiro PRINTF.

    Alguém pode me ajudar ?

    Agradeço desde já.

    O código é esse:

    #include<stdio.h>

    #include<math.h>

    main (void) {

    #define pi = 3,1415;

    float a, b, c, atri, acirc, aret;

    printf("Digite um numero", a);

    scanf("%.2f", &a);

    printf("Digite um numero", b );

    scanf("%.2f", &b);

    printf("Digite um numero", c);

    scanf("%.2f", &c);

    acirc = pi * (c ^ 2);

    printf("A área do circulo é %.2f\n", acirc);

    scanf("%.2f", â);

    aret = a * b;

    printf("A área do retangulo é %.2f\n", aret);

    scanf("%.2f", &aret);

    atri = sqrt( ((a+b+c)/2) * (((a+b+c)/2) - a) * (((a+b+c)/2) - b ) * (((a+b+c)/2) - c));

    printf("A área do triangulo é %.2f\n", atri);

    scanf("%.2f", &atri);

    return 0;

    }

    Rodrigo Silva

    Graduando

    Computação - Universidade de Brasília

    :wacko:

    #include<stdio.h>
    #include<math.h>
    main (void) {
         #define pi = 3,1415;  // na se usa = no define
         float a, b, c, atri, acirc, aret;
              printf("Digite um numero", a);
              scanf("%.2f", &a); // não precisa de colocar .2f usa se .2 somente quando for imprimi o resultado
              
              printf("Digite um numero", b );
              scanf("%.2f", &b);
              
              printf("Digite um numero", c);
              scanf("%.2f", &c);
              
              acirc = pi * (c ^ 2); // para calcular potência usa se pow(valor , expoente)
              printf("A área do circulo é %.2f\n", acirc);
              scanf("%.2f", â);  // não usa acento em código fonte
              
              aret = a * b;
              printf("A área do retangulo é %.2f\n", aret);
              scanf("%.2f", &aret);
              
              atri = sqrt( ((a+b+c)/2) * (((a+b+c)/2) - a) * (((a+b+c)/2) - b ) * (((a+b+c)/2) - c));
              printf("A área do triangulo é %.2f\n", atri);
              scanf("%.2f", &atri);
              
              return 0;
              
              }
    Código
    #include <stdio.h>
    #include <stdlib.h>
    
    #define PI 3.1415;
    
    int main(int argc, char *argv[]){
        
        float a, b, c, acirc, aret, atri;
        
        printf("Digite numero 1: ");
        scanf("%f", &a);
        
        printf("Digite numero 2: ");
        scanf("%f", &b);
    
        printf("Digite numero 3: ");
        scanf("%f", &c);
    
        acirc =  pow(c , 2);
        printf("A área do circulo é %.2f\n", acirc);
        //scanf("%f", a); // qual a necessidade deste scanf aqui
    
        aret = a * b;
        printf("A área do retangulo é %.2f\n", aret);
        //scanf("%f", &aret); // qual a necessidade deste scanf aqui
    
        atri = sqrt( ((a+b+c)/2) * (((a+b+c)/2) - a) * (((a+b+c)/2) - b ) * (((a+b+c)/2) - c));
        printf("A área do triangulo é %.2f\n", atri);
        //scanf("%.2f", &atri); // qual a necessidade deste scanf aqui
    
      system("PAUSE");    
      return 0;
    }

  7. Saudações,

    Será necessário fazer uso da Biblioteca "locale":

    #include <stdio.h>
    #include <locale.h>
    
    int main() {
      setlocale(LC_ALL,"");
      printf("o que tenho que colocar para imprimir È");
      return 0;
    }

    Abraços,

    William Rodrigues.

    Não consegui

    Quando executo o programa aparece

    Resultado:

    o que tenho que colocar para imprimir ╚

    Eu queria que ficasse

    o que tenho que colocar para imprimir È

    como eu troco este simbolo ╚ pela a letra e com acento "È"

  8. Queria alterar a matriz puzzle[4][4] para matriz puzzle[n][n] para que o usuario informe o tamanho da matriz mas quando coloco n no lugar do 4 os resultado da erro.

    o arquivo txt tem o seguintes dados

    9 15 5 0

    4 6 1 3

    14 2 7 10

    8 12 13 11

    #include <stdio.h>

    #include <stdlib.h>

    void imprime(int n, int puzzle[n][n]){

    int i, j;

    printf(" -------------------\n");

    for (i=0; i<n; i++){

    printf ("| ");

    for (j=0; j<n; j++){

    if (puzzle[j]<10)

    printf (" %d | ", puzzle[j]);

    else

    printf ("%d | ", puzzle[j]);

    }

    printf("\n");

    }

    printf(" -------------------\n");

    }

    int main(int argc, char *argv[])

    {

    int n,

    i,

    j,

    valor,

    puzzle[4][4]; // queria altera para puzzle[n][n]

    printf("Resolvendo o PUZZLE");

    printf("\n\n");

    printf("Informe tamanho do Puzzle NxN - N: ");

    scanf ("%d", &n);

    printf("\n");

    FILE *arq = fopen("puzzle.txt", "r");

    if (arq == NULL){

    printf("Desculpe, o arquivo não pode ser aberto");

    exit(1);

    }

    for (i=0 ; i<n; i++){

    for (j=0 ; j<n; j++){

    fscanf (arq, "%d", &valor);

    puzzle[j] = valor;

    }

    }

    fclose(arq);

    imprime(n, puzzle);

    system("PAUSE");

    return 0;

    }

×
×
  • Criar Novo...