Ir ao conteúdo
  • Cadastre-se

Calculo de Sub Rede


marqueslucas

Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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