• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

eliminar um livro

4 mensagens neste tópico

:wallbash:viva!

:wallbash:tou aqui com uma duvida que sinceramente nao consigo entender o racicionio logico

tenho um array de estruturas, mais nomeadamente de livros, que tem uma variavel que é a sua cota.

Quero eliminar um livro atraves da sua cota, o codigo dado é este e funciona , mas nao percebo a condição b[ i].cota!=cota.

então a cota que o utilizador coloca tem de ser diferente das que estão no array de estruturas?? nao poderia ser assim

if(b[ i].cota==cota) ?? sinceramente nao percebo. Existe outro metodo de entendimento melhor?? :-[

codigo:


int elimina(livro *b, int total)
{
int cota, i;
printf("Cota do livro a eliminar: ");
scanf("%d", &cota);
for(i=0; i<total && b[i].cota != cota; i++)
;
if(i==total)
{
printf("Livro inexistente\n");
return total;
}e
lse
{
b[i] = b[total-1];
return total-1;
}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:wallbash: tentei fazer por outro metodo e se coloco a idade da 2 posicao , por exemplo 888, ja me da erro pq??



#include<stdio.h>

struct susana {
          int idade;
          int peso;
          };
          
int eliminar (struct susana *ptr, int total){
           int i,idade;
           printf(" introduza a idade \n");
           scanf("%d",&idade);
           
           for(i=0;i<total;i++){
              if(ptr[i].idade==idade){
                     ptr[i]=ptr[total-1];
                     return total-1;
               }else{
                    
                     printf("livro inexistente\n");
                     return total;
                     }

                  }
            }     
main()
{    
     int x,idade;
    
     struct susana vet[4]={{45,13},{888,45}};
     
     x=eliminar(vet,2);
     printf(" %d",x);
     fflush(stdin);
     getchar();    
}       



0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

for(i=0; i<total && b[i].cota != cota; i++)
;

Basicamente o que isto faz é percorrer o array enquanto a cota fôr diferente da cota do livro a eliminar, assim que a cota fôr igual ele sai do for , logo a variavel i fica com o indice onde se encontra o livro a eliminar. Espero que tenha sido explicito... Se não percebeste pergunta que tento explicar de outra maneira .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:wallbash: tentei fazer por outro metodo e se coloco a idade da 2 posicao , por exemplo 888, ja me da erro pq??

Tens mesmo que começar a fazer debug, estas dúvidas desapareciam num instante!

Não percebi que erro te deu. Aqui funcionou tudo bem. Se ao dizeres "erro" queres dizer que não encontrou ninguém com idade 888, a resposta é que só está a ser executada uma iteração do for.

Se procurares por 45 vais ver que dá bem. Se procurares por qualquer outro valor, incluindo 888, o for corre a 1ª vez, chega ao if, vê que é diferente, entra no else e retorna.

A ideia não está mal, mas tens que retirar as instruções que estão dentro do bloco else e colocá-las após o for.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora