Jump to content
Fórum Script Brasil

Loco

Membros
  • Posts

    270
  • Joined

  • Last visited

Everything posted by Loco

  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. 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. 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. 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. 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
  15. cria uma funçao que verifica os caracteres de acordo com seu numero na tabela ASCII aih é só usar a imaginacao e muitos \ if else
  16. 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(); }
  17. ta faltando um return na sua funçao ou usar ponteiro
  18. o erro ta aki if(strchr(palavra=='ar')); o c só armazena 1 caractere não dois então não tem como fazer a comparação palavra=='ar' e sim if (palavra=='a' && palavra[i+1]=='r')
  19. Loco

    Exercicios em C

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

    Trabalho de faculdade.

    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
  22. usa a função strlen(string) para pegar o tamanho total da string depois da um loop decrementando a string o loop verificando de tras para frente se as duas ultimas letras são r e a se não conseguir cola teu codigo aqui que te ajudo
  23. você já tem conhecimento de manipulaçao de arquivos e ponteiros? FILE *arq; arq=fopen("nome_do_arquivo.txt","w+"); fprintf(arq,"%s",nome_da_string); fclose(arq);]
  24. Loco

    Exception

    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 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
×
×
  • Create New...