Ir para o conteúdo

Pesquisar na Comunidade

A mostrar resultados para tags ''c''.



Mais opções de pesquisa

  • Pesquisa por Tags

    Introduza as tags separadas por vírgulas.
  • Pesquisar por Autor

Tipo de Conteúdo


Fórum

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • SharePoint
    • Apresentação de Software
  • Informática
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Matemática
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categorias

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Procurar resultados em...

Pesquisar conteúdos que contêm...


Data de Publicação

  • Início

    Fim


Última Actualização

  • Início

    Fim


Filtrar por número de...

4955 resultados

  1. Dionatan Diego

    Conectar função ao menu

    Eai gnt, tudo bem com vc Estou fazendo um programa em C e não consigo conectar o Nó´s ao menu. Exemplo: cadastroAeroporto(); como fazer para que ele seja "linkado" no menu no case 2? #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct tNo { void *dado; struct tNo *proximo; } No; typedef struct tLista{ No *cabeca; No *ultimo; int tamanho; }Lista; Lista * cria() { Lista *l; l = malloc(sizeof(Lista)); if(l == NULL){ exit(1);} l->cabeca = malloc(sizeof(No)); if(!l->cabeca) { exit(1); } l->ultimo = l->cabeca; l->tamanho = 0; l->cabeca->proximo = NULL; return l; } void insere_inicio(Lista *l, void *dado) { No *novo; novo = malloc(sizeof(No)); if(novo == NULL) { exit(1); } novo->dado = dado; if (l->cabeca->proximo == NULL){ l->ultimo = novo; } novo->proximo = l->cabeca->proximo; l->cabeca->proximo = novo; l->tamanho += 1; } void * remove_inicio(Lista *l) { No *primeiro = l->cabeca->proximo; if(primeiro == NULL) { printf("Lista vazia.\n"); return NULL; } l->cabeca->proximo = primeiro->proximo; l->tamanho -= 1; void * dado = primeiro->dado; if(primeiro == l->ultimo){ l->ultimo = l->cabeca; } free(primeiro); return dado; } void destroi(Lista *f) { No *liberar; while(f->cabeca->proximo) { liberar = f->cabeca; free(liberar->dado); f->cabeca = f->cabeca->proximo; free(liberar); } free(f->cabeca); free(f); } void * remove_final(Lista *l){ No *ultimo = l->ultimo; void *dado; if(ultimo == l->cabeca) { printf("Lista vazia.\n"); return NULL; }else //Verifica se existe apenas um elemento if(ultimo == l->cabeca->proximo){ dado = ultimo->dado; l->cabeca->proximo = NULL; l->ultimo = l->cabeca; }else //Busca o penultimo elemento { No *penultimo = l->cabeca->proximo; while(penultimo != NULL){ if(penultimo->proximo == ultimo) break; penultimo = penultimo->proximo; } penultimo->proximo = NULL; l->ultimo = penultimo; l->tamanho -= 1; dado = ultimo->dado; } free(ultimo); return dado; } typedef struct tAeroporto{ char codigo[4]; char nome[100]; Lista * voos; } Aeroporto; typedef struct tVoo{ Aeroporto * destino; int codigo; } Voo; Aeroporto * buscaAeroporto(Lista *l,char codigo[4]){ No *n; n = l->cabeca->proximo; Aeroporto *a; while(n!=NULL){ a = (Aeroporto *) (n->dado); if( strcmp(a->codigo,codigo) == 0 ) return a; n = n->proximo; } return NULL; } No * buscaVoo(Lista *l,int codigo){ No *n; n = l->cabeca->proximo; Voo *v; while(n!=NULL){ v = (Voo *) (n->dado); if( v->codigo == codigo ) return n; n = n->proximo; } return NULL; } int remove_voo(Lista *l, int codigo){ No *remover = buscaVoo(l,codigo); if(remover == NULL){ return 0; }else if(l->ultimo == l->cabeca) { return 0; }else //Verifica se esta no inicio if(l->cabeca->proximo == remover){ remove_inicio(l); }else //Verifica se esta no final if(l->ultimo == remover){ remove_final(l); }else //Remove do meio da lista { No *anterior = l->cabeca->proximo; while(anterior != NULL){ if(anterior->proximo == remover) break; anterior = anterior->proximo; } anterior->proximo = remover->proximo; l->tamanho -= 1; free(remover); } return 1; } void imprimeAeroporto(Lista *l){ No *n; printf("\nMen\t\tDado\tProximo\n"); printf("%p\tcabeca\t%p\n",l->cabeca,l->cabeca->proximo); Aeroporto *a; for (n = l->cabeca->proximo; n!= NULL ; n = n->proximo){ a = (Aeroporto *)n->dado; printf("%p\t%s\t%p\n",n, a->codigo,n->proximo); } printf("%p\tultimo\t%p\n",l->ultimo,l->ultimo->proximo); printf("\n"); } void imprimeVoos(Lista *l){ No *n; printf("\nMen\t\tDado\tProximo\n"); printf("%p\tcabeca\t%p\n",l->cabeca,l->cabeca->proximo); Voo *a; for (n = l->cabeca->proximo; n!= NULL ; n = n->proximo){ a = (Voo *) n->dado; printf("%p\t%d\t%p\n",n, a->codigo,n->proximo); } printf("%p\tultimo\t%p\n",l->ultimo,l->ultimo->proximo); printf("\n"); } int CadastraAeroporto(Lista * l, char * Cidade, char * Codigo){ Aeroporto *a; a = malloc(sizeof(Aeroporto)); if(a == NULL) return 0; strcpy(a->codigo,Codigo); strcpy(a->nome,Cidade); a->voos = cria(); insere_inicio(l,(void *) a); return 1; } int CadastraVoo(Lista *l,int NumVoo, char * CodigoOrigem, char * CodigoDestino){ //Cadastra um Voo com um determinado número entre dois aeroportos identificados pelos seus Codigos. } int RemoveVoo(Lista *l,int NumVoo){ //Remove um Voo indicado pelo número. } // Função para exibir o menu de opções // Note que retorna um valor int, que é o // número digitado pelo usuário. int menu() { int opcao; printf("\n\n ==== MENU DE OPCOES ====\n"); printf("1 - Procura Voo \n"); printf("2 - Cadastra Aeroporto \n"); printf("3 - Imprime Voos \n"); printf("4 - Cadastra Voo \n"); printf("5 - Remove Voo \n"); printf("6 - Procura Voo \n"); printf("7 - Imprime Tudo \n"); printf("8 - SAIR \n"); printf("\nO que deseja fazer? "); scanf("%d", &opcao); return opcao; } int main(int argc, char * argv[]){ int opcao_selecionada; Lista *aeroportos; aeroportos = cria(); int cod; char codigoA[4]; char nomeA[100]; int codigoV; char origem[4]; char destino[4]; do{ opcao_selecionada = menu(); scanf("%d",&cod); switch(opcao_selecionada){ case 1: buscaVoo(); break; case 2: CadastraAeroporto(); break; break; case 3: imprimeVoos(); break; case 4: CadastraVoo(); break; case 5: RemoveVoo(); break; case 6: buscaVoo(); break; case 7: imprimeVoos(); break; case 8: break; } }while(cod != 0); imprimeAeroporto(aeroportos); //Imprimrir Voos //Aeroporto *a = buscaAeroporto(aeroportos,"CNF"); //imprimeVoos(a->voos); destroi(aeroportos); return 0; }
  2. anabelacostasantos

    sscanf

    sscanf(linha,"%f",&preco); Para que serve a função sscanf?
  3. Boa Tarde. Precisava da vossa ajuda para a criação de um programa onde se pretende gerir os serviços de uma empresa usando as operações de inserção, alteração, remoção e listagem dos mesmos. No programa depois de inserir um código o programa tem que dizer se esta livre ou ocupado (esta parte e onde tenho mais dificuldade em fazer), nao sei bem com fazer. Obrigado
  4. PsySc0rpi0n

    [Resolvido] If e else

    Boas. Estava a escrever uma pequena função que contém 2 if's, encadeados, mas como cada if tem apenas uma linha eu nem sequer me preocupei em colocar as chavetas para agrupar código. Mas ao escrever a função cheguei a um ponto que não consegui decidir a que if pertencia o else que estava a escrever. Esse momento foi este: ///////Create Virtual Volume file int create_vt_file(char* p_filename){ FILE* filename = NULL; if(check_if_file_exists(p_filename) == ERR_FILE_NO_FILE) if(filename = fopen(p_filename, "w")) return ERR_NO_ERR_OK; else // <-------Este pertence ao 'if' interior ou vai pertencer ao exterior? }
  5. riqu3s

    Erro ("Segmentation Fault") em função getenv()

    Boas pessoal, estou a criar uma aplicação servidor-cliente para um trabalho e numa das metas é pedido para utilizar a função getenv(). #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "medit-defaults.h" void dados() { int linhas, colunas, time_out, max_users; linhas=atoi(getenv("MEDIT_MAXLINES")); colunas=atoi(getenv("MEDIT_MAXCOLUMNS")); time_out=atoi(getenv("MEDIT_TIMEOUT")); max_users=atoi(getenv("MEDIT_MAXUSERS")); printf("Linhas: %d\tColunas: %d\t Time_Out:%d\t Max_Users:%d\n",linhas,colunas,time_out,max_users); } void comandos(char *comando) { int i; char *p[2]; *p=strtok(comando," "); if(strcmp(*p,"settings")==0) { dados(); } if(strcmp(*p,"load")==0) { for(i=1;i<2;i++) { *(p+i)=strtok(NULL," "); } printf("Valido.\n"); } if(strcmp(*p,"save")==0) { for(i=1;i<2;i++) { *(p+i)=strtok(NULL," "); } printf("Valido.\n"); } if(strcmp(*p,"free")==0) { for(i=1;i<2;i++) { *(p+i)=strtok(NULL," "); } printf("Valido.\n"); } if(strcmp(*p,"statistics")==0) { printf("Valido.\n"); } if(strcmp(*p,"users")==0) { printf("Valido.\n"); } if(strcmp(*p,"text")==0) { printf("Valido.\n"); } } int main(int argc, char* argv[]) { int n_linhas,n_col; int linhas,colunas; char comando[TAM]; printf("Insira o comando:\n"); scanf("%[^\n]",comando); if(strcmp(comando,"shutdown")==0) { printf("Servidor vai encerrar...\n"); exit(0); } else { comandos(comando); } return 0; } O programa está a funcionar corretamente e de acordo com aquilo que é necessário por agora, mas quando introduzo o comando "settings" aparece-me o erro 'Segmentation fault' e termina Já rodei o programa no windows e não me acontece este erro, gostaria de saber pq é que no linux isto acontece. Para o caso de ajudar melhor a entender o meu problema, deixo também o header file #ifndef MEDITDEFAULTS_H #define MEDITDEFAULTS_H #ifdef __cplusplus extern "C" { #endif #define TAM 50 #define TAM_USER 8 #define MEDIT_MAXCOLUMNS 45 //STRUCT PARA AS CARACTERISTICAS DO UTILIZADOR typedef struct Utilizador { char nome[TAM_USER]; int client_pid; }User; //STRUCT PARA ACOLHER O TEXTO EM EDICAO typedef struct texto_edicao { char linha[MEDIT_MAXCOLUMNS]; char username[TAM_USER]; int client_pid; }Edicao; #ifdef __cplusplus } #endif #endif /* MEDIT_DEFAULTS_H*/ Obrigado
  6. rasptty

    Cartão de Cidadão

    Boa Tarde Estou a tentar desenvolver uma aplicação para ler os dados do cartão de cidadão em Visual Foxpro, ou ler uma DLL ou ocx externa no VisualFox Pro, para ler o cartão de cidadão, será que alguém tem ou fez algo do género,
  7. Hagar

    RichTextBox

    Saudações! Como Buscar palavras em uma determinada linha do RichTextBox? Como Buscar palavra em uma determinada linha a partir de uma certa coluna no RichTextBox?
  8. Hagar

    RichTextBox

    Saudações! Como Buscar palavras em uma determinada linha do RichTextBox? Como Buscar palavra em uma determinada linha a partir de uma certa coluna no RichTextBox?
  9. thallisandre

    erro expected identifier '('

    Galera, me ajudem achar o erro por favor // Autor:..... #include <stdio.h> #include <locale.h> #include <math.h> int main (){ setlocale (LC_ALL, "Portuguese"); //Declarçao de variaveis float ladoA, ladoB, ladoC, combustivel, preco, ano, multa; int a, b, c, idade ; int opcao; char //Inicio do{ printf("<1> Triangulo"); printf("<2> Preço do combustivel \n"); printf("<3> Ordem crescente \n"); printf("<4> Multa de transito"); printf("<5> Eleitor"); printf("<6> Fim \n"); printf("\n Opção --> "); scanf("%d", &opcao); switch(opcao){ case 1 : //Exercicio 3 printf("\n\n Digite o lado A: \n\n"); scanf ("%f", &ladoA); printf("\n\n Digite o lado B: \n\n"); scanf ("%f", &ladoB); printf("\n\n Digite o lado C: \n\n");printf("\n\n Digite o lado A: \n\n"); scanf ("%f", &ladoA); printf("\n\n Digite o lado B: \n\n"); scanf ("%f", &ladoB); printf("\n\n Digite o lado C: \n\n"); scanf ("%f", &ladoC); if((ladoA<ladoB+ladoC) && (ladoB<ladoA+ladoC) && (ladoC<ladoA+ladoB)){ printf("\n\n E um triangulo \n\n"); else if((ladoA==ladoB) && (ladoA==ladoC) && (ladoB==ladoC)){ printf("\n\n E um triangulo equilatero \n\n"); } else if(( (ladoA == ladoB) && ladoA != ladoC ) ||( (ladoA == ladoC) && ladoA != ladoB) ||( (ladoB == ladoC) && ladoB != ladoA)){ printf("\n\n E um triangulo isoceles \n\n"); } else if((ladoA!=ladoB) && (ladoA!=ladoC) && (ladoB!=ladoC)){ printf("\n\n E um triangulo escaleno \n\n"); } } else { printf("\n\n NAO e um triangulo \n\n"); } break; case 2: //Exercicio 10 printf("\n\n Digite a quantidade de combustivel comprada pela empresa em litros: \n\n"); scanf ("%f", &combustivel); if(combustivel <= 50000){ printf("\n\n Digite os anos passados desde o valor inicial: \n"); scanf("%f", &ano); preco = 2.13 * pow(1.2,ano); printf("\n\n O preço do combustivel sera: %.2f", preco); } else{ printf("\n\n Digite o ano: \n"); scanf("%f", &ano); preco = 2.13 * pow(1.12,ano); printf("\n\n O preço do combustivel sera: %.2f \n\n", preco); } break; case 3: //Exercicio 12 printf("\n Escreva 3 numeros \n"); scanf("%d","%d","%d",a, b, c); printf("\nValores em ordem crescente (do menor para o maior)\n"); if ((a < b) && (b < c)){ printf("%d - %d - %d", a, b, c); } else if ((a < c) && (c < b)){ printf("%d - %d - %d", a, c, b); } else if ((b < a) && (a < c)){ printf("%d - %d - %d", b, a, c); } else if ((b < c) && (c < a)){ printf("%d - %d - %d", b, c, a); } else if ((c < a) && (a < b)){ printf("%d - %d - %d", c, a, b); } else{ printf("%d - %d - %d", c, b, a); } break; case 4: //Exercicio 32 printf("\n\n\n Digite a velocidade limite da pista: "); scanf ("%f", &limite); printf("\n\n\n Digite a velocidade do motorista: "); scanf ("%f", &velocidade); if(velocidade <= limite){ printf("\n\n\n Nao havera multa "); } else{ multa = (velocidade - limite) * 5; printf("\n\n\n A multa sera de: %.2f ",multa); } break; case 5: //Exercicio 14 printf("\n\n\n Digite sua idade: "); scanf ("%d", &idade); if(idade <= 16){ printf("\n\n Nao-eleitor "); } else if(idade >= 18 && idade <= 65){ printf("\n\n Eleitor Obrigatorio \n\n"); } else{ printf("\n\n Eleitor Facultativo \n\n"); } break; case 6: //Fim de programa printf("\n\n ----- FIM DE PROGRAMA ----- \n\n"); default: printf("\n\n\n Opção inválida \n\n\n"); } } while (opcao != 6); printf("\n\n\n ----- Obrigado ----- \n\n\n"); }
  10. Inacabado

    || vs && em getchar()

    Andei á martelada para fazer este programa do Livro C Programming Language, mais tempo do que o que eu expectava. Problema: escreve um programa que faça o print de uma palavra por linha. condições: Não usar arrays e trabalhar apenas com: condições (if, else, else if); ciclos(for ou while); operadores(||,&&,!=,==)... enfim toda a matéria que se tem dada até aquela secção do primeiro capitulo do livro do conhecidissímo livro do Dennis Ritchie e Brian Kerningham. #include <stdio.h> #define IN 1 /*inside a word*/ #define OUT 0 /*outside a word*/ /*Write a program that prints its input one word per line*/ int main(void) { int c,state; state=OUT; while((c=getchar())!=EOF) { if(c!=' ' && c!='\t' && c!='\n') { state=IN; putchar(c); } else if(state==IN) { state=OUT; putchar('\n'); } } return 0; } Porreiro o código corre bem, mas e para lá chegar!?! Andei á porra e á massa com aquele primeiro if: if(c!=' ' && c!='\t' && c!='\n') ...porque eu estava naquela de utilizar o operador || em vez do && que fez finalmente o programa correr bem! Mas sinceramente, e esta é a razão deste post ainda não percebi a razão de o operador || em if(c!=' ' || c!='\t' || c!='\n') dar um comportamento inesperado! Alguém me pode dizer o que diferencia estes dois operadores para este caso especifico? Ou seja se estamos a analisar caracter a caracter em c com o getchar() qual é a diferença? Obrigado desde já e um agradecimento especial ao HHH que tanta ajuda tem dado, muitas vezes (eu incluído) sem o pessoal merecer...
  11. PsySc0rpi0n

    Makefile não compila programa correctamente

    Boas. Tenho o seguinte código: #include <avr/interrupt.h> #include <avr/io.h> #include <util/delay.h> #define KEY_INPUT PIND #define LED_OUTPUT PORTB #define LED_DIR DDRB volatile uint8_t key_state = 0; volatile uint8_t key_press = 0; uint8_t get_key_press(uint8_t key_mask){ cli(); key_mask &= key_press; //read key(s) key_press ^= key_mask; //clear key(s) sei(); return key_mask; } void timer_intr_setup(void){ TCCR0B = 1 << CS02; //divide 256 * 256 TIMSK0 = 1 << TOIE0; //enable timer interrupt } int main(void){ timer_intr_setup(); LED_DIR = 0xff; LED_OUTPUT = 0xff; sei(); for(;;){ LED_OUTPUT ^= get_key_press(0x0c); } } ISR (TIMER0_OVF_vect){ static uint8_t ct0, ct1; uint8_t i; i = key_state ^ ~KEY_INPUT; //key changed ? ct0 = ~(ct0 & i); //reset or count ct0 ct1 = ct0 ^ (ct1 & i); //reset or count ct1 i &= ct0 & ct1; //count until roll over key_state ^= i; //thne toggle debounced state //now debounce is finished key_press |= key_state & i; //0->1 key press detect } E o Makefile que estou a usar é: # WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al. # Modified (bringing often-changed options to the top) by Elliot Williams # make all = Make software and program # make clean = Clean out built project files. # make program = Download the hex file to the device, using avrdude. Please # customize the avrdude settings below first! # Microcontroller Type MCU = atmega328p # MCU = attiny2313 # MCU = atmega8 # MCU = attiny45 # Target file name (without extension). TARGET = debounce # Programming hardware: type avrdude -c ? # to get a full listing. # AVRDUDE_PROGRAMMER = dapa AVRDUDE_PROGRAMMER = arduino # AVRDUDE_PROGRAMMER = dt006 #AVRDUDE_PORT = /dev/usb # not really needed for usb AVRDUDE_PORT = /dev/ttyUSB0 # linux # AVRDUDE_PORT = lpt1 # windows ############# Don't need to change below here for most purposes (Elliot) # Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s # Output format. (can be srec, ihex, binary) FORMAT = ihex # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c # If there is more than one source file, append them above, or modify and # uncomment the following: #SRC += foo.c bar.c # You can also wrap lines by appending a backslash to the end of the line: #SRC += baz.c \ #xyzzy.c # List Assembler source files here. # Make them always end in a capital .S. Files ending in a lowercase .s # will not be considered source files but generated files (assembler # output from the compiler), and will be deleted upon "make clean"! # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. ASRC = debounce.S # List any extra directories to look for include files here. # Each directory must be seperated by a space. EXTRAINCDIRS = # Optional compiler flags. # -g: generate debugging information (for GDB, or for COFF conversion) # -O*: optimization level # -f...: tuning, see gcc manual and avr-libc documentation # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -ahlms: create assembler listing CFLAGS = -g -O$(OPT) \ -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL\ -Wa,-adhlns=$(<:.c=.lst) \ $(patsubst %,-I%,$(EXTRAINCDIRS)) # Set a "language standard" compiler flag. # Unremark just one line below to set the language standard to use. # gnu99 = C99 + GNU extensions. See GCC manual for more information. #CFLAGS += -std=c89 #CFLAGS += -std=gnu89 #CFLAGS += -std=c99 CFLAGS += -std=gnu99 # Optional assembler flags. # -Wa,...: tell GCC to pass this to the assembler. # -ahlms: create listing # -gstabs: have the assembler create line number information; note that # for use in COFF files, additional information about filenames # and function names needs to be present in the assembler source # files -- see avr-libc docs [FIXME: not yet described there] ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs # Optional linker flags. # -Wl,...: tell GCC to pass this to linker. # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref,--warn-common # Additional libraries # Minimalistic printf version #LDFLAGS += -Wl,-u,vfprintf -lprintf_min # Floating point printf version (requires -lm below) #LDFLAGS += -Wl,-u,vfprintf -lprintf_flt # -lm = math library LDFLAGS += -lm # Programming support using avrdude. Settings and variables. AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex:i #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) # Uncomment the following if you want avrdude's erase cycle counter. # Note that this counter needs to be initialized first using -Yn, # see avrdude manual. #AVRDUDE_ERASE += -y # Uncomment the following if you do /not/ wish a verification to be # performed after programming the device. AVRDUDE_FLAGS += -V # Increase verbosity level. Please use this when submitting bug # reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> # to submit bug reports. AVRDUDE_FLAGS += -vvv #Run while cable attached or don't AVRDUDE_FLAGS += -E reset #keep chip disabled while cable attached #AVRDUDE_FLAGS += -E noreset #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x04:m #run with 8 Mhz clock #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x21:m #run with 1 Mhz clock #default clock mode #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x01:m #run with 1 Mhz clock no start up time # --------------------------------------------------------------------------- # Define directories, if needed. #DIRAVR = c:/winavr #DIRAVRBIN = $(DIRAVR)/bin #DIRAVRUTILS = $(DIRAVR)/utils/bin #DIRINC = . #DIRLIB = $(DIRAVR)/avr/lib # Define programs and commands. SHELL = sh CC = avr-gcc OBJCOPY = avr-objcopy OBJDUMP = avr-objdump SIZE = avr-size # Programming support using avrdude. AVRDUDE = avrdude REMOVE = rm -f COPY = cp HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex ELFSIZE = $(SIZE) -A $(TARGET).elf # Define Messages # English MSG_ERRORS_NONE = Errors: none MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- MSG_SIZE_BEFORE = Size before: MSG_SIZE_AFTER = Size after: MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: MSG_COMPILING = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: # Define all object files. OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) # Define all listing files. LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) # Combine all necessary flags and optional flags. # Add target processor to flags. ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) # Default target: make program! all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ $(TARGET).lss $(TARGET).sym sizeafter finished end # $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) # Eye candy. # AVR Studio 3.x does not check make's exit code but relies on # the following magic strings to be generated by the compile job. begin: @echo @echo $(MSG_BEGIN) finished: @echo $(MSG_ERRORS_NONE) end: @echo $(MSG_END) @echo # Display size of file. sizebefore: @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi sizeafter: @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi # Display compiler version information. gccversion : @$(CC) --version # Convert ELF to COFF for use in debugging / simulating in # AVR Studio or VMLAB. COFFCONVERT=$(OBJCOPY) --debugging \ --change-section-address .data-0x800000 \ --change-section-address .bss-0x800000 \ --change-section-address .noinit-0x800000 \ --change-section-address .eeprom-0x810000 coff: $(TARGET).elf @echo @echo $(MSG_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-avr $< $(TARGET).cof extcoff: $(TARGET).elf @echo @echo $(MSG_EXTENDED_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof # Program the device. program: $(TARGET).hex $(TARGET).eep $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @echo @echo $(MSG_FLASH) $@ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ %.eep: %.elf @echo @echo $(MSG_EEPROM) $@ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ # Create extended listing file from ELF output file. %.lss: %.elf @echo @echo $(MSG_EXTENDED_LISTING) $@ $(OBJDUMP) -h -S $< > $@ # Create a symbol table from ELF output file. %.sym: %.elf @echo @echo $(MSG_SYMBOL_TABLE) $@ avr-nm -n $< > $@ # Link: create ELF output file from object files. .SECONDARY : $(TARGET).elf .PRECIOUS : $(OBJ) %.elf: $(OBJ) @echo @echo $(MSG_LINKING) $@ $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) # Compile: create object files from C source files. %.o : %.c @echo @echo $(MSG_COMPILING) $< $(CC) -c $(ALL_CFLAGS) $< -o $@ # Compile: create assembler files from C source files. %.s : %.c $(CC) -S $(ALL_CFLAGS) $< -o $@ # Assemble: create object files from assembler source files. %.o : %.S @echo @echo $(MSG_ASSEMBLING) $< $(CC) -c $(ALL_ASFLAGS) $< -o $@ # Target: clean project. clean: begin clean_list finished end clean_list : @echo @echo $(MSG_CLEANING) $(REMOVE) $(TARGET).hex $(REMOVE) $(TARGET).eep $(REMOVE) $(TARGET).obj $(REMOVE) $(TARGET).cof $(REMOVE) $(TARGET).elf $(REMOVE) $(TARGET).map $(REMOVE) $(TARGET).obj $(REMOVE) $(TARGET).a90 $(REMOVE) $(TARGET).sym $(REMOVE) $(TARGET).lnk $(REMOVE) $(TARGET).lss $(REMOVE) $(OBJ) $(REMOVE) $(LST) $(REMOVE) $(SRC:.c=.s) $(REMOVE) $(SRC:.c=.d) $(REMOVE) *~ # Automatically generate C source code dependencies. # (Code originally taken from the GNU make user manual and modified # (See README.txt Credits).) # # Note that this will work with sh (bash) and sed that is shipped with WinAVR # (see the SHELL variable defined above). # This may not work with other shells or other seds. # %.d: %.c set -e; $(CC) -MM $(ALL_CFLAGS) $< \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ [ -s $@ ] || rm -f $@ # Remove the '-' if you want to see the dependency files generated. -include $(SRC:.c=.d) # Listing of phony targets. .PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ clean clean_list program No entanto, obtenho os seguintes erros aquando executo o "make" no terminal: et -e; avr-gcc -MM -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.lst -std=gnu99 debounce.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > debounce.d; \ [ -s debounce.d ] || rm -f debounce.d -------- begin -------- avr-gcc (GCC) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling: debounce.c avr-gcc -c -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.lst -std=gnu99 debounce.c -o debounce.o Linking: debounce.elf avr-gcc -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.o -std=gnu99 debounce.o debounce.o --output debounce.elf -Wl,-Map=debounce.map,--cref,--warn-common -lm debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text+0x0): multiple definition of `get_key_press' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text+0x0): first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x0): multiple definition of `key_press' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x0): first defined here debounce.o: In function `timer_intr_setup': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:21: multiple definition of `timer_intr_setup' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:21: first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text.startup+0x0): multiple definition of `main' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text.startup+0x0): first defined here debounce.o: In function `__vector_16': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:39: multiple definition of `__vector_16' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:39: first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x1): multiple definition of `key_state' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x1): first defined here collect2: error: ld returned 1 exit status Makefile:314: recipe for target 'debounce.elf' failed make: *** [debounce.elf] Error 1 Mas com o seguinte Makefile, a compilação é feita sem erros: PRG = debounce OBJ = debounce.o MCU_TARGET = atmega328p OPTIMIZE = -Os DEFS = -std=c99 LIBS = # You should not have to change anything below here. CC = avr-gcc # Override is only needed by avr-lib build system. override CFLAGS = -g -Wall -Werror -Wno-comment $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) -DF_CPU=16000000UL override LDFLAGS = -Wl,-Map,$(PRG).map -Wl,--warn-common OBJCOPY = avr-objcopy OBJDUMP = avr-objdump all: $(PRG).elf lst text eeprom $(PRG).elf: $(OBJ) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) # dependency: debounce.o : debounce.c clean: rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak rm -rf *.lst *.map $(EXTRA_CLEAN_FILES) lst: $(PRG).lst %.lst: %.elf $(OBJDUMP) -h -S $< > $@ # Rules for building the .text rom images text: hex bin srec hex: $(PRG).hex bin: $(PRG).bin srec: $(PRG).srec %.hex: %.elf $(OBJCOPY) -j .text -j .data -O ihex $< $@ %.srec: %.elf $(OBJCOPY) -j .text -j .data -O srec $< $@ %.bin: %.elf $(OBJCOPY) -j .text -j .data -O binary $< $@ # Rules for building the .eeprom rom images eeprom: ehex ebin esrec ehex: $(PRG)_eeprom.hex ebin: $(PRG)_eeprom.bin esrec: $(PRG)_eeprom.srec %_eeprom.hex: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ \ || { echo empty $@ not generated; exit 0; } %_eeprom.srec: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@ \ || { echo empty $@ not generated; exit 0; } %_eeprom.bin: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@ \ || { echo empty $@ not generated; exit 0; } # Every thing below here is used by avr-libc's build system and can be ignored # by the casual user. FIG2DEV = fig2dev EXTRA_CLEAN_FILES = *.hex *.bin *.srec dox: eps png pdf eps: $(PRG).eps png: $(PRG).png pdf: $(PRG).pdf %.eps: %.fig $(FIG2DEV) -L eps $< $@ %.pdf: %.fig $(FIG2DEV) -L pdf $< $@ %.png: %.fig $(FIG2DEV) -L png $< $@ Queria tentar perceber onde está o problema.
  12. Oliveira Cesar

    Agenda

    Boa Noite!!! Estou com um trabalho de faculdade para fazer! Mais estou com algumas duvidas! 1 - tem que ter limite de 5 clientes cadastrados, e aparecer agenda lotada 2 - Quando não tem clientes tem que mostrar " agenda vazia" 3 - clicando um numero que não tem no menu mostrar a mensagem de erro e retornar ao menu. Estou com este codigo em C só que está dando erro na linha 71! #include <stdio.h> #include <stdlib.h> #include <string.h> //Cada contato possui um nome, telefone e email. struct Contato{ char nome[100]; int telefone; char email; }; int main(){ //Ponteiro para estrutura. Vai ser o nosso vetor de //estruturas dinamicas com os dados da agenda. struct Contato *agenda; int cap; //Capacidade do vetor (tamanho real do vetor). int n; //Numero de contatos cadastrados (tamanho usado). int opc; //Opcao do menu selecionada. int i; FILE *fp; //Abrindo arquivo em modo de leitura ("r" = read). fp = fopen("agenda.dat","r"); //Se retorna NULL eh pq nao encontrou o arquivo. //Isso acontece na primeira vez que rodamos o programa. if(fp==NULL){ n = 0; //Base de dados inicialmente vazia. cap = 20; //Fixamos uma capacidade inicial (ex: 20). //Alocammos o vetor de estruturas de forma //dinamica conforme a capacidade. agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap); } else{ //Arquivo encontrado, logo procedemos com a leitura. //Le o numero de registros. fread(&n, sizeof(int), 1, fp); //A capacidade deve ser maior ou igual a "n" (ex: n*2). cap = n*2; //Alocammos o vetor de estruturas de forma //dinamica conforme a capacidade. agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap); //Leitura dos dados dos registros do arquivo para o vetor. fread(agenda, sizeof(struct Contato), n, fp); //Fecha arquivo apos leitura. fclose(fp); } do{ //Exibe o menu de opcoes. printf("*** Menu ***\n"); printf("1) Cadastrar contato.\n"); printf("2) Exibir contatos.\n"); printf("3) Apagar.\n"); printf("4) Sair.\n"); //Le a opcao selecionada. scanf("%d",&opc); if(opc==1){ //Inserir novo contato no final do vetor. if(n==cap){ //Capacidade esgotada, devemos aumentar o //vetor usando "realloc" (ex: dobrar capacidade). cap *= 2; agenda = realloc(agenda, sizeof(struct Contato)*cap); } //Leitura dos dados. printf("Digite o nome: "); scanf(" %[^\n]",agenda[n].nome); printf("Digite o telefone: "); scanf("%d",&agenda[n].telefone); n++; //Incrementa numero de registros cadastrados. } else if(opc==2){ //Exibe todos contatos cadastrados. for(i=0; i<n; i++){ printf("*** Contato %d ***\n",i+1); printf("Nome: %s\n",agenda.nome); printf("Telefone: %d\n",agenda.telefone); } } else if(opc==3){ //Apaga um contato char nome[100]; int j; scanf("%s",&nome); for(i=0; i<n; i++){ if (strcmp(agenda.nome, nome)==0){ for(j=i+1; j<n; j++){ strcpy(agenda[j-1].nome,agenda[j].nome); agenda[j-1].telefone=agenda[j].telefone; } n--; i=n; } } } //Enquanto nao for opcao de saida continua mostrando menu. }while(opc!=4); if(n>0){ //Se existe algum contato cadastrado //entao grava para o disco. //Abre arquivo em modo de gravacao ("w" = write). fp = fopen("agenda.dat","w"); //Grava o numero de contatos no inicio do arquivo. fwrite(&n, sizeof(int), 1, fp); //Grava os dados do vetor no arquivo. fwrite(agenda, sizeof(struct Contato), n, fp); //Fecha arquivo apos a gravacao. fclose(fp); } //Libera a memoria alocada do vetor. free(agenda); return 0; }
  13. Bem, o programa que eu tenho de fazer consiste na lancamento de um dado para se determinar a categoria da pergunta. A minha duvida é se deveria criar uma estrutura para a categoria ou se simplesmente basta colocar na estrutura da pergunta o numero da categoria e depois comparar com o valor do dado?
  14. riqu3s

    Copiar dados de ficheiro bin para txt

    Boas pessoal, Tenho de fazer uma função que copie, de um ficheiro binário para um de texto, os "id's" de vários clientes correspondentes à venda de bilhetes de uma determinada sessão de cinema. Ainda não criei código, mas pensei em 2 formas de fazer: 1. Abrir o ficheiro binário, copiar 1 a um 1, colocar num vetor de inteiros e de seguida colocá-lo no ficheiro de texto. 2. Manter os 2 ficheiros abertos (não sei se é possível) e copiar os "id's" diretamente para o ficheiro de texto. Se puderem ajudar a escolher qual das técnicas é mais eficaz Obrigado
  15. miguel__1

    Apagar linha de ficheiro txt

    Boas, estou com um problema que não estou a conseguir resolver. Sem nada anteriomente definido e apenas recebendo o ficheiro e o nome a remover tenho que eliminar toda essa linha do ficheiro txt. Como poderia resolver? O Ficheiro é o seguinte: Comfortably Numb;Pink Floyd;6:53;1979 Money For Nothing;Dire Straits;4:59;1985 By The Way;Red Hot Chili Peppers;3:37;2002 The Pretender;Foo Fighters;4:30;2007 Kashmir;Led Zeppelin;8:31;1975 Desde já obrigado.
  16. Olá construí este código em arvore binária mas, está dando erro , apenas preciso fazê-lo apresentar um resultado, que é o numeral 20. alguém poderia me ajudar. #include <stdio.h> <typedef struct arv Arv;> struct arv { char op; float valor; <struct arv *esq, *dir;> }; // Implementar esta função <float avalia (Arv *a)> { <if ((a->esq == NULL) && (a->dir == NULL))> return a->valor; else{> < if(a->op == ‘+’) return avalia(a->esq) + avalia(a->dir)> < if(a->op == ‘-’) return avalia(a->esq) - avalia(a->dir)> < if(a->op == ‘*’) return avalia(a->esq) * avalia(a->dir)> < if(a->op == ‘/’) return avalia(a->esq) / avalia(a->dir)> } } <int main(void)> { < // Árvore para representar a operação: 5 * 3= 15> Arv no[3]; // Em vetor Arv op, val1, val2; // Em variáveis // Vetor no[0].op = '*'; no[0].esq = &no[1]; no[0].dir = &no[2]; no[1].valor = 5; no[2].valor = 3; < printf("Resultado da expressao: %.2f\n", avalia(&no[0]));> // Variáveis op.op = '*'; op.esq = &val1; op.dir = &val2; val1.valor = 5; val2.valor = 3; < printf("Resultado da expressao: %.2f\n", avalia(&op));> }
  17. Luís Barbas

    Cliente/Servidor

    Tenho uma ligaçao cliente/servidor que funciona localmente mas tou com umas dúvidas que não consigo resolver. O programa aceita me vários cliente de uma vez mas não permite fazer as operações em todos eles. E gostaria que a ligação inicializa-se com o start e terminasse com um end. É possível ajudarem-me ? o código é o seguinte: ///////////////Servidor//////////////////// #include<stdio.h> #include<netinet/in.h> #include<sys/types.h> #include<sys/socket.h> #include<netdb.h> #include<stdlib.h> #include<string.h> #define MAX 80 #define SA struct sockaddr //const int MAX_USERS = 5; void error(char *msg) //função para mostar erros { perror(msg); exit(1); } void calculate(int sockfd) //funçao da calculadora { char buff[MAX]; int n; for(;;) { bzero(buff,MAX); //desocupa o buffer read(sockfd,buff,sizeof(buff)); //reading data from socket printf("Expressão do cliente: %s \n ",buff); static int i,size1=1,size2=1,opp; char *op1,*op2; op1=malloc(size1); op2=malloc(size1); for(i=0;i<strlen(buff);i++) { if(buff!='*' & buff!='/' & buff!='+' & buff!='-') { op1=(char)buff; size1++; op1=realloc(op1,size1); } else { int j,s=0; opp=i; for(j=i+1;j<strlen(buff);j++) { op2=(char)buff[j]; size2++; op1=realloc(op1,size2); s++; } break; } } int opr1,opr2,result; opr1=atoi(op1); //converte a string para o inteiro opr2=atoi(op2); if(buff[opp]=='*') { result=opr1*opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); printf("Resultado: %s",buff); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor : %s\n : ",buff); } else if(buff[opp]=='/') { result=opr1/opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor .Resultado : %s :\n ",buff); } else if(buff[opp]=='+') { result=opr1+opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor .Resultado : %s : \n",buff); } else if(buff[opp]=='-') { result=opr1-opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor .Resultado : %s : \n",buff); } else { write(sockfd,"Expressão invalida.Tente outra vez\n",29); } if(strncmp("exit",buff,4)==0) { printf("Server Exit...\n"); break; } } } int main(int argc,char *argv[]) { int sockfd,connfd,len,pid; struct sockaddr_in servaddr,cli; sockfd=socket(AF_LOCAL,SOCK_STREAM,0); //criação do socket if(sockfd==-1) { printf("socket creation failed...\n"); exit(0); } else printf("Socket successfully created..\n"); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_LOCAL; if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0) // conecta o endereço com o socket { printf("socket bind failed...\n"); exit(0); } else printf("Socket successfully binded..\n"); if((listen(sockfd,5))!=0) //socket esta pronto para receber qualquer cliente novo { printf("Listen failed...\n"); exit(0); } else printf("Server listening..\n"); len=sizeof(cli); for(;;) { connfd=accept(sockfd,(SA *)&cli,&len);//socket vai aceitar qualquer cliente novo if(connfd<0) { printf("server acccept failed...\n"); exit(0); } else printf("server acccept the client...\n"); if((pid==fork())==0) calculate(connfd); else close (connfd); } close(sockfd);//fecha o socket criado } ////////////////////////Cliente/////////////////////// #include<stdio.h> #include<netinet/in.h> #include<sys/types.h> #include<sys/socket.h> #include<netdb.h> #include<string.h> #include<stdlib.h> #define MAX 80 #define SA struct sockaddr void error(char *msg) { perror(msg); exit(1); } void calcy(int sockfd) { char buff[MAX]; int n; for(;;) { bzero(buff,sizeof(buff)); printf("\nIntroduza a expressão: "); n=0; while((buff[n++]=getchar())!='\n'); write(sockfd,buff,sizeof(buff)); //utilizador escreve a expressão no socket bzero(buff,sizeof(buff));//desocupa o buffer read(sockfd,buff,sizeof(buff));//le resultado do socket printf("Resultado: %s ",buff); if((strncmp(buff,"exit",4))==0) { printf("Client Exit...\n"); break; } } } int main(int argc,char *argv[]) { int sockfd; struct sockaddr_in servaddr,cli; sockfd=socket(AF_LOCAL,SOCK_STREAM,0); //cria o socket if(sockfd==-1) { printf("socket creation failed...\n"); exit(0); } else printf("Socket successfully created..\n"); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_LOCAL;//socket LOCAL (connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0);//conexão ao servidor calcy(sockfd);//chama a funçao da calculadora printf("connected to the server..\n"); close(sockfd);//fecha o socket }
  18. PsySc0rpi0n

    Lei Quadrática do Excel em C

    Boas pessoal. Por curiosidade apenas, alguém sabe como implementar o método que o Excel usa para calcular a equação de uma Linha de Tendência de uma curva pela Lei Quadrática? Muito por alto o que o Excel faz é uso das seguintes funções: 2nd Order Polynomial Trendline Equation: y = (c2 * x^2) + (c1 * x ^1) + b c2: =INDEX(LINEST(y,x^{1,2}),1) C1: =INDEX(LINEST(y,x^{1,2}),1,2) b: =INDEX(LINEST(y,x^{1,2}),1,3) Lendo a descrição das funções INDEX e LINEST, respectivamente, dizem: INDEX - returns the value of an element in a table or an array, selected by the row and column number indexes LINEST - returns statistics that describe a linear trend matching known data points, by fitting a straight line using the least squares method.
  19. joanacs

    Imprimir informação de uma lista ligada

    Boa tarde! Estou a desenvolver um programa em C onde tenho de fazer a listagem de todos os clientes existentes numa lista ligada. Inicialmente li todos os clientes de um ficheiro de texto para a lista ligada só que quando vou a imprimir na consola, o programa só estou a imprimir a última data guardada no ficheiro. Se me puderem ajudar, agradecia! - Ficheiro .txt: 123456789 0 Paulo Silva 555666777 2 Marta Nunes Cabral 4 1 12 12 2017 17 12 2017 5 0 20 04 2018 123123123 3 Maria Pimentel 5 2 01 10 2017 10 10 2017 5 1 13 01 2018 15 01 2018 4 0 17 04 2018 111111111 1 Raquel Marques 3 0 26 05 2018 28 05 2018 - Output: CLIENTES: 123456789 0 Paulo Silva 555666777 2 Marta Nunes Cabral 5 0 20/4/2018 17/12/2017 5 0 20/4/2018 17/12/2017 123123123 3 Maria Pimentel 4 0 17/4/2018 15/1/2018 4 0 17/4/2018 15/1/2018 4 0 17/4/2018 15/1/2018 111111111 1 Raquel Marques 3 0 26/25/2018 15/1/2018 struct data_inicio {int dia, mes, ano;}; struct data_entrega {int dia, mes, ano;}; typedef struct aluguer alu, *p_aluguer; struct aluguer { int idGuitarra; int estado_aluguer; int n_alugueres; struct data_inicio d_i; struct data_entrega d_e; p_aluguer prox; }; typedef struct cliente cli, *p_cliente; struct cliente{ int nif; char nomeCliente[ST_TAM]; struct aluguer a; p_cliente prox; }; /*- CRIAÇÃO DA LISTA LIGADA CLIENTES ----------------------------------------------*/ p_cliente criaLista(char *nomefich){ p_cliente lista = NULL, novo, aux = lista; cli c; FILE *f; f = fopen(nomefich,"rt"); if(f == NULL){ printf("Erro no acesso ao ficheiro.\n"); return NULL; } c.prox = NULL; while(fscanf(f, "%d %d %49[^\n]", &c.nif , &c.a.n_alugueres, c.nomeCliente) == 3){ for(int i = 0; i < c.a.n_alugueres; i++){ fscanf(f, "%d %d %d %d %d", &c.a.idGuitarra, &c.a.estado_aluguer, &c.a.d_i.dia, &c.a.d_i.mes, &c.a.d_i.ano); if(fgetc(f) != '\n'){ fscanf(f, "%d %d %d\n", &c.a.d_e.dia, &c.a.d_e.mes, &c.a.d_e.ano); } } novo = malloc(sizeof(cli)); if(novo == NULL){ printf("Erro na alocaçao de memoria.\n"); fclose(f); return lista; } *novo = c; if(!lista) lista=novo; else aux->prox=novo; aux=novo; } return lista; } /*- LISTAGEM DE TODOS OS CLIENTES ATIVOS ------------------------------------------*/ void mostraClientes(p_cliente c){ printf("\n\nCLIENTES:\n\n"); while(c != NULL){ printf("%d %d %s\n", c->nif, c->a.n_alugueres, c->nomeCliente); for(int i = 0; i < c->a.n_alugueres; i++){ printf("%d %d %d/%d/%d ", c->a.idGuitarra, c->a.estado_aluguer, c->a.d_i.dia, c->a.d_i.mes, c->a.d_i.ano); printf("%d/%d/%d\n", c->a.d_e.dia, c->a.d_e.mes, c->a.d_e.ano); //c = c->prox; } c = c->prox; } }
  20. riqu3s

    Listar a partir de ficheiro txt

    Boas pessoal, no programa que estou a tentar fazer já consigo registar um cliente e escrever os dados num ficheiro de texto, mas quando tenciono listar todos os clientes ou algum específico através do NIF, dá um erro e não apresenta nada do que é suposto... se alguém me puder ajudar #include <stdio.h> #include <stdlib.h> #include <string.h> // biblioteca de funções de strings #include <ctype.h> // para usar o toupper() #include "structs.h" // ficheiro onde estão as structs typedef struct { char nome[50], sexo[30], username[30]; int idade, nif, id; } CLIENTE; void syst() { // função para parar o sistema system("pause"); system("cls"); } FILE* abrir_ficheiro(char caminho[], char modo) { // função para abrir o ficheiro de texto FILE *file; switch (toupper(modo)) { // coloca o modo em letras maiusculas case 'W': file = fopen(caminho, "w"); // w - write break; case 'R': file = fopen(caminho, "r"); // r - read break; case 'A': file = fopen(caminho, "a"); // a - append break; } if (file == NULL) { puts("Falha na abertura do ficheiro!"); exit(0); } return file; } void guardar_ficheiro(CLIENTE cliente) { // função para guardar dados no ficheiro FILE *file; file = abrir_ficheiro("clientes.txt", 'a'); // abre o ficheiro para acrescentar fprintf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // escreve no ficheiro o nome, idade, sexo e nif fclose(file); printf("Registo efetuado com sucesso!\n"); syst(); } void mostrar() { // função para mostrar um cliente específico CLIENTE cliente; FILE *file; file = abrir_ficheiro("clientes.txt", 'r'); while (!feof(file)) { //enquanto não chegar ao fim do ficheiro fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // lê do ficheiro o nome, idade, sexo e nif printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); } fclose(file); syst(); } void mostrar_especifico() { CLIENTE cliente; FILE *file; char username[30]; int opcao, verif_nif, cont = 0; printf("Informe o NIF do cliente: "); fflush(stdin); scanf(" %d", &verif_nif); file = abrir_ficheiro("clientes.txt", 'r'); while(!feof(file)) { fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); if(cliente.nif == verif_nif) { printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); cont++; } } fclose(file); if(cont == 0); printf("\nO NIF informado nao esta registado"); syst(); } int menu() { int opcao; do { puts("MENU: "); puts("1 - REGISTAR CLIENTE"); puts("2 - LISTAR TODOS OS CLIENTES"); puts("3 - LISTAR CLIENTE ESPECIFICO"); puts("0 - SAIR"); printf("OPCAO: "); scanf("%d", &opcao); if (opcao < 0 || opcao > 3) { puts("\nOPCAO INVALIDA, TENTE NOVAMENTE!"); syst(); } } while (opcao < 0 || opcao > 3); system("cls"); return opcao; } void registar(CLIENTE *cliente) { int opcao; do { printf("NOME: "); fflush(stdin); gets(cliente->nome); do { printf("SEXO: [1] - Masculino\t[2] - Feminino\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 1) { strcpy(cliente->sexo, "Masculino"); } else { if (opcao == 2) { strcpy(cliente->sexo, "Feminino"); } else { printf("Opcao Invalida!\n"); } } } while (opcao != 1 && opcao != 2); printf("Idade: "); scanf("%d", &cliente->idade); fflush(stdin); printf("NIF: "); scanf("%d", &cliente->nif); printf("\nConfirma todas as informacoes?\n[1] Sim\t[2] Nao\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 2) syst(); }while(opcao != 1); syst(); } void main() { CLIENTE cliente; while(1) { switch(menu()) { case 1: registar(&cliente); guardar_ficheiro(cliente); break; case 2: mostrar(); break; case 3: mostrar_especifico(); break; default: puts("Finalizando o programa..."); exit(0); } } }
  21. Florindo

    Ciclo infinito

    #include <stdio.h> #include <stdlib.h> #include "lab.h" #include <time.h> /*int repetido(int a,int b); for(i=0;i<=13){ if(V) } */ // char *V[13] = {"2","3","4","5","6","7","8","9","10","A","R","V","D"}; int repetido(int a, int b){ int i,j; char *V[13] = {"2","3","4","5","6","7","8","9","10","A","R","V","D"}; char N[4] = {'\3','\4','\5','\6'}; char VR[13]; char NR[4]; for(i=0;i<13;i++){ for(j=0;j<4;j++){ if(VR==V[a] && NR[j]==N){ a=rand()%13; b=rand()%4; } else{ VR[i+1]==V[a]; NR[j+1]==N[a]; } } } } int pontuacao(int a1,int total){ switch(a1){ case 0: total=total+2; break; case 1: total=total+3; break; case 2: total=total+4; break; case 3: total=total+5; break; case 4: total=total+6; break; case 5: total=total+7; break; case 6: total=total+8; break; case 7: total=total+9; break; case 8: total=total+10; break; case 9: if(total+11>21){ total=total+11; } else{ total=total+1; } break; case 10: total=total+10; break; case 11: total=total+10; break; case 12: total=total+10; break; } } int pontuacaocasa(int a1,int total){ switch(a1){ case 0: total=total+2; break; case 1: total=total+3; break; case 2: total=total+4; break; case 3: total=total+5; break; case 4: total=total+6; break; case 5: total=total+7; break; case 6: total=total+8; break; case 7: total=total+9; break; case 8: total=total+10; break; case 9: if(total+11<21){ total=total+11; } else{ total=total+1; } break; case 10: total=total+10; break; case 11: total=total+10; break; case 12: total=total+10; break; } return total; } int sorteiov(int respostav){ respostav = rand()%13; return respostav; } int sorteion(int respostan){ respostan = rand()%4; return respostan; } void desenhacarta(int x, int y,char* valor, char naipe){ DrawRect(x,y,6,6); setxy(x,y); setxy(x+1,y+1); printf("%s",valor); setxy(x+4,y+5); printf("%s",valor); setxy(x+3,y+3); printf("%c",naipe); } void desenhacartacasa(int x, int y,char* valor, char naipe){ DrawRect(x,y,6,6); } void resultado1(int total,int totalcasa){ if(total > 21){ printf("Perdeu o jogo!"); } if(total > totalcasa && total <=21 ){ printf("Ganhou o jogo!"); } if(total == totalcasa && total <=21 && totalcasa <=21){ printf("Perdeu o jogo!"); } if(total < totalcasa && total <=21 && totalcasa <=21){ printf("Perdeu o jogo!"); } } void main(void){ int inicial=0, njogadores,aposta,a,b,vontade1,primeirajogada,segundajogada,totaljogada,i=2,total,vontade2,tj,tc,gv,gn,t; int a1,a2,a3,a4,aa1,aa2,aa3,aa4,b1,b2,b3,b4,bb1,bb2,bb3,bb4; int totall,totalcasa; char *V[13] = {"2","3","4","5","6","7","8","9","10","A","R","V","D"}; char N[4] = {'\3','\4','\5','\6'}; srand(time(NULL)); do{ printf("Pressione 1 para comecar o jogo ou 0 para sair!\n"); scanf(" %d",&inicial); }while(inicial != 0 && inicial!= 1); if(inicial == 0){ printf("Saiu do jogo!"); exit(0); } if(inicial == 1){ } printf("Quantos jogadores tera a partida? (Selecione entre 1-4)\n"); scanf(" %d",&njogadores); switch(njogadores){ case 1: printf("Ira jogar contra a casa!\n"); printf("Qual sera o valor da sua aposta inicial?\n"); scanf(" %d",&aposta); while(aposta <1){ printf("Qual sera o valor da sua aposta inicial?\n"); scanf(" %d",&aposta); } system("cls"); desenhacarta(0,0,V[ sorteiov(a1)],N[sorteion(a1)]); //jogador pontuacao(a1,totall); desenhacarta(0,9,V[sorteiov(a1)],N[sorteion(a1)]); //casa pontuacao(a1,totalcasa); desenhacarta(7,0,V[sorteiov(a1)],N[sorteion(a1)]); //jogador 2 pontuacao(a1,totall); desenhacarta(7,9,V[sorteiov(a1)],N[sorteion(a1)]);//casa2 pontuacaocasa(a1,totalcasa); t=1; do{ t=t+1; setxy(0,20); printf("\n\n\n\n\n\n\n\n\n\n\n Deseja pedir outra carta(1) ou parar por aqui?(0)"); scanf(" %d",&vontade2); pontuacao(a1,totall); }while(vontade2 == 1 && totall<21); do{ desenhacarta(t*7,9,V[sorteiov(a1)],N[sorteion(a1)]); //carta da casa pontuacao(a1,totalcasa); t=t+1; }while(totalcasa<17); //contar os pontos, para verificar se ganhou ou se perdeu setxy(0,22); resultado1(total,totalcasa); }} Não consigo perceber o porquê de isto a partir de um certo ponto quando está a correr entrar num loop infinito ... Se me puderem ajudar , agradeço Cumps ! Em anexo vai a biblioteca necessária para correr o código
  22. Carlos Valente

    Estrutura de Dados indicada para este problema ?

    Boa noite , eu necessito de uma estrutura de dados para guardar e aceder a palavras de tamanho 5 (são 100 palavras) . Sendo que nenhuma destas palavras é igual . Qual é a melhor estrutura de dados para tal , tendo em conta a complexidade ? Eu pensei em hash table , mas não consigo encontrar um hash code que me de indexações de 0 a 100 .
  23. riqu3s

    Guardar dados em ficheiro txt

    Boas pessoal, estou a tentar criar uma função que guarde os dados de um cliente (neste momento apenas o nome), mas sempre que executo o programa os dados ficam guardados em binário. se me poderem ajudar a descobrir onde estou a errar... deixo a função que fiz em baixo void registar_cliente() { FILE *arq_clientes = fopen("clientes.txt", "w"); if (arq_clientes == NULL) { printf("\nErro ao abrir o ficheiro!\n"); exit(1); // aborta o programa } int cont_bytes = 0; //o ID do cliente deve ser gerado automaticamente // cont irá guardar o número total de bytes fseek(arq_clientes, 0, SEEK_END); // o ponteiro aponta para o final do ficheiro cont_bytes = ftell(arq_clientes); // ftell devolve a posiçao atual em bytes t_cliente cliente; if(cont_bytes == 0) { cliente.id = 1; } else { t_cliente ultimo_cliente; fseek(arq_clientes, cont_bytes - sizeof (t_cliente), SEEK_SET); //cont_bytes - sizeof(t_cliente) serve para posicionar // para que possamos chegar ao último cliente registado fread(&ultimo_cliente, sizeof (t_cliente), 1, arq_clientes); cliente.id = ultimo_cliente.id + 1; // o ID do cliente é o ID do último cliente acrescido em 1 } printf("\nDigite o nome do cliente: "); scanf("%99[^\n]%*c", cliente.nome); // ^\n indica para pegar até a quebra de linha (enter) fflush(stdin); fseek(arq_clientes, 0, SEEK_END); fwrite(&cliente, sizeof (t_cliente), 1, arq_clientes); // escreve no arquivo fclose(arq_clientes); printf("\nCliente \"%s\" cadastrado com sucesso!\n", cliente.nome); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); fflush(stdin); }
  24. Boas pessoal, tenho um trabalho que consiste em fazer um programa de gestão de uma loja. Neste momento ainda estou a fazer (ou a tentar) o registo de um novo cliente. Já criei uma parte do código, mas estou com problemas quando insiro o NIF. O nome fica guardado na váriavel que criei mas o NIF apresenta um número diferente daquele que é digitado, talvez um numero que esteja guardado na memória. Se me puderem ajudar a resolver este problema, agradecia. P.S. Inseri o código que já fiz mas o problema em si está na ultima função ("obtem_info()") Obrigado #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct dados { char nome[50]; int nif; int n_alugueres; } cliente; void menuPrincipal(); void registarCliente(); cliente obtem_info(); int opcao; int main(int argc, char** argv) { printf("Bem Vindo ao Guitarras P'Alugar!!!\n"); menuPrincipal(); return (EXIT_SUCCESS); } void menuPrincipal() //falta implementar funçoes { cliente loja[MAX]; int total = 0; do { printf("\n\nMENU PRINCIPAL\n\n"); printf("1 - Registar Cliente\n"); printf("2 - Excluir Cliente\n"); printf("3 - Listar Clientes Ativos\n"); printf("4 - Listar Clientes Banidos\n"); printf("5 - Sair\n\n"); printf("Opcao: "); scanf("%d", &opcao); switch (opcao) { case 1: fflush(stdin); system("cls"); registarCliente(loja,&total); break; case 2: fflush(stdin); system("cls"); //excluirCliente(loja,&total); break; case 3: fflush(stdin); system("cls"); //listarAtivos(); break; case 4: fflush(stdin); system("cls"); //listarBanidos(); break; } }while(opcao != 5); printf("\nObrigado e Ate Breve!\n"); } void registarCliente(cliente tab[], int* n) { printf("Atualmente a loja possui %d clientes\n\n",*n); if (*n >= MAX) { printf("Loja cheia!"); } else { tab[*n] = obtem_info(); (*n)++; } } cliente obtem_info() { cliente t; printf("Nome: "); scanf("%s", t.nome); printf("\nNIF: "); scanf("%d",t.nif); //É AQUI QUE ESTÁ O PROBLEMA printf("Nome Introduzido: %s\n",t.nome); printf("NIF Introduzido: %d",&(t.nif)); return t; }
  25. figboy

    Erro ao repetir função

    Boa tarde a todos. Estou a fazer uma função em que para aceitar um utilizador copio a informação desse utilizador de um ficheiro para outro e queria fazer isso por blocos, ou seja, vejo a informação de um utilizador e respondo se quero aceitar ou não, e repito isto até não ter mais utilizadores. Mas quando vou ver a informação do segundo utilizador acontece alguma estranha que não estou a perceber o que é. Vou coloacar o link para a execução do programa, depois de imprimir a informação do segundo utilizador não sei o que acontece. http://i1044.photobucket.com/albums/b446/figboy98/erro_zpsbsuy9d9f.png Se alguém conseguir ajudar fico muito grato void main(){ int j=0; char opcao; FILE *pedidos; pedidos=fopen("../Projeto/Login/Users/pedidos", "r"); char leitor[100000]; while(k!=1){ //listar o primeiro pedido de novo registo for(int i=0; i<5; i++){ fgets(leitor,10000,pedidos); printf("%s", leitor); } printf("Pretende autorizar o registo deste utilizador? (y/n):"); scanf("%c", &opcao); switch(opcao){ case 'y': aceitarUtilizadores(); break; case 'n': //rejeitarUtilizador(); break; } } } int aceitarUtilizadores(){ char leitor[100]; FILE*ativos, *pedidos, *temp; pedidos=fopen("../Projeto/Login/Users/pedidos", "r"); ativos=fopen("../Projeto/Login/Users/UserData", "a"); temp=fopen("../Projeto/Login/Users/temp", "w"); for(int i=0; i<5;i++){ //escreve os dados do utilizador para o ficheiro de UserData fgets(leitor,100,pedidos); fputs(leitor,ativos); } while((fgets(leitor,100,pedidos))!=NULL){ //escreve os restantes pedidos para um ficheiro temporario fputs(leitor,temp); } fclose(pedidos); fclose(ativos); fclose(temp); temp=fopen("../Projeto/Login/Users/temp","r"); pedidos=fopen("../Projeto/Login/Users/pedidos","w"); //abre o ficheiro dos pedidos apagando o seu conteudo while((fgets(leitor,100,temp))!=NULL){ //copia os pedidos que faltam ser analisados para o ficheiro de pedidos fputs(leitor,pedidos); } remove("../Projeto/Login/Users/temp"); fclose(pedidos); pedidos=fopen("../Projeto/Login/Users/pedidos", "r"); rewind(pedidos); if((fgets(leitor,100,pedidos))==NULL){ fclose(pedidos); return k=1; } fclose(pedidos); }
×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.