Ir para conteúdo
Fórum Script Brasil

Loco

Membros
  • Total de itens

    270
  • Registro em

  • Última visita

Sobre Loco

Perfil

  • Gender
    Male
  • Location
    Paraná

Loco's Achievements

0

Reputação

  1. Loco

    Sistema Operacional

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

    Criar uma Classe Abstrata

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

    (Resolvido) Duvida básica

    Era exatamente isso que eu procurava é c++ por isso eu não encontrei nos livros... agradeço pela ajuda
  4. Estava vendo uns codigos aki e achei essa funçao no meio.. parece besteira mas como ela funciona??? como é a sintaxe pra usar esse '?' 1:0 q isso?? #DEFINE EMPTY -1 int isempty(int num) { return (num == EMPTY) ? 1 : 0; }
  5. Loco

    Leitura e Escrita de arquivos

    Muito obrigado CPP eu cometi muitos erros nunca ia funcionar agora você abriu minha mente para trabalhar com arquivos haha vlw mestre vou tentar terminar o programa la! []'s
  6. Loco

    Leitura e Escrita de arquivos

    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"); }
  7. 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"); }
  8. Loco

    Vetores

    O erro ta em usar o scanf ele não captura espaços utilize gets(frase);
  9. Loco

    Syntax error - Ajuda

    Veja se isso já corrige ;) typedef struct _cadastro { char nome[50]; int codigo; float preço; int estoque; }cadastro; typedef struct _vendas { float total_venda; int codigo; int quantidade; int dia, mes, ano; char nome[50]; } vendas;
  10. 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");
  11. 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; }
  12. Loco

    Alguma idéia

    não ta muito claro dado um numero x ver quantas vezes o y repete em x? so pode ser uma vez no max, só tem 1 numero =S
  13. poe um \a dentro do printf
  14. 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
×
×
  • Criar Novo...