Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
marqueslucas

Calculo de Sub Rede

Recommended Posts

Bem tenho um programa da faculdade para fazer so que não tenho a minima ideia de como realizar o calculo e o programa tem que fazer o seguinte:

Compilador que eu utilizo e o Dev-C++

"Desenvolver um programa que seja capaz de fornecer a faixa de IPs utilizáveis para cada uma das VLANs criadas na infra-estrutura do projeto.

O usuário deve entrar com endereço de rede o programa deve informar o endereço de broadcast e faixa IP utilizável.

Cada octeto deve ser armazenado em uma variável separada"

já cheguei neste resultado

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

typedef struct subrede{
int oct1,oct2,oct3,oct4;
}Subrede;

int menu(int op);
int menu2(int op1);
void insere(Subrede x[],int t);
void calc(Subrede x[],int qtdSR, int qtdHT);
int qtdSR(int qtd);
int qtdHT(int qtd);

int main(){
system("color f0");
Subrede vet[1];
int op,op1;
int qtdeHT=-1, qtdeSR=-1;
do{
op=menu(op);
switch (op){
case 0:
printf("Obrigado por utilizar o programa!");
break;
case 1:
insere(vet,1);
break;
case 2:
do{
op1=menu2(op1);
switch (op1){
case 1:
qtdeSR=qtdSR(qtdeSR);
break;
case 2:
qtdeHT=qtdHT(qtdeHT);
calc(vet, qtdeSR, qtdeHT);
break;
}
}while(op1!=1 || op1!=2);
break;
case 3:

break;
}
}while(op!=0);
system("pause");
return 0;
}

int menu(int op){
do{
printf("Escolha uma opcao:\n\n");
printf("1 - Inserir\n");
printf("2 - Calcular\n");
printf("3 - Imprimir\n");
printf("0 - Sair\n\n");
printf("Opcao: ");
scanf("%d",&op);
}while(op<0 || op>3);
return op;
}

int menu2(int op1){
int sai=-1;
do{
printf("\n\nEscolha uma opcao:\n\n");
printf("1 - Informar quantidade de sub redes: \n");
printf("2 - Informar quantidade de host por sub rede: \n");
scanf("%d",&op1);
if(op1<1 || op1>2){
printf("Opcao Invalida!");
}else{
sai=1;
}
}while(sai!=1);
return op1;
}

void insere(Subrede x[],int t){
do{
printf("Informe o 1%c octeto: ",167);
scanf("%d",&x[t].oct1);
}while(x[t].oct1<=0 || x[t].oct1>255);
do{
printf("Informe o 2%c octeto: ",167);
scanf("%d",&x[t].oct2);
}while(x[t].oct1<=0 || x[t].oct1>255);
do{
printf("Informe o 3%c octeto: ",167);
scanf("%d",&x[t].oct3);
}while(x[t].oct1<=0 || x[t].oct1>255);
do{
printf("Informe o 4%c octeto: ",167);
scanf("%d",&x[t].oct4);
}while(x[t].oct1<=0 || x[t].oct1>255);
}

int qtdSR(int qtd){
printf("Informe a quantidade de sub redes deseja calcular: \n");
scanf("%d",&qtd);
return qtd;
}

int qtdHT(int qtd){
printf("Informe a quantidade de Hosts deseja ter em cada sub rede: \n");
scanf("%d",&qtd);
return qtd;
}

void calc(Subrede x[],int qtdSR, int qtdHT){
int mascara=0,cont=0,sai=8;
if(qtdSR!=-1){

}else{
if(qtdHT!=-1){
do{
if(mascara<=qtdHT){
cont=cont+1;
mascara=mascara*2;
printf("pow %d\n",mascara);
printf("Cont: %d\n\n",cont);
}
}while(mascara<qtdHT/* || cont<=7*/);
}
}
}

so que na função "calc" eu to com um problema nessa parte comentada quando a variável "cont" chega <=7 ele não para.

do{
if(mascara<=qtdHT){
cont=cont+1;
mascara=mascara*2;
printf("pow %d\n",mascara);
printf("Cont: %d\n\n",cont);
}
}while(mascara<qtdHT/* || cont<=7*/);

