Ir para conteúdo

POWERED BY:

Arquivado

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

brujah999

[Resolvido] Problema com Vetores

Recommended Posts

Ok, tenho esse programa, ele ta rodando lindo, mais tem um problema ele deveria gravar dados de 4 departamentos e 6 funcionarios e quando pedido gerar relatorio com os dados do funcionario de acordo com o setor.

 

Exemplo se setor 1 cabe 10 funcionarios a 2 reais hora, e setor 2, 20 funcionarios a 5 reais hora ( digitados pelo usuario, como ta no programa ), no final ele analisa o setor quantas horas extras e da o salario final do cara.

 

Bem como falei ta rodando mais apenas para 1 funcionario e 1 setor, sempre que coloco um vetor da erro.

 

Alguém poderia me ajudar a colocar um vetor funcional ??

 

segue codigo

 

****************************************

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

/*****ESTRUTURA*****/

struct departamento
{
char nomed[30];
float maxhoras, valorhora;
int codigo;
};
typedef struct departamento tipodepartamento;

struct funcionario
{
char nomef[30];
float bancohoras, horastrab;
int codigo, codigodep;
};
typedef struct funcionario tipofuncionario;

/*****PROTÓTIPOS DAS FUNÇÕES*****/

float receber(float n1, float n2, float n3);

/*****FUNÇÃO PRINCIPAL COM MENU*****/

int main()
{
int opc, i;
float totalhorastrab, totalreceber, v1, v2;
do
{
printf("Folha de Pagamento\n");
printf("\nPor favor digite a sua opcao\n\n");
printf("1 - Cadastrar Departamento\n");
printf("2 - Cadastrar Funcionario\n");
printf("3 - Folha de Pagamento por Funcionario\n");
printf("4 - Sair\n\n\nopcao:");
scanf("%d",&opc);
system("cls");

/***** ESTRUTURA DE CONTROLE - MENU*****/

switch (opc)
{

case 1:
tipodepartamento dep;

printf("\nNome do setor: ");
scanf("%s",&dep.nomed);

printf("\nNumero Departamento: ");
scanf("%d",&dep.codigo);

printf("\nNumero maximo de horas: ");
scanf("%d",&dep.maxhoras);

printf("\nValor hora do funcionario: ");
scanf("%f",&dep.valorhora);

break;

case 2:
tipofuncionario func;

printf("\nNome do Funcionario: ");
scanf("%s",&func.nomef);

printf("\nNumero do Funcionario: ");
scanf("%d",&func.codigo);

while(func.codigodep != dep.codigo)
{
printf("\nNumero do Departamento: ");
scanf("%d",&func.codigodep);
}
printf("\nQuantidade de horas trabalhadas: ");
scanf("%f",&func.horastrab);

break;

case 3:

totalhorastrab=func.horastrab;
totalreceber=receber(totalhorastrab,dep.maxhoras,dep.valorhora);

printf("Dados do Funcionario\n\n Nome: %s\n Departamento: %d\n Horas trabalhadas: %4.0f horas\n Total a Receber: R$%6.2f\n\n", func.nomef, func.codigodep, totalhorastrab, totalreceber);

break;

case 4:
printf("\nSAINDO...\n\n");
break;

default:
printf("\n\nOpcao invalida!!!\n\n");
break;
}
}
while(opc !=4);
}

/*****Função Total a Receber*****/
float hextra;
float receber (float n1, float n2, float n3)

{
if(n1<=n2)

return n3*n1;

else
{
hextra=n1-n2;
return (((n1-hextra)*n3)+((n3*1.5)*hextra));
}
}
******************************************************

vlw a ajuda 4.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

brujah999, você terá que criar um vetor de ponteiros...

 

assim:

 

typedef struct{

char nomed[30];

float maxhoras, valorhora;

int codigo;

}*tipodepartamento;

 

tipodepartamento dep[4];

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara eu tentei is da erro.. veja se fiz algo errado plz

 

 

