Grupos20081canc
Table of Contents

Grupo JuntasVenceremos

  • Eliziane
  • Paulinha
  • Juciane
  • Vitoria

Questões

1) O que é uma função recursiva?

Resposta
É uma função que se refere a si própria. A idéia consiste em utilizar a própria função que estamos a definir na sua definição..

2) Implemente um algoritmo que utilize uma função recursiva.

Resposta

-#include<stdio.h>
Int fatorial(int f){
       If(f==1||f==0)
     Return 1;
Else
Return f*factorial(f-1);
}
Int main(){
Int y=fatorial(6);
Printf(“%i”,y);
}

3) Mostre a pilha de execução na memória do algoritmo implementado na questão anterior.

Resposta
respostaJuntasV1.GIF

4) Qual a vantagem e desvantagem da função recursiva?

Resposta
Sua desvantagem é que consume muita memória e a sua vantagem é que o código fica mais organizado.

5) Defina busca sequêncial e busca binária?

Resposta
Binária - È um algoritmo de busca em vetores. Ela parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões no espaço de busca e compara o elemento procurado com o elemento do meio do vetor. Sequêncial- Determina um dado número procurando o número em sequência até encontrar ou não.

6) Qual a busca melhor de ser utilizada?justifique - a.

Resposta
A binária, pois ela divide o vetor na metade e testa se o número procurado é maior ou menor que o número central da metade.

7) Em que caso não se pode usar os algoritmos de buscas?

Resposta
Quando o algoritmo estiver desordenado.

8) Implemente um algoritmo que realize uma busca sequencial.

Resposta

int buscaSequencial (int x, int n, int v[]) {
int m = 0;
while (m < n && v[m] < x) ++m;
if (m < n && v[m] == x) 
return m;
return -1;
}
int main (){
int t,valor,v[4]={2,3,4,5,6,7,8,9,10};
printf("digite o valor\n");
scanf("%i",&valor);
t=buscaSequencial (valor,8,v);
if(t==0)
printf("existe elemento no vetor\n");
else
printf("não existe elemento no vetor\n");
}

9) O que é ponteiro?

Resposta
Ponteiro é uma variável que armazena uma posição de memória na memória.

10) Defina o que significa os seguintes itens :

a) f.
b) *f.
c) &f.
Resposta
a) f=valor
b) *f=valor da posição apontada
c) &f=posição da memória

11) Cite a diferença: malloc(4) para malloc (sizeof(int)).

Resposta
Quando usado o malloc (4)- o programador é quem define o espaço que vai ser reservado na memória e, quando usado malloc (sizeof(int)) o compilador é quem vai identificar através do tipo da variável o espaço que o usuário deseja reservar na memória.

12) Dado o algoritmo execute-o na memória.

#include<stdio.h>
int main (){
int *x= malloc(sizeof(int)*4);
*x=5;
*(x+1)=10;
printf("%i\n",*x);
printf("%i\n",*(x+1));
free(x);
}

Resposta
respostaJuntasV2.GIF
Vai imprimir 5,10.

Grupo Os4tro

  • Tafarel
  • Erickson
  • Rodrigo
  • Elias

Questões

1) Explique o código abaixo na memória e dê a resposta:

#include <stdio.h>
int fatorial (int f);
int metodoB (int a);
 
int main ( ) {
printf(olá mundo!”\n);
int fatorial = fatorial (4)
printf(“%i”, x \n);
}
 
int fatorial ( int f) {
if(f==1   ||   f==0)
return 1;
else
return f * fatorial(f - 1);
}
 
int metodoB (int a)  {
return a1;
}

Resposta
resposta4tro1.GIF

2) Qual a busca mais eficiente? Seqüencial ou Binária? E Porque?

Resposta
A busca binária é mais eficiente, porque se tivermos uma seqüência grande de números a busca binária executará menos passos para encontrar o número pedido. Isso acontece porque a busca binária divide a seqüência pela metade, e vai fazendo os mesmos passos até encontrar o número.

3) Explique o código abaixo passo a passo e diga qual número será impresso na tela.

#include <stdio.h>
int main ( ) {
int i;
i = 0;
printf(End. I: %p\n”, &i);
int*x = &i;
printf(Valor de x: %p\n”, x);
printf(Valor de i: %i\n”, i);
i = 20;
printf(Valor de i: %i\n”, i);
*x = 17
printf(Valor de i: %i\n”, i);
}