alguém tem solução para esse codigo ou tenho que começar desde o inicio :unsure:

por enquanto so tem a parte de preenchimento dos dados esta faltando a parte do calculo que eu não tenho a minima ideia de como fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Bem depois de um tempo pensando cheguei no seguinte codigo percebi esta maneira mais simples e resolvi entrega-la ao professor.

    /* AUTOR...: LUCAS DE OLIVEIRA MARQUES
    DATA....: 29/05/2012
    OBJETIVO: PROJETO INTEGRADOR


    Desenvolver um programa que seja capaz de fornecer a faixa de IPs utilizáveis para cada uma das VLANs criadas na infra-estrutura do projeto.
    O aluno deve entrar com endereço de rede e máscara de sub-rede e deve obter o endereço de broadcast e faixa IP utilizável.
    */


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


    typedef struct subrede{
    int oct1,oct2,oct3,oct4;
    int masc1,masc2,masc3,masc4;
    }SubRede;


    int menu(int opc);
    void preenche(SubRede x[], int t);
    void imprime(SubRede x[], int t);
    void calc(SubRede x[],int t);


    int main(){
    system("color f0");
    int op;
    SubRede vet[1];
    do{
    op=menu(op);
    switch (op){
    case 0:
    printf("Obrigado por utiliar o conversor!!\nVolte Sempre ;D\n\n\n\n");
    break;
    case 1:
    preenche(vet,1);
    system("cls");
    break;
    case 2:
    imprime(vet,1);
    getch();
    system("cls");
    break;
    case 3:
    calc(vet,1);
    getch();
    system("cls");
    break;
    }
    }while(op!=0);
    system("pause");
    return 0;
    }


    int menu(int opc){
    printf("\n/---------------------------------------/\n");
    printf("|\t\tMenu\t\t\t|\n");
    printf("|\t1 - Inserir IP e Mascara\t|\n");
    printf("|\t2 - Imprimir Dados Cadastrados\t|\n");
    printf("|\t3 - Calcular\t\t\t|\n");
    printf("|\t0 - Sair\t\t\t|");
    printf("\n/---------------------------------------/\n\nOpcao: ");
    scanf("%d",&opc);
    return opc;
    }


    void preenche(SubRede x[],int t){
    int sai=-1;
    printf("IP:\n");
    do{
    printf("\n1%c Octeto: ",167);
    scanf("%d",&x[0].oct1);
    if(x[0].oct1<=0 || x[0].oct1>=224 || x[0].oct1==127){
    printf("\nNo 1%c Octeto o valor nao pode ser menor que 1 ou maior que 224 e nem Igual a 127\n",167);
    }
    }while(x[0].oct1<=0 || x[0].oct1>=224 || x[0].oct1==127);
    do{
    printf("\n2%c Octeto: ",167);
    scanf("%d",&x[0].oct2);
    if(x[0].oct2<0 || x[0].oct2>255){
    printf("\nNo 2%c Octeto o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }while(x[0].oct2<0 || x[0].oct2>255);
    do{
    printf("\n3%c Octeto: ",167);
    scanf("%d",&x[0].oct3);
    if(x[0].oct3<0 || x[0].oct3>255){
    printf("\nNo 3%c Octeto o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }while(x[0].oct3<0 || x[0].oct3>255);
    do{
    printf("\n4%c Octeto: ",167);
    scanf("%d",&x[0].oct4);
    if(x[0].oct4<0 || x[0].oct4>255){
    printf("\nNo 4%c Octeto o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }while(x[0].oct4<0 || x[0].oct4>255);
    printf("\n/---------------------------------------/\n\n");
    printf("Mask:\n");
    if(x[0].oct1 <= 126){ //Classe A
    x[0].masc1=255;
    printf("Octeto 1 Mask: %d\n",x[0].masc1);
    do{
    sai=-1;
    printf("\n2%c Octeto: ",167);
    scanf("%d",&x[0].masc2);
    if(x[0].masc2!=255 && x[0].masc2%2!=0){
    sai=0;
    printf("Mascara Invalida!!\n");
    }else{
    if(x[0].masc2<0 || x[0].masc2>255){
    printf("\nNo 2%c Octeto da Mascara o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }
    }while(sai==0 || x[0].masc2<0 || x[0].masc2>255);
    if(x[0].masc2!=255){
    x[0].masc3=0;
    x[0].masc4=0;
    printf("3%c Octeto: %d\n",167,x[0].masc3);
    printf("4%c Octeto: %d\n",167,x[0].masc4);
    }else{
    do{
    sai=-1;
    printf("3%c Octeto: ",167);
    scanf("%d",&x[0].masc3);
    if(x[0].masc3!=255 && x[0].masc3%2!=0){
    sai=0;
    printf("Mascara Invalida!!\n");
    }else{
    if(x[0].masc3<0 || x[0].masc3>255){
    printf("\nNo 3%c Octeto da Mascara o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }
    }while(sai==0 || x[0].masc3<0 || x[0].masc3>255);
    if(x[0].masc3!=255){
    x[0].masc4=0;
    printf("4%c Octeto: %d\n",167,x[0].masc4);
    }else{
    do{
    sai=-1;
    printf("4%c Octeto: ",167);
    scanf("%d",&x[0].masc4);
    if(x[0].masc4!=255 && x[0].masc4%2!=0){
    sai=0;
    printf("Mascara Invalida!!\n");
    }else{
    if(x[0].masc4<0 || x[0].masc4>255){
    printf("No 3%c Octeto da Mascara o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }
    }while(sai==0 || x[0].masc4<0 || x[0].masc4>255);
    }
    }
    }else{
    if(x[0].oct1 <= 191){ //Classe B
    x[0].masc1=255;
    x[0].masc2=255;
    printf("Octeto 1 Mask: %d\n",x[0].masc1);
    printf("Octeto 2 Mask: %d\n",x[0].masc2);
    do{
    sai=-1;
    printf("\n3%c Octeto: ",167);
    scanf("%d",&x[0].masc3);
    if(x[0].masc3!=255 && x[0].masc3%2!=0){
    sai=0;
    printf("Mascara invalida!!\n");
    }else{
    if(x[0].masc3<0 || x[0].masc3>255){
    printf("\nNo 3%c Octeto da Mascara o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }
    }while(sai==0 || x[0].masc3<0 || x[0].masc3>255);
    if(x[0].masc3!=255){
    x[0].masc4=0;
    printf("4%c Mask: %d\n",167,x[0].masc4);
    }else{
    do{
    sai=-1;
    printf("\n4%c Octeto: ",167);
    scanf("%d",&x[0].masc4);
    if(x[0].masc4%2!=0){
    sai=0;
    printf("Ultimo octeto nao pode ser impar\n");
    }else{
    if(x[0].masc4<0 || x[0].masc4>255){
    printf("\nNo 4%c Octeto da Mascara o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }
    }while(sai==0 || x[0].masc4<0 || x[0].masc4>255);
    }
    }else{
    if(x[0].oct1 <= 223){ //Classe C
    x[0].masc1=255;
    x[0].masc2=255;
    x[0].masc3=255;
    printf("Octeto 1 Mask: %d\n",x[0].masc1);
    printf("Octeto 2 Mask: %d\n",x[0].masc2);
    printf("Octeto 3 Mask: %d\n",x[0].masc3);
    do{
    printf("\n4%c Octeto: ",167);
    scanf("%d",&x[0].masc4);
    if(x[0].masc4%2!=0){
    printf("Ultimo octeto nao pode ser impar\n");
    }else{
    if(x[0].masc4<0 || x[0].masc4>255){
    printf("\nNo 4%c Octeto da Mascara o valor nao pode ser menor que 0 ou maior que 255\n",167);
    }
    }
    }while(x[0].masc4%2!=0 || x[0].masc4<0 || x[0].masc4>255);
    }
    }
    }
    }


    void imprime(SubRede x[], int t){
    printf("Dados Cadastrados:\n");
    printf("IP: %d.%d.%d.%d\n\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("Mask: %d.%d.%d.%d\n\n",x[0].masc1,x[0].masc2,x[0].masc3,x[0].masc4);
    }


    void calc(SubRede x[],int t){
    int calculo, primeiro, ultimo;
    if(x[0].oct1<=126){ //Classe A
    if(x[0].masc2!=255){ //Calculo efetuado no 2° octeto
    printf("IP: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("MASK: %d.%d.%d.%d\n",x[0].masc1,x[0].masc2,x[0].masc3,x[0].masc4);
    calculo=255-x[0].masc2;
    primeiro=x[0].oct2+1;
    ultimo=x[0].oct2+calculo;
    printf("Rede: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("BroadCast: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2+calculo,255,255);
    printf("Faixa de IP Utilizavel:\n");
    printf("%d.%d.%d.%d - %d.%d.%d.%d\n",x[0].oct1,primeiro,x[0].oct3,1,x[0].oct1,ultimo,255,254);
    }else{
    if(x[0].masc3!=255){ //Calculo efetuado no 3° octeto
    printf("IP: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("MASK: %d.%d.%d.%d\n",x[0].masc1,x[0].masc2,x[0].masc3,x[0].masc4);
    calculo=255-x[0].masc3;
    primeiro=x[0].oct3+1;
    ultimo=x[0].oct3+calculo;
    printf("Rede: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("BroadCast: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3+calculo,255);
    printf("Faixa de IP Utilizavel:\n");
    printf("%d.%d.%d.%d - %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,primeiro,1,x[0].oct1,x[0].oct2,ultimo,254);
    }else{
    //Calculo efetuado no 4° octeto
    printf("IP: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("MASK: %d.%d.%d.%d\n",x[0].masc1,x[0].masc2,x[0].masc3,x[0].masc4);
    calculo=255-x[0].masc4;
    primeiro=x[0].oct4+1;
    ultimo=x[0].oct4+calculo;
    printf("Rede: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("BroadCast: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4+calculo);
    printf("Faixa de IP Utilizavel:\n");
    printf("%d.%d.%d.%d - %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,primeiro,x[0].oct1,x[0].oct2,x[0].oct3,ultimo);
    }
    }
    }else{
    if(x[0].oct1<=191){ //Classe B
    if(x[0].masc3!=255){ //Calculo efetuado no 3° octeto
    printf("IP: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("MASK: %d.%d.%d.%d\n",x[0].masc1,x[0].masc2,x[0].masc3,x[0].masc4);
    calculo=255-x[0].masc3;
    primeiro=x[0].oct3+1;
    ultimo=x[0].oct3+calculo;
    printf("Rede: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("BroadCast: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3+calculo,255);
    printf("Faixa de IP Utilizavel:\n");
    printf("%d.%d.%d.%d - %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,primeiro,1,x[0].oct1,x[0].oct2,ultimo,x[0].oct4);
    }else{
    //Calculo efetuado no 4° octeto
    printf("IP: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("MASK: %d.%d.%d.%d\n",x[0].masc1,x[0].masc2,x[0].masc3,x[0].masc4);
    calculo=255-x[0].masc4;
    primeiro=x[0].oct4+1;
    ultimo=x[0].oct4+calculo;
    printf("Rede: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("BroadCast: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,calculo);
    printf("Faixa de IP Utilizavel:\n");
    printf("%d.%d.%d.%d - %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,primeiro,x[0].oct1,x[0].oct2,x[0].oct3,ultimo);
    }
    }else{
    if(x[0].oct1<=223){ //Classe C
    //Calculo efetuado no 4° octeto
    printf("IP: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("MASK: %d.%d.%d.%d\n",x[0].masc1,x[0].masc2,x[0].masc3,x[0].masc4);
    calculo=255-x[0].masc4;
    primeiro=x[0].oct4+1;
    ultimo=x[0].oct4+calculo;
    printf("Rede: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,x[0].oct4);
    printf("BroadCast: %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,calculo);
    printf("Faixa de IP Utilizavel:\n");
    printf("%d.%d.%d.%d - %d.%d.%d.%d\n",x[0].oct1,x[0].oct2,x[0].oct3,primeiro,x[0].oct1,x[0].oct2,x[0].oct3,ultimo);
    }
    }
    }
    }

    Postando o resultado para caso alguem venha ter a mesma duvida que eu posteriormente ja ter algo para AJUDA-LO

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    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

    ×