// Cria um programa.

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

/*****ESTRUTURA*****/

struct departamento 
 {
  char nomed[30];
  float maxhoras, valorhora; 
  int codigo;
 };
typedef struct departamento *tipodepartamento;

struct funcionario 
 {
  char nomef[30];
  float bancohoras, horastrab; 
  int codigo, codigodep;
 };
typedef struct funcionario *tipofuncionario;

/*****PROTÓTIPOS DAS FUNÇÕES*****/

float receber(float n1, float n2, float n3);

/*****FUNÇÃO PRINCIPAL COM MENU*****/

int main()
 {
  int opc, i;
  float totalhorastrab, totalreceber, v1, v2;
  do
  {
  printf("Folha de Pagamento\n");
  printf("\nPor favor digite a sua opcao\n\n");
  printf("1 - Cadastrar Departamento\n");
  printf("2 - Cadastrar Funcionario\n");
  printf("3 - Folha de Pagamento por Funcionario\n");
  printf("4 - Sair\n\n\nopcao:");
  scanf("%d",&opc);
  system("cls");
  
/***** ESTRUTURA DE CONTROLE - MENU*****/  

  switch (opc)
  {
		 
   case 1:
   tipodepartamento dep[2];
	for (i=0;i<2;i++){
		
	printf("\nNome do setor: ");
	scanf("%s",&dep[i].nomed);
	
	printf("\nNumero Departamento: ");
	scanf("%d",&dep[i].codigo);
		   
	printf("\nNumero maximo de horas: ");
	scanf("%d",&dep[i].maxhoras);

	printf("\nValor hora do funcionario: ");
	scanf("%f",&dep[i].valorhora);
}//fim "for"
   break;  
   
   case 2:
	tipofuncionario func[2];
	for (i=0;i<2;i++){
		
	printf("\nNome do Funcionario: ");
	scanf("%s",&func[i].nomef);
	
	printf("\nNumero do Funcionario: ");
	scanf("%d",&func[i].codigo);
	
	while(func.codigodep != dep[i].codigo)
	{
	printf("\nNumero do Departamento: ");
	scanf("%d",&func[i].codigodep);
	}
	printf("\nQuantidade de horas trabalhadas: ");
	scanf("%f",&func[i].horastrab);
}//fim "for"
   break;
   
   case 3:
	for (i=0;i<2;i++){
	totalhorastrab=func.horastrab;
	totalreceber=receber(totalhorastrab,dep[i].maxhoras,dep[i].valorhora);
	
	printf("Dados do Funcionario\n\n Nome: %s\n Departamento: %d\n Horas trabalhadas: %4.0f horas\n Total a Receber: R$%6.2f\n\n", func[i].nomef, func[i].codigodep, totalhorastrab, totalreceber);
}//fim "for"
   break; 
   
   case 4:
			printf("\nSAINDO...\n\n");
   break;
		
   default:
   printf("\n\nOpcao invalida!!!\n\n");
   break;	   
  }	  
  }
 while(opc !=4);
 }
	 
/*****Função Total a Receber*****/ 
float hextra;
float receber (float n1, float n2, float n3)