Resposta
Primeiro uma posição de memória é alocada para um número inteiro i e lhe é atribuído o valor 0, depois ele imprime o valor da posição de memória de i. Depois é alocada uma posição de memória para um ponteiro pra inteiro x apontando para i. Logo após, ele imprime o valor da posição de memória de i, e depois imprime o valor de i, que ainda é 0. Depois i recebe o valor 20 e esse número é impresso. Por último a posição de memória apontada por x (no caso i) recebe o valor 17, número esse que será impresso na tela.

Grupo StackOverFlow

  • Hallison
  • Jorge
  • Mônica

Questões

1) Analise o algoritmo e responda:

#include <stdio.h>        
int caso1(int x, int y);        
int caso2(int x, int y);                           
int caso3(int x, int y);
int caso4(int x, int y);
int cont=0;
int main(){
  int x,y;
  printf("digite o valor de x\n");
  scanf("%i",&x);
  printf("digite o valor de y\n");
  scanf("%i",&y);
  caso4(x,y);
  system("pause");
}
int caso1(int x, int y){
     x=x*3;
     y=x*2+10;
     cont++;
     caso3(x,y);
     }    int caso2(int x, int y){
     x=x/2;
     y=x+20;
     caso1(x,y);
}
int caso3(int x, int y){
     int resul;
    resul=x+y;
     if (cont<3)
        caso4(x,y);
     else
        printf("x=%i y=%i\n",x,y); //imprime os valores finais de x e y        
}.
int caso4(int x, int y){
     x+=2;
     caso2(x,y);
}

a) Dado o algoritmo é certo afirmar que todas as Funções (caso1,caso2,caso3,caso4)
são recursivas?Justifique sua resposta.
b)Se for declarado x sendo 5 e y sendo 9, que valores será impresso no final da execução do programa?
Respostas:
a)Sim, pois ao analisar o algoritmo onde a função principal “int main()” chama a função “caso4”,vimos que esta função chama a “caso2” que por sua vez chama o “caso1”,que chama o “caso3” que retoma através da condição “cont<3” a função “caso4”.
b)Sendo x=5 e y=9, os valores impressos no final do programa será: x=24 y=58

2) Analise o vetor dado e as posições ocupadas:

23 45 56 78 98 67 78 89 66 77 45 56
n 0 1 2 3 4 5 6 7 8 9 10 11

obs: n é o numero das posições.
a) Em que posições você usaria a busca binária e a busca seqüencial?
b) Qual é o melhor e o pior caso para se usar a busca seqüencial?
Respostas:
a) Busca seqüencial na posição 'n0' e 'n1',
Busca binária no restante das posições.
b) Quando houve uma única comparação, isso quer dizer encontra a primeira posição esse é o melhor caso.
O pior caso é encontrar a n-ésima posição, porque ira comparar n vezes, tornado o processo mais lento.

3) Discorra sobre a funcionalidade do algoritmo a seguir:

#include <stdio.h>
void fuc()
{
    int vetor[] = { 10, 20, 30, 40, 50 };
    int *p1;
    p1 = &vetor[3];
    printf("%d\n", *p1);
    p1++;
    printf("%d\n", *p1);
    p1=p1-4;
    printf("%d\n", *p1);
}    int main(){
    fuc();
}

Resposta:
Ele declarou um vetor com cinco componentes,onde um ponteiro recebe a posição da memória do vetor[3], e será impresso o valor da posição apontada, o valor da posição apontada quando o ponteiro incrementa e o valor da posição apontada quando o ponteiro decrementa 4 posições.

4) Elaborar uma questão que peça 5 valores maior que zero e menor que trinta mostre seu fatorial armazene em ponteiros em seguida organize-os e faça uma busca para vê se há ou não o elemento no vetor.

Resposta:

# include <stdio.h>
 int fatorial (int num);
 void ordenar_vetor(int v[],  int tamanho);
