Ir ao conteúdo
  • Cadastre-se

RafaelPucci

Membro Pleno
  • Posts

    110
  • Cadastrado em

  • Última visita

posts postados por RafaelPucci

  1. Boa noite.

    Com o conceito de struct você cria um novo "tipo", ou seja, você consegue mesclar vários tipos de dados. Criei um novo tipo habitante contento salário, idade e sexo.

    Criei algumas funções que ele citou no enunciado e algumas auxiliares, como o Quick, que implementa o algoritmo QuickSort para ordenação de vetores.

    Segue a referencia para struct:

    http://tigcc.ticalc.org/doc/keywords.html#struct

    http://myprogrammingblog.com/2011/07/18/c-language-how-to-use-struct-typedef/

    http://www2.its.strath.ac.uk/courses/c/

    IND é apenas uma variável que controla os indices do vetor de "habitantes".

    Não sou muito bom em explicar as coisas.. rs

    Conseguiu entender ?

    []'s

    • Curtir 1
  2. Bom dia.

    Também não trabalho com C, trabalho com .NET e PHP.

    Estou cursando o 6° de SI também, programo em C por passatempo =)

    Qual parte do código você não entendeu ?

    []'s

    • Curtir 1
  3. Bom dia dbatista.

    Segue parte de uma solução que montei aqui, não consegui terminar pois estou no trabalho, segue caso queira melhorá-la.

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define MAX 10

    typedef struct _habitante {
    int salario;
    int idade;
    char sexo;
    }habitante;

    int menu();
    void CadastraInf(habitante *hab);
    void RetornaInf(habitante *hab);
    int CalculaSalarios(habitante *hab);
    int * RetornaIdade(habitante *hab);
    int RetornaMulher(habitante *hab);
    void Quick(int *vetor, int inicio, int fim);
    unsigned int IND = -1;

    int main() {
    habitante hab[MAX];

    while(true){
    switch(menu()){
    case 1:
    {
    CadastraInf(hab);
    break;
    }

    case 2:
    {
    RetornaInf(hab);;
    break;
    }
    default:
    exit(0);
    }
    }
    }

    int menu()
    {
    int opc;
    printf("******************** MENU ********************\n\n");
    printf("(1) - Cadastro\n(2) - Consulta de resultados\n");
    printf("Digite a opcao desejada: ");
    scanf("%d",&opc);
    return opc;
    }

    void CadastraInf(habitante *hab) {

    fflush(stdin);
    printf("*** Cadastro de informações ***\n\n");

    printf("Digite o salario do habitante: ");
    scanf("%d",&(hab[IND+1].salario));
    fflush(stdin);

    printf("Digite a idade do habitante: ");
    scanf("%d",&(hab[IND+1].idade));
    fflush(stdin);

    printf("Digite o sexo do habitante (M/F): ");
    fgets(&(hab[IND+1].sexo),2,stdin);
    fflush(stdin);

    IND++;
    }

    void RetornaInf(habitante *hab) {
    int *vetor = RetornaIdade(hab);
    printf("Salario do grupo: %d\n",CalculaSalarios(hab));
    printf("Menor Idade: %d\n",vetor[0]);
    printf("Maior Idade: %d\n",vetor[IND]);
    printf("Quantidade de Mulheres: %d\n",RetornaMulher(hab));
    }

    int CalculaSalarios(habitante *hab) {
    int cont,soma=0;

    for(cont=0 ; cont <= IND; cont++){
    soma += hab[cont].salario;
    }
    return soma;
    }

    int * RetornaIdade(habitante *hab) {
    int cont,vetor[IND];

    for(cont=0 ; cont <= IND; cont++){
    vetor[cont] = hab[cont].idade;
    }

    Quick(vetor,0,IND);

    return vetor;
    }

    int RetornaMulher(habitante *hab) {
    int cont, qtd=0;

    for(cont=0 ; cont <= IND; cont++){
    if((hab[cont].sexo == 'F') && (hab[cont].salario <= 200))
    qtd ++;
    }
    return qtd;
    }
    /*
    habitante MenorSal(habitante *hab) {
    int cont, vetor[IND];
    habitante _hab;

    for(cont=0 ; cont <= IND; cont++){
    vetor[cont] = hab[cont].salario;
    }

    Quick(vetor,0,IND);

    for(cont=0 ; cont <= IND; cont++){
    if(vetor[0] = hab[cont].salario) {

    printf("ACHEI");
    }
    }

    return _hab;

    }*/

    void Quick(int *vetor, int inicio, int fim){

    int pivo, aux, i, j, meio;

    i = inicio;
    j = fim;

    meio = (int) ((i + j) / 2);
    pivo = vetor[meio];

    do{
    while (vetor[i] < pivo) i = i + 1;
    while (vetor[j] > pivo) j = j - 1;

    if(i <= j){
    aux = vetor[i];
    vetor[i] = vetor[j];
    vetor[j] = aux;
    i = i + 1;
    j = j - 1;
    }
    }while(j > i);

    if(inicio < j) Quick(vetor, inicio, j);
    if(i < fim) Quick(vetor, i, fim);

    }

    Segui o princípio de ordenar e buscar as bordas, creio que computacionalmente seja melhor :)

    Espero ter ajudado no exemplo.

    []'s

    • Curtir 1
  4. A flag %d formata a entrada ou saida como um inteiro.

    Não testei o código do colega acima, mas creio que gerará um acess violation quando entrar no for por não inicializar a variável idade.

    É possível melhorar o código acima.

    []'s

    • Curtir 1

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!