{
if(n1<=n2)
	
	return n3*n1;
   
else
{
	hextra=n1-n2;
	return (((n1-hextra)*n3)+((n3*1.5)*hextra));
}	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

É assim:

 

struct departamento
{
  char nomed[30];
  float maxhoras, valorhora;
  int codigo;
};
typedef struct departamento *tipodepartamento;

struct funcionario
{
  char nomef[30];
  float bancohoras, horastrab;
  int codigo, codigodep;
};
typedef struct funcionario *tipofuncionario;

tipodepartamento dep[2];

int main(){
int i = 0;
// repete teu main
// no switch case, tu faz assim na hora de ler:

scanf("%s",dep[i]->nome);
// faz isso para os outros scanf também
// no printf é do mesmo jeito:
printf("%s",dep[i]->nome);

return 0;
}

Entendeu??

Da uma lida em ponteiro, fala tudo isso e mais um pouco...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, vlw msm... eu tentei o que me disse e rodou, vlw.. o problema agora preciso de ajuda de todos, nao sei pq, mais o programa rodando, começo a cadastras ou funcionarios ou departamento e acusa erro e o windows fecha a janela.

 

Que tipo de erro pode fazer o windows fechar hora sim, hora nao ???

 

vlw galera

 

vou postar o codigo para vcs testarem e ver o erro

 

// Cria um programa de calcule a folha de pagamento.

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

/*****ESTRUTURA*****/

struct departamento 
 {
  char nomed[30];
  float maxhoras, valorhora; 
  int codigo;
 };
typedef struct departamento *tipodepartamento;

struct funcionario 
 {
  char nomef[30];
  float bancohoras, horastrab; 
  int codigo2, codigodep;
 };
typedef struct funcionario *tipofuncionario;

/*****PROTÓTIPOS DAS FUNÇÕES*****/

float receber(float n1, float n2, float n3);

/*****FUNÇÃO PRINCIPAL COM MENU*****/

int main()
 {
  int opc, i=0;
  float totalhorastrab, totalreceber, v1, v2;
  do
  {
  printf("Folha de Pagamento\n");
  printf("\nPor favor digite a sua opcao\n\n");
  printf("1 - Cadastrar Departamento\n");
  printf("2 - Cadastrar Funcionario\n");
  printf("3 - Folha de Pagamento por Funcionario\n");
  printf("4 - Sair\n\n\nopcao:");
  scanf("%d",&opc);
  system("cls");
  
/***** ESTRUTURA DE CONTROLE - MENU*****/  

  switch (opc)
  {
		 
   case 1:
   tipodepartamento dep[4];
	for (i=0;i<2;i++){
		
	printf("Nome do setor: ");
	scanf("%s",&dep[i]->nomed);
	
	printf("\nNumero Departamento: ");
	scanf("%d",&dep[i]->codigo);
		   
	printf("\nNumero maximo de horas: ");
	scanf("%d",&dep[i]->maxhoras);

	printf("\nValor hora do funcionario: ");
	scanf("%f",&dep[i]->valorhora);
}//fim "for"
   break;  
   
   case 2:
	tipofuncionario func[6];
	for (i=0;i<2;i++){
		
	printf("Nome do Funcionario: ");
	scanf("%s",&func[i]->nomef);
	
	printf("\nNumero do Funcionario: ");
	scanf("%d",&func[i]->codigo2);
	
	while(func[i]->codigodep != dep[i]->codigo)
	{
	printf("\nNumero do Departamento: ");
	scanf("%d",&func[i]->codigodep);
	}
	printf("\nQuantidade de horas trabalhadas: ");
	scanf("%f",&func[i]->horastrab);
}//fim "for"
   break;
   
   case 3:
	for (i=0;i<2;i++){
	totalhorastrab=func[i]->horastrab;
	totalreceber=receber(totalhorastrab,dep[i]->maxhoras,dep[i]->valorhora);
	
	printf("Dados do Funcionario\n\n Nome: %s\n Departamento: %d\n Horas trabalhadas: %4.0f horas\n Total a Receber: R$%6.2f\n\n", func[i]->nomef, func[i]->codigodep, totalhorastrab, totalreceber);
}//fim "for"
   break; 
   
   case 4:
			printf("\nSAINDO...\n\n");
   break;
		
   default:
   printf("\n\nOpcao invalida!!!\n\n");
   break;	   
  }	  
  }
 while(opc !=4);
 }
	 
/*****Função Total a Receber*****/ 
float hextra;
float receber (float n1, float n2, float n3)

{
if(n1<=n2)
	
	return n3*n1;
   
else
{
	hextra=n1-n2;
	return (((n1-hextra)*n3)+((n3*1.5)*hextra));
}	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

normalmente qnd fecha é pq você ta mechendo onde n deve

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.