int main(){
 
     int numero,i,a[5],*x[5],aux,c=0,valor,g;
     printf("\n só use números maior que zero. e menor que 30\n");
     for(i=0;i<5;i++){
        printf("\nEntre com um %i/5 numero.\n",i+1);
        scanf("%i", &numero);
        if(numero<0 || numero > 30)
        return main();
        printf("Fatorial de ---> [%i] vale ----> [%i].\n", numero, fatorial(numero));
        c++;
        a[i]=fatorial(numero);
        x[i]=&a[i];
     }
     for(i=0;i<5;i++){
        if(i==0)
         printf("\n\n\nvetor desorganizado %i",*x[i]);
         else
         printf(", %i",*x[i]);      
    }
    printf("\n\n\n");
    ordenar_vetor(*x,4);
    for(i=0;i<5;i++){
         if(i==0)
         printf("vetor organizado %i ",*x[i]);
         else
         printf(", %i",*x[i]);      
    }
    printf("\n\nqual o valor deseja procurar\n");
    scanf("%i",&valor);
    g=busca(a,0,4,valor);
    if(g != -1){
    printf("o valor esta na posição %i do vetor\n",g);
       for(i=0;i<5;i++){
           if(i==0)
           printf("%i",*x[i]);
           else
           printf(", %i",*x[i]);      
       }    } else
    printf("o valor ñ existe no vetor\n");
 
}
int fatorial (int num){
   int fato,i;
   if (num == 1)
      return (1);
    else
        fato = num * fatorial(num-1);
    return fato;
}
void ordenar_vetor(int v[],  int tamanho)
{
     int i, j, temp;
 
     for(i = 0; i < tamanho+1 - 1; i++){
         for(j = 0; j < tamanho+1 - 1; j++){
             if(v[j] > v[j + 1]){
                 temp = v[j];
                 v[j] = v[j + 1];
                 v[j + 1] = temp;
             }
         }
     }
 }
int busca(int vet[], int i, int f, int v) {
  int k;
 
  if (i > f)
    return -1;
  else {
    k = (i+f)/2;
    if (vet[k] == v)
      return k;
    else
      if (vet[k] < v)
    return busca(vet,k+1, f, v);
      else
    return busca(vet,i,k-1 , v);
  }
}

Grupo Os4Elementos

  • Danilo
  • Felipe
  • Ewerton
  • Sâmua

Questões

1) Existem operadores especiais para se trabalhar com ponteiros. Defina-os e exemplifique esboçando em uma memória.

Resposta
* - conteúdo do endereço apontado por
& - endereço de memória

int i;
printf(“%i”,i);
i = 10;
float x = 1.5;
char c =’z’;
int *j;  
j = &i;

resposta4elementos1.GIF

2) Sobre ponteiros, marque V para verdadeiro e F para falso e se falso, corrija a afirmativa para que se torne verdadeira.

(F) As variáveis do tipo ponteiro permitem a modificação de argumentos de funções: permitem que uma função altere apenas valores de variáveis globais e locais a ela através da referência ao endereço de memória da variável passada como parâmetro para a função.
As variáveis do tipo ponteiro permitem a modificação de argumentos de funções: permitem que uma função altere valores de variáveis não globais e não locais a ela através da referência ao endereço de memória da variável passada como parâmetro para a função.
(V) A utilização de variáveis do tipo ponteiro permite o aumento de eficiência em determinadas rotinas.
(V) Quando * é usado na declaração de uma variável ponteiro ele simplesmente indica que a variável é do tipo ponteiro de um tipo.
(F) O significado de * descrito na afirmação acima serve para declaração de ponteiros
O significado de * descrito na afirmação acima não serve para declaração de ponteiros.

3) Tomando-se por base o algoritmo a seguir, que utiliza ponteiros, esboce a sua execução na memória representada abaixo:

#include<stdio.h>
void metodoA(int x){
     x = x + 10;
}
void metodoB(int *x){
     *x = *x + 10;
}
int main () {
    int i;
    int v[] = {1,2,3,5,7,9,0,4,3};
    int x = 10;
    printf("Endereço x : %p\n",&x);
    int *y;
    printf("Endereço y : %p\n",&y);
    int *z;
    printf("Endereço z : %p\n",&z);
    for(i=0;i<10;i++){
                      printf("Endereço v[%i]: %p\n",i,&v[i]);
    }
    metodoA(x);
    printf("metodoA %i\n",x);
    metodoB(&x);
    printf("metodoB %i\n",x);
    system ("pause");
}

resposta4elementos2.GIF

4) Mostre o que será impresso na tela após a execução desse algoritmo:

#include <stdio.h> 
int main () { 
       int i; 
       i = 0; 
       printf("End. i: %p\n",&i); 
       int *x = &i; 
       printf("Valor de x: %p\n",x); 
       printf("Valor de i: %i\n",i); 
       *x = 17; 
       printf("Valor de i: %i\n",i); 
       i = 20; 
       printf("Valor de i: %i\n",i); 
}

Resposta:
End. I: 0022ff74 (posição de memória)
Valor de x:0022ff74 (posição de memória apontada por x)
Valor de i:0
Valor de i:17
Valor de i:20

5) Qual a principal vantagem de se utilizar funções recursivas?

Resposta:
Os códigos ficam mais compactos e provavelmente mais fáceis de serem lidos.

6) Diga se o algoritmo abaixo possui função recursiva e explique o porque da função ser uma função de recursão.

