Ir para conteúdo
Fórum Script Brasil

Loco

Membros
  • Total de itens

    270
  • Registro em

  • Última visita

Posts postados por Loco

  1. Estou com problemas na compilação desse codigo pois o mesmo precisa ser compilado em linux, não estou achando onde está o erro

    Alguém pode me dar uma luz

    TASK.H

    #ifndef _TASKLIB_
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <ucontext.h>
    #define STACKSIZE 16000
    
    static int numTasks;
    No ** pFirst = NULL;
    
    typedef struct _No
    {
        void *Conteudo;
        struct _No* pProximo;
    } No;
    
    typedef struct task_t
    {
       ucontext_t ctxt;
       int taskID;
    } task_t;
    
    task_t Principal, *Corrente;
    
    //Funções de lista encadeada
    void AdicionaNoInicio ( No** pFirst , No* Novo_No );
    void AdicionaNoFim ( No** pFirst , No* Novo_No );
    void* ExcluirNo ( No* velhoNo );
    No* RemoveNoInicio ( No** pFirst );
    No* RemoveNoFim    ( No** pFirst );
    No* CriaNo ( void* novoConteudo );
    
    //Inicializa a tasklib
    void task_init(); 
    
    //Cria a tarefa
    int task_create( task_t * task, void (*start_routine)(void*), void * arg );
    
    //Termina a tarefa corrente
    void task_exit( int exit_code );
    
    //Suspende a tarefa corrente e ativa outra tarefa
    int task_yield();
    
    //Informa o identificador da tarefa corrente
    int task_id();
    
    #endif
    TASK.C
    #include "task.h"
    
    //Função que inicializa nossa biblioteca
    void task_init()
    { 
       
       numTasks = 0;
       
       getcontext( &( Principal.ctxt ) );
    
       Principal.taskID = numTasks;
    
       numTasks++;
    
       Corrente = &Principal;
    
       #ifdef DEBUG
          printf("task_init(): inicialização feita com sucesso.\n");
       #endif   
    
    }
    
    //Cria a tarefa
    int task_create( task_t * task, void (*start_routine)(void*), void * arg )
    {
       
       char* pilha;
       
       getcontext( &( task->ctxt ) );
       
       if( pilha = malloc( STACKSIZE ) )
         {
    
        ( task->ctxt ).uc_stack.ss_sp = pilha;//registrador que cuida onde o programa está nesse momento, onde está parado para continuar depois 
        
        ( task->ctxt ).uc_stack.ss_size = STACKSIZE;
        
        ( task->ctxt ).uc_stack.ss_flags = 0;
        
        ( task->ctxt ).uc_link = 0;
       
            makecontext( &( task->ctxt ), (void*) start_routine, 1, arg );// o contexto adquire corpo
    
            task->taskID = numTasks;
        
            numTasks++;
    
            #ifdef DEBUG
                printf("task_create: criou tarefa %i.\n", task->taskID);
            #endif
        
    
        AdicionaNoFim( &pFirst , CriaNo((void*) task) );
    
            return task->taskID;
      
       }
       
       else
         {
        
        #ifdef DEBUG
           printf("task_create: falha na criacao da tarefa %i.\n",task->taskID);
        #endif
        
        return -1;
        
         }
       
    }
    
    //Termina a tarefa corrente
    void task_exit( int exit_code )
    {
    
       #ifdef DEBUG
          printf("task_exit: tarefa %i sendo encerrada.\n",Corrente->taskID);
       #endif
    
       task_yield( &Principal );
    
    }
    
    //Suspende a tarefa corrente e ativa outra tarefa
    int task_yield()
    {
       No* aux;
       task_t* task;
    
       if ( Corrente->id != 0 )
       {
        aux = CriaNo ( (void*)Corrente );    
        AdicionaNoFim ( &pFirst , aux );
       }
       Corrente = &Principal; // Voltou para o sistema operacional
    
       aux = RemoveNoInicio(&pFirst);
       task = (task_t) aux->Conteudo; //VERIFICAR NECESSIDADE DO CAST
       //ExcluirNo(aux);
       Corrente = task;
    
       //Lembrando que swapcontext retorna 0 caso a troca seja efetuada com sucesso
       if( !( swapcontext( &( auxiliar->ctxt ), &( task->ctxt ) ) ) )
       {
           return 1;
       }
    
       else
       {
         return 0;
       }
    
    }
    //Informa o identificador da tarefa corrente
    int task_id()
    {   
       return ( *Corrente ).taskID;
    }
    
    No* CriaNo ( void* novoConteudo )
    {
        No* novoNo = (No*)malloc(sizeof(No));
        novoNo->Conteudo = novoConteudo;
        novoNo->pProximo = 0;
        return novoNo;
    }
    
    void* ExcluirNo ( No* velhoNo )
    {
        void* velhoConteudo;
        velhoConteudo = (void*) velhoNo->Conteudo;
        free( velhoNo );
        return velhoConteudo;
    }
    
    // FUNÇÔES DE LISTA ENCADEADA
    
    //Adiciona um nó(Novo_No) numa lista encadeada(apontada por *pFirst) na primeira posição
    void AdicionaNoInicio ( No** pFirst , No* Novo_No )
    {
        if ( (*pFirst) == NULL )            // CASO I) Quando a lista encadeada esta vazia
        {
            (*pFirst) = Novo_No;
        }
        else
        if ( (*pFirst)->pProximo == NULL )    // CASO II) Quando a lista encadeada só tem um elemento
        {
            Novo_No->pProximo = (*pFirst);
            (*pFirst) = Novo_No;
        }
        else                                // CASO III) Quando a lista encadeada tem mais de um elemento
        {
            Novo_No->pProximo = (*pFirst);
            (*pFirst) = Novo_No;
        }
    }
    
    //Adiciona um nó(Novo_No) numa lista encadeada(apontada por *pFirst) na primeira última
    void AdicionaNoFim ( No** pFirst , No* Novo_No )
    {
        if ( (*pFirst) == NULL )            // CASO I) Quando a lista encadeada esta vazia
        {
            (*pFirst) = Novo_No;
        }
        else
        if ( (*pFirst)->pProximo == NULL )    // CASO II) Quando a lista encadeada só tem um elemento
        {
            (*pFirst)->pProximo = Novo_No;
        }
        else                                // CASO III) Quando a lista encadeada tem mais de um elemento
        {
            No* Auxiliar = (*pFirst);//Auxiliar irá percorrer toda a lista, achar o último elemento e fazer com que ele aponte para o Novo_No
            while( Auxiliar->pProximo != NULL )    //enquanto houver um próximo elemento
                Auxiliar = Auxiliar->pProximo;  //Auxiliar será o proximo elemento
            Auxiliar->pProximo = Novo_No;        //Auxiliar, agora sendo o último elemento, apontará para o Novo_No e deixará de ser o último elemento para ser o penultimo
        }
    }
    
    //Remove um nó (e o retorna) de uma lista encadeada(apontada por *pFirst) da primeira posição
    No* RemoveNoInicio ( No** pFirst )
    {
        No* Velho_No = (*pFirst);    //variável que aponta para o nó que será removido
        if ( (*pFirst) == NULL ){
            //considerando que (*pFirst) == NULL,
        }
        else
        if ( (*pFirst)->pProximo == NULL )
        {
            (*pFirst) = NULL;    
        }
        else    // CASO III) Quando a lista encadeada tem mais de um elemento
        {
            (*pFirst) = (*pFirst)->pProximo;
        }
        return Velho_No;
    }
    MAIN.C
    #include <stdio.h>
    #include <stdlib.h>
    #include "task.h"
    
    task_t Pang, Peng, Ping, Pong, Pung;
    
    void BodyPang (void * arg)
    {
       int i;
       char* name = (char *) arg;
       
       for (i=0; i<4; i++)
       {
          printf ("%s %d\n", name, i);
          task_yield ();
       }
       printf ("%s FIM\n", name);
       task_exit (0);
    }
    
    void BodyPeng (void * arg)
    {
       int i;
       char* name = (char *) arg;
       
       for (i=0; i<4; i++)
       {
          printf ("%s %d\n", name, i);
          task_yield ();
       }
       printf ("%s FIM\n", name);
       task_exit (0);
    }
    
    void BodyPing (void * arg)
    {
       int i;
       char* name = (char *) arg;
         
       for (i=0; i<4; i++)
       {
          printf ("%s %d\n", name, i);
          task_yield ();
       }
       printf ("%s FIM\n", name);
       task_exit (0);
    }
    
    void BodyPong (void * arg)
    {
       int i;
       char* name = (char *) arg;
       
       for (i=0; i<4; i++)
       {
          printf ("%s %d\n", name, i);
          task_yield ();
       }
       printf ("%s FIM\n", name);
       task_exit (0);
    }
    
    void BodyPung (void * arg)
    {
       int i;
       char* name = (char *) arg;
       
       for (i=0; i<4; i++)
       {
          printf ("%s %d\n", name, i);
          task_yield ();
        
       }
       printf ("%s FIM\n", name);
       task_exit (0);
    }
    
    
    int main (int argc, char *argv[])
    {
       printf ("Main INICIO\n");
       task_init ();
       task_create (&Pang, BodyPang, "Pang");
       task_create (&Peng, BodyPeng, "   Peng");
       task_create (&Ping, BodyPing, "      Ping");       
       task_create (&Pong, BodyPong, "         Pong");
       task_create (&Pung, BodyPung, "            Pung");
       task_yield ();
       
       printf ("Main FIM\n");
       
       exit (0);
    }

  2. 2145fsz.png

    Alguém consegue ajudar?

    Clássico trabalho de faculdade que você está postando para que alguém resolva ele para você.

    O trabalho está tão explicado que é só ir programando na sequência como está escrito, caso você tenha alguma dúvida poste apenas a dúvida e não o exercício inteiro.

    vou fazer a letra A para você começar

    public abstract class Data {
        private int dia;
        private int mes;
        private int ano;
        
        public int getDia() {
            return dia;
        }
        public void setDia(int dia) {
            this.dia = dia;
        }
        public int getMes() {
            return mes;
        }
        public void setMes(int mes) {
            this.mes = mes;
        }
        public int getAno() {
            return ano;
        }
        public void setAno(int ano) {
            this.ano = ano;
        }    
    }

  3. Muito Obrigado CPP me ajudou muito!!

    Corrigi oque você falou e deu certo

    agora esta gravando e lendo.. era o w+b que eu não tinha feito ainda..

    mas agora estou com outro problema

    O usuário vai informar

    Nome

    idade

    telefone

    o programa deve deixar o usuario informar quantos telefones quiser

    para isso vou usar ponteiro dentro da estrutura.. dando realloc no incremento.. td isso ta tranquilo

    mas como puxar os dados devolta do arquivo pra poder ser editado no programa e depois gravar td no arquivo devolta

    tipo

    a primeira pessoa tem 1 tel

    a segunda tem 20 tel

    a terceira 10 telefones

    como vou fazer para puxar dados de diferentes tamanhos, numa estrutura?

    Fiz esse codigo pra mostrar o problema que tenho ao abrir os dados

    esse codigo só cria o arquivo que será aberto no outro codigo

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    FILE *arq;
    
    struct pess{
           int idade;
           char nome[30];
           int * telefone;
           int quantostel;
           }pessoa[3];
           
           
    main(){arq=fopen("teste.txt", "w+b");
    
    /*pessoa[0].idade=20;
    strcpy(pessoa[0].nome,"PESSOA 1");
    pessoa[0].telefone=(int *) malloc(sizeof(int)*3);
    pessoa[0].telefone[0]=100000;
    pessoa[0].telefone[1]=111111;
    pessoa[0].telefone[2]=222222;
    pessoa[0].quantostel=3;
    
    
    pessoa[1].idade=26;
    strcpy(pessoa[1].nome,"PESSOA 2");
    pessoa[1].telefone=(int *) malloc(sizeof(int)*1);
    pessoa[1].telefone[0]=999999;
    pessoa[1].quantostel=1;
    
    
    pessoa[2].idade=70;
    strcpy(pessoa[2].nome,"PESSOA 3");
    pessoa[2].telefone=(int *) malloc(sizeof(int)*1);
    pessoa[2].telefone[0]=888888;
    pessoa[2].quantostel=1;
    
    
    fwrite(&pessoa, (sizeof(pess)*3), 1, arq);
    fclose(arq);
    }

    Codigo do programa que abre o arquivo e puxa todos os dados para uma estrutura para que possa ser trabalhado

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    FILE *arq;

    struct pess{

    char nome[30];

    int * telefone;

    }pessoa[3];

    main(){arq=fopen("teste.txt", "w+b");

    struct pess alguém[3];

    //Aloquei direto no tamanho que estava la no codigo de cima (Depois faço algo dinamico)

    alguém[0].telefone=(int *) malloc(sizeof(int)*3);

    alguém[1].telefone=(int *) malloc(sizeof(int)*1);

    alguém[2].telefone=(int *) malloc(sizeof(int)*1);

    //Carregando os dados do arquivo txt na estrutura alguém

    fread(&alguém,(sizeof(pess)*3), 1,arq);

    //Imprimindo os dados

    puts(alguém[0].nome);

    printf("alguém.telefone %d\n\n", alguém[0].telefone[0]);

    printf("alguém.telefone %d\n\n", alguém[0].telefone[1]);

    printf("alguém.telefone %d\n\n", alguém[0].telefone[2]);

    puts(alguém[1].nome);

    printf("alguém.telefone %d\n\n", alguém[1].telefone[0]);

    printf("\nalguem.idade %d\n", alguém[2].idade);

    puts(alguém[2].nome);

    printf("alguém.telefone %d\n\n", alguém[2].telefone[0]);

    system("pause");

    }

    Se ficou td muito confuso a atividade é o seguinte

    Descrição da atividade:

    Crie um sistema de agenda de contatos.

    Para cada registro de pessoa deverão ser armazenados os seguintes atributos:

    Nome;

    Data de nascimento;

    Uma lista de telefones;

    Uma lista de e-mails;

    O sistema deverá armazenar o registro das pessoas cadastradas em um arquivo.

    O sistema deverá permitir a inclusão de novas pessoas na agenda.

    O sistema deverá permitir a edição dos dados das pessoas já cadastradas.

    O sistema deverá permitir a remoção de pessoas anteriormente cadastradas.

    O nome não deverá ter limites de caracteres.

    Ambas as listas, de telefone e e-mails não devem ter um número limitado, podendo ter inúmeros registros. (Esse está sendo o grande problema, trabalhar com arquivo e com numero ilimitado de emails e tels)

  4. Confesso que não sei muito sobre leitura e escrita em arquivos

    li uns tutoriais, cursos online e não consigo trabalhar com uma estrutura

    Estou com problema na leitura/ escrita de estruturas em arquivos

    Quero armazenar uma estrutura repetidas vezes em um txt

    e depois carregar todos os dados num vetor de estruturas

    ou seja

    a estrutura contem

    nome, idade e telefone

    no txt deve ficar a estrutura toda salva (sei que muitas vezes não fica legivel mas isso não vem ao caso)

    segue o codigo de teste que estou usando

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    FILE *arq;
    struct pess{
           int idade;
           char nome[30];
           int telefone;
           }pessoa[3];
           
           
    main(){arq=fopen("teste.txt", "w+");
    
    pessoa[0].idade=20;
    strcpy(pessoa[0].nome,"PESSOA 1");
    pessoa[0].telefone=2300032;
    
    pessoa[1].idade=26;
    strcpy(pessoa[1].nome,"PESSOA 2");
    pessoa[1].telefone=5522666;
    
    pessoa[2].idade=70;
    strcpy(pessoa[2].nome,"PESSOA 3");
    pessoa[2].telefone=234634;
    
    fwrite(&pessoa, sizeof(pess), 1, arq);
    
    rewind(arq);
    struct pess alguém[3];
    
    fread(&alguém,sizeof(pess), 1,arq);
    printf("\nalguem.idade %d\n", alguém[0].idade);
    puts(alguém[0].nome);
    printf("alguém.telefone %d\n\n", alguém[0].telefone);
    
    printf("\nalguem.idade %d\n", alguém[1].idade);
    puts(alguém[1].nome);
    printf("alguém.telefone %d\n\n", alguém[1].telefone);
    
    //fread(&alguém,sizeof(pess), 1,arq);
    printf("\nalguem.idade %d\n", alguém[2].idade);
    puts(alguém[2].nome);
    printf("alguém.telefone %d\n\n", alguém[2].telefone);
    
    system("pause");
    }

  5. O \n deve estar dentro das " "

    por exemplo

    printf("\nEscreve na linha 1 \n Escreve na linha 2\n Escreve na linha 3");

    no primeiro exemplo você usou o \n errado tava assim /n

    e no segundo exemplo você colocou o \n assim

    printf(\n" texto"); << SINTAXE ERRADA

    printf("\n texto"); << SINTAXE CORRETA

    não importa onde esta o \n, vai pular para a outra linha

    e no lugar do getchar use

    system("pause");

  6. Estava cheio de erro de sintaxe

    agora ta rodando só você acertar a conta q deve ser feita

    int main()

    {

    int depend;

    float salario_bruto,x,y,salario_liquido;

    printf("Entre com o salario bruto");

    scanf ("%f", &salario_bruto);

    x=(salario_bruto*0.82)*0.5;

    scanf ("%f", &x);

    printf ("Entre com a quantidade de dependentes");

    scanf("&d", &depend);

    y=(depend*50);

    scanf ("%f", &y);

    printf("O valor total de descontos e %f", x);

    printf("O total de acrescimo e: %f", y);

    printf ("Seu salario liquido e: %f ",salario_bruto-x+y);

    getch();

    return 0;

    }

  7. o erro ta no seu acumulador

    deve ter um contador para cada numero de preferencia

    inicialize o segundo vetor tudo com zero

    tenta incrementar elemento por elemento

    do jeito que esta fazendo seu acumulador troca o numero e mantem no numero que já estava, o que gera um erro

  8. Fiz um code baseado no seu e coloquei comentarios dos erros que achei

    obs faltou identação tb

    Obs o forum tem um bug se usar o contra barra zero \ 0 ele não exibe não sei por que mas deixei escrito os locais que deve usar se tiver duvidas posta ae

    #include <conio.h>
    #include <string.h>
    
    int main()
    {
    char eu[2]={'o'};
    char tu[3]={'a','s'};
    char ele[2]={'a'};
    char nos[5]={'a','m','o','s'};
    char vos[4]={'a','i','s'};
    char eles[3]={'a','m'};
    
    
    char palavra[20];
    int n;
    
    printf("PALAVRA:\n");
    gets(palavra);  // SINTAXE ERRADA ESTAVA DESSA FORMA gets("palavra")
    
    n=strlen(palavra);
    
    //for(i=n;i>=n;i++)
    //{
    if(palavra[n-2]=='a' && palavra[n-1]=='r') // não PRECISA DE LOOP SÓ UM IF USANDO O STRLEN
    {
        palavra[n-2]='contrabarra zero'; // TODA STRING ACABA EM contrabarra 0 então troquei o local do fim dela
    
        printf("Eu %s%s\n",palavra,eu); // USEI dois %s para imprimir 2 strings sem o uso do strcat =D
        printf("Tu %s%s\n",palavra,tu);
        printf("Ele %s%s\n",palavra,ele);
        printf("Nos %s%s\n",palavra,nos);
        printf("Vos %s%s\n",palavra,vos);
        printf("Eles %s%s\n",palavra,eles);
    }
        else
            printf("\a\aPalavra não terminada em ar");// um beep pra tirar uma pira =D
    
    
    
    getch();
    }

  9. Fiz um codigo bem simples

    ve se é isso

    #include <stdio.h>
    #include<stdlib.h>
    #define ADIVINHA 30; // aqui voce define o numero que será adivinhado
    
    
    main(){
    int num=ADIVINHA;
    int aux=0;
    int contador=0;
    
    while (aux != num){
    printf("\nInforme o numero: ");
    scanf("%d", &aux);
    contador++;
    
    
    if (aux > num )
        printf("O numero \x82 menor que %d \n", aux);
    else if (aux < num)
        printf("O numero \x82 maior que %d \n", aux);
    else {
        system("cls");
        system("color 1B");
        printf("\nAcertou na mosca!! o numero \x82 %d\nUtilizou %d palpites para acertar!!\n\n", aux, contador);}
    }
    system("pause");
    }

    []'s

  10. Tive que usar long long para alongar o int pois quando chega em 32 o numero alcanca o limite de armazenamento de um int e para de acumular

    acho que agora esta td ok

    long long int soma=0;
    int i;
    double peso=0;
    
    
    for (i=0;i<=63;i++){
        soma+=soma;    
        if(i==1){soma=1;}
        printf("i => %d = %lli\n",i,soma);
        }
    
    peso=soma*0.00526;
    printf("O Total de graos \x82: %lli \n", soma);
    printf("O peso em gramas \x82: %f \n",peso);
    
    system("pause");

    ps fiquei acordado ate agora vendo o bug nesses numeros imensos

    haha

    pelo menos aprendi alguma coisa nova xD

  11. Para descobrir a maior parte desses dados que você quer, terá que percorrer a matriz toda com loop

    e usando condições

    por ex: para descobrir o maior numero

    int MAIOR=0;
    
    for (i=0; i<LINHAS; i++){
         for (j=0; j<COLUNAS; j++){
              if(matriz[i][j]>MAIOR){
                     MAIOR=matriz[i][j];
              }
        }
    }
    Para descobrir o menor numero
    int MENOR=1000000;
    
    for (i=0; i<LINHAS; i++){
         for (j=0; j<COLUNAS; j++){
              if(matriz[i][j]<MENOR){
                     MENOR=matriz[i][j];
              }
        }
    }

    Agora se o usuário for digitar os dados é só fazer a condição já no loop de inserção de dados ou usa esse ai de cima que resolve também

    Agora se quiser que o programa faça td isso de uma forma rapida então realize a ordenação da matriz que a metade dos seus problemas estão solucionados, não precisa ordenar a matriz principal para não perder os dados de lugar mas crie outra que receba a original ordene ele que voce tera o maior numero e menor numero de forma facil e tera como calcular quantas vezes cada numero aparece somente utilizando um if ( mat[x][y] == mat[x][y+1] ) ...

    Boa sorte

  12. Meu programa utiliza matriz dinamica

    a alocação está correta

    mas quando executo determinada operação que geram inumeros numeros após a virgula

    o programa exibe o resultado mas costuma apresentar erro de memória

    ou seja

    o programa funciona

    exibe o resultado corretamente

    mas acusa o seguinte erro

    Nome do Evento de Problema: APPCRASH

    Nome do Aplicativo: Projeto.exe

    Versão do Aplicativo: 0.0.0.0

    Carimbo de Data/Hora do Aplicativo: 4ce00faa

    Nome do Módulo de Falhas: ntdll.dll

    Versão do Módulo de Falhas: 6.1.7600.16385

    Carimbo de Data/Hora do Módulo de Falhas: 4a5bdb3b

    Código de Exceção: c0000005

    Deslocamento de Exceção: 00033c8d

    Versão do sistema operacional: 6.1.7600.2.0.0.256.1

    Identificação da Localidade: 1046

    Informações Adicionais 1: 0a9e

    Informações Adicionais 2: 0a9e372d3b4ad19135b953a78882e789

    Informações Adicionais 3: 0a9e

    Informações Adicionais 4: 0a9e372d3b4ad19135b953a78882e789

    sei o trecho que apresenta problemas

    só não sei como utilizar o exception para corrigir isso

    alguém pode dar uma força?

    vlw

×
×
  • Criar Novo...