#include <stdio.h>
unsigned int fat (unsigned int num){
    unsigned int fato;
    if (num == 1)
       return (1);
    else
        fato = num * fat (num-1);
    return fato;
}
Int  main(){
     unsigned int numero;
     printf("\nEntre com um numero positivo.");
       scanf("%u", &numero);
     printf("O fatorial de %u vale %u.", numero, fat(numero));
     getch();
}

Resposta:
O algoritmo acima possui função recursiva.
Na linha dois é declarada a função fat, na linha sete, que está ainda dentro do escorpo da função fat, há um chamado para ela mesma.

7) Defina uma Função Recursiva, em seguida, implemente um algoritmo que a utilize.

Resposta:
Uma função recursiva é uma função que se refere a si própria, e consiste em utilizar a própria função que estamos a definir em sua definição.

#include <stdio.h>
int fatorial( int n ){
    int i,p;
    p = 1;
    for( i=2; i<=n; i++ )
    p = p * i;
        return p;
}
int main() {
    int numero;
    printf("Digite um numero e saiba seu fatorial:\n");
    scanf("%i",&numero);
    printf("O fatorial de %i eh %i",numero,fatorial(numero));
}

8) Defina busca seqüencial.

Resposta
Consiste em varrer uma tabela a procura de um determinado elemento, verificando ao final se o mesmo foi ou não encontrado

9) Defina busca binária.

Resposta
A chave é comparada com o elemento no meio da tabela. Se for igual, a busca terminou. Caso contrário, ela deve continuar na metade inferior, se a chave for menor que o elemento do meio, ou na metade superior da tabela, se a chave for maior que o elemento do meio.

10) Dentre os que se segurem, qual o algoritmo de busca mais eficiente: Sequencial ou Binária? Justifique sua resposta descrevendo o funcionamento de cada um deles.

Resposta
Desde que o vetor onde pretende-se utilizar o algoritmo de busca esteja ordenado, é mais eficiente utilizar um algoritmo de busca binária.
A busca binária realiza sucessivas divisões no espaço de busca, comparando o elemento buscado com o do meio do vetor. Caso o elemento buscado coincidir com o elemento do meio do vetor, a busca está concluída. Senão, se o elemento buscado for menor que o elemento do meio, a busca continua seguindo-se os mesmos padrões: a busca segue-se executando apenas no lado esquerdo do vetor, descartando-se o direito. Se o elemento buscado for maior que o elemento do meio, a busca segue-se executando no lado direito do vetor, descartando-se o lado esquerdo. Isso garante que o tempo de busca seja bastante reduzido, justificando-se então sua escolha.
A busca sequencial, por sua vez, compara o elemento buscado com todos os demais elementos do vetor. Desse modo, perde-se muito tempo em sua execução. Assim como o algoritmo de busca binária, a busca sequencial também só funciona em vetores ordenados.

11) Sabendo que algoritmo de busca é um algoritmo que toma um problema como entrada e retorna a solução para o problema, e que se classifica em busca seqüencial e busca binária. Informe qual dessas buscas possui melhor otimização.

Resposta
A busca seqüencial, é feita seqüencialmente, comparando cada chave dada. Já na busca binária a chave é comparada com o elemento no meio da tabela. Se for igual, a busca terminou. Caso contrário, ele deve continuar ou na metade inferior (se a chave for menor que o elemento do meio) ou na metade superior da tabela ( se a chave for maior que o elemento do meio).
Dado estas definições tem-se que busca binária possui melhor otimização, já que encontra o elemento em menor intervalo de tempo.

12) Defina função recursiva e responda qual das funções a seguir é recursiva?

//Função 1
#include <stdio.h>
int fatorial( int n ){
    int i,p;
    p = 1;
    for( i=2; i<=n; i++ )
    p = p * i;
        return p;
}
int main() {
    int numero;
    printf("Digite um numero e saiba seu fatorial:\n");
    scanf("%i",&numero);
    printf("O fatorial de %i eh %i",numero,fatorial(numero));
}
//Função 2:
#include <stdio.h>
int fatorial(int n){
    int resposta;
    if(n==1 || n==0){
        return 1;
    }else{
        resposta=n*fatorial(n-1);
        return resposta;
    }
}
int main(){
int numero;
printf("Digite um valor e saiba o seu fatorial:\n");
scanf("%i",&numero);
printf("O fatorial de %i eh %i\n",numero,fatorial(numero));
}

Resposta
Uma função recursiva é uma função que se refere a si própria, e consiste em utilizar a própria função que estamos a definir em sua definição. A Função 2 é recursiva, pois em seu escopo, chama-se a si mesma, na linha sete.

Add a New Comment
or Sign in as Wikidot user
(will not be published)
- +
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.