Jump to content

Search the Community

Showing results for tags 'c'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • 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
    • 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
    • Matemática
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • 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

Categories

  • 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

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Found 4,983 results

  1. matheus

    String em C

    Boa noite amigos, estou com duvida em uma questao da faculdade e nao consigo solucionar. 9) Escrever um programa em C que calcule e imprima o número de caracteres distintos presentes em uma cadeia de caracteres dada. Considerar o tamanho máximo da cadeia como sendo de 80 colunas. #include <stdio.h> #include <stdlib.h> #include <string.h> #define n 64 int main (void) { char nome[n]; int i,j,count=0; printf("\nDigite uma frase: "); fgets(nome, 64, stdin); //stdin = leitura está sendo feita do teclado. for(i=0;i<strlen(nome) != '\0';i++) { count++; } printf("\nA frase digitada foi: %s ", nome); printf("\nA quantida de letras foi de: %d", count); return 0; } Estava tentando ler a string sem contar com os espaços, porem nao consigo. Se alguem conseguir me ajudar nesta questao, ficarei grato.
  2. RVicente

    Geração do executável (ELF) em CMake

    Olá a todos, Estou a construir uma Toolchain para cross-compiling num ARM Cortex-M4 através do CMake, usango o gcc-arm-none-eabi. Defini o ficheiro da Toolchain com os respetivos caminhos para os compiladores, e com as flags do compilador. #--------------------------------------------------------------------------------------------------------------------- # Targets #--------------------------------------------------------------------------------------------------------------------- set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR ARM) # set(CMAKE_SYSTEM_VERSION ) #--------------------------------------------------------------------------------------------------------------------- # Set compilers #--------------------------------------------------------------------------------------------------------------------- set(CMAKE_C_COMPILER ${ARM_GCC}) set(CMAKE_CXX_COMPILER ${ARM_G++}) set(CMAKE_ASM_COMPILER ${ARM_AS}) set(CMAKE_AR ${ARM_AR}) (...) set(CMAKE_C_FLAGS_INIT "-O0 -g0 \ -mcpu=cortex-m4 \ -mthumb \ -mabi=aapcs \ -Wall \ -Wextra \ -mfloat-abi=hard \ -mfpu=fpv4-sp-d16 \ -ffunction-sections \ -fdata-sections \ -fno-strict-aliasing \ -fno-builtin \ -fshort-enums" ) set(CMAKE_ASM_FLAGS "-g0 \ -mcpu=cortex-m4 \ -mthumb \ -mabi=aapcs \ -mfloat-abi=hard \ -mfpu=fpv4-sp-d16" ) set(CMAKE_EXE_LINKER_FLAGS_INIT "-O0 -g0 \ -mcpu=cortex-m4 \ -mthumb \ -mabi=aapcs \ -mfloat-abi=hard \ -mfpu=fpv4-sp-d16 \ -Wl,--gc-sections \ --specs=nano.specs \ --specs=nosys.specs" ) No ficheiro CMakeLists.txt tenho mais algumas definições para o compilador, e o caminho para o Linker Script, uma biblioteca construida a partir do SDK e depois o processo de linkagem: (...) add_executable(main main.c) target_link_libraries(main sdk_lib) add_custom_command( TARGET main POST_BUILD COMMAND ${ARM_OBJCOPY} -O ihex ${CMAKE_CURRENT_BINARY_DIR}/main ${CMAKE_SOURCE_DIR}/main.hex ) O Custom Command gera o .hex a partir do .elf gerado no add_executable(). Aparentemente está tudo a funcionar, mas quando analiso o .hex percebi que praticamente não tem informação. Depois de alguma pesquisa percebi que o próprio .elf não tem o conteúdo que é suposto e começo a desconfiar de um possível problema. Uma vez que no processo de compilação em sistemas embebidos, os ficheiros objecto são gerados e depois linkados para construir um ficheiro final que pode ser corrido no dispositivo, desconfio que o linker não estará a ser chamado, pois os ficheiros objecto para cada source está a ser gerado. Reparei também que na compilação, o compilador que é chamado é o expectável /opt/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gcc mas o linker assume um caminho estranho, que o CMake encontrou por algum motivo /opt/gcc-arm-none-eabi-8-2019-q3-update/bin/../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/bin/ld Naturalmente este pertence à pasta da toolchain do GCC, mas deixa-me sem saber se este funciona de igual modo ao presente na outra pasta. Resumindo a minha questão, alguém consegue ter uma ideia do que poderá estar a acontecer quando ao ficheiro .elf não conter a informação correcta, e também esta questão do Linker? Obrigado. (Link para o GitHub, embora já tenha feito pequenas alterações/experiências https://github.com/NunoRVicente/cmake-arm-toolchain)
  3. Lucivaldo Barbosa

    Programa dando resposta errada

    Este programa deveria mostrar os juros até que fosse inserido um capital igual a -1 mas n é isso que acontece, pq? #include <stdio.h> #include <locale.h> int main(){ setlocale(LC_ALL, ""); int dias; float taxa, capital, juros; printf("Esse programa recebe capital, taxa de juros, prazo e mostra o valor dos juros\n\n"); while(capital != -1){ juros = capital * taxa * dias / 365; printf("Insira o valor do capital (-1 para finalizar):\n"); scanf("%f", &capital); printf("\nInsira a taxa de juros no formato .xx:\n"); scanf("%f", &taxa); printf("\nInsira o prazo em dias:\n"); scanf("%d", &dias); printf("\nO juros é: %.1f\n", juros); } return 0; }
  4. bloodasp3

    Fazer um programa em linguagem C

    Boas pessoal, já há uns tempos que ando para fazer um trabalho e não consigo pois estou com alguns problemas, vou deixar aqui os exercicios, se me puderem ajudas agradeço, deixo aqui também como está o meu programa para ver se me conseguem resolver isto, agradeço, obrigado. Elaborar um programa de faturação para o mini mercado do Sr. Manel. O neto do Sr. Manel, o João, quer ajudar o avô na adaptação do mini mercado às novas exigências fiscais. Para tal o João necessita de um Software para auxílio na faturação do mini mercado. As características fundamentais do software são: - Criação de Vendas – Criação de vendas é um dos elementos principais do software do Sr. Manel, esta venda tem de ter como características principais: o Os dados do Cliente – Nome, Morada, NIF, entre outros. O Artigo que foi vendido – Código do Artigo, Quantidade, Preço Unitário, Preço Total, entre outros. o Genericamente para a venda é necessário armazenar a data em que a mesma foi elaborada. Podem e devem adicionar outros dados que achem relevantes. - Criação de Compras – Criação de compras é o que vai possibilitar ao Sr. Manel repor stock dos artigos que vai vendendo. Para esta componente apenas necessitamos da Data, do Código do Artigo e da Quantidade. Gestão de Stock/Artigos – Para o Software é preponderante a possibilidade de gerir stock e artigos. Para tal, informações como, Código do Artigo, Quantidade Atual (Stock), Descrição do Artigo são importantes. Podendo desde já serem adicionados novos atributos à vossa escolha.  Consultas/Estatísticas – Possibilidade de consulta de movimentos de Venda, Compra e Artigos. Esta consulta tem que ser baseada, pelo menos, no Código do Cliente, na Data e no Código do Artigo. As estatísticas ficam ao vosso critério, cada grupo tem a possibilidade de definir qual ou quais os dados que considera relevantes para apresentar. Estas funcionalidades são as mínimas obrigatórias exigidas para o trabalho. Será valorizado o facto de acrescentarem novas funcionalidades ao programa, desde que bem fundamentadas no relatório final de grupo. Por exemplo existir a hipótese de apresentar de uma forma de “fatura” os dados de um documento de Venda. Regras: Para que o programa seja aprovado, terá de obedecer às seguintes regras: 1. Utilizar um ficheiro de texto para guardar o histórico de todas as transações efetuadas no programa. Cada ação corresponde única e exclusivamente a uma linha desse mesmo ficheiro. Entendam-se ações neste contexto, como a venda, compra, criação de clientes e execução do programa principal. 2. Utilizar um ficheiro binário para armazenar a informação das Vendas, Compras, Produtos e Clientes, respectivamente. 3. Todos os dados relativos às Vendas, Compras, Artigos e Clientes terão de ser guardados numa estrutura. 4. Cada linha do ficheiro de texto deve conter a data da Operação. 5. O programa deverá ser elaborado em Linguagem C. o meu programa esta assim #include <stdio.h> #include <time.h> //Estrutura do Cliente typedef struct{ char nome[30], morada[30]; int nif, bi; }Cliente; //Estrutura do Produto typedef struct{ int code, quant, puni, ptotal; }Artigo; //Estrutura da reposição do produto typedef struct{ int code, quant; }Compra; //Estrutura de venda de stock typedef struct{ int prod, quant, code; }Venda; //Inserir produto Venda venda_produto(){ Venda v1; printf("Digite codigo do artigo: "); scanf("%d", &v1.code); printf("Digite quantidade do produto: "); scanf("%d", &v1.quant); return (v1); } //Inserir infomrações do cliente Cliente preenche_cliente(){ Cliente c1; printf("Digite nome do cliente: "); scanf("%s", &c1.nome); printf("\nDigite a morada do cliente: "); scanf("%s", &c1.morada); printf("\nDigite NIF: "); scanf("%d", &c1.nif); printf("\nDigite Numero do BI: "); scanf("%d", &c1.bi); return(c1); } //Inserir informações do artigo Artigo info_artigo(){ Artigo a1; printf("\n-----------------------------------\n"); printf("\nDigite codigo do artigo: "); scanf("%d", &a1.code); printf("\nDigite quantidade: "); scanf("%d", &a1.quant); printf("\nDigite o preco por unidade: "); scanf("%d", &a1.puni); a1.ptotal=a1.quant*a1.puni; printf("\n----------------------------------\n"); return(a1); } Compra compra_produto(){ Compra b1; printf("\n----------------------------------\n"); printf("\nDigite codigo do produto que quer repor: "); scanf("%d", &b1.code); printf("\nDigite a quantidade que deseja repor: "); scanf("%d", &b1.quant); printf("\n-----------------------------------\n"); printf("\nFoi reposta uma quantidade de %d produtos", b1.quant); printf("\n-----------------------------------\n"); } // Mostrar informações cliente void mostra_cliente(Cliente c1){ printf("Nome:%s\n", c1.nome); printf("Morada:%s\n", c1.morada); printf("NIF:%d\n", c1.nif); printf("Bi:%d\n", c1.bi); printf("------------------------------------\n"); } //Mostrar informações do artigo void info_artigo1(Artigo a1){ printf("Codigo: %d\n", a1.code); printf("Quantidade: %d unidades\n", a1.quant); printf("Preco Unidade: %d euros\n", a1.puni); printf("Preco Total: %d euros\n", a1.ptotal); printf("-------------------------------------\n"); } //Mostrar produtos repostos void compra_produto1(Compra b1){ printf("Codigo do produto: %d\n", b1.code); printf("Quantidade reposta: %d\n", b1.quant); } int menu(){ int escolha; printf("\n *---------------------------*"); printf("\n * 1 - Vendas *"); printf("\n * 2 - Clientes *"); printf("\n * 3 - Reposicao *"); printf("\n * 4 - Artigos *"); printf("\n * 5 - Sair *"); printf("\n *---------------------------*"); printf("\nDigite numero para selecionar opcao!: \n"); scanf ("\n%d",&escolha); return(escolha); } int main(){ Cliente c1; Artigo a1; Compra b1; //Ciclo //c1=preenche_cliente(); //a1=info_artigo(); //b1=compra_produto(); int op; op=menu(); switch (op){ case 1:{ printf("----------------------------------\n"); char dateStr[9]; char timeStr[9]; _strdate(dateStr); printf("The current date is %s \n", dateStr); _strtime(timeStr); printf("The current time is %s \n", timeStr); getchar(); } case 2:{ compra_produto(b1); char dateStr[9]; char timeStr[9]; _strdate(dateStr); printf("The current date is %s \n", dateStr); _strtime(timeStr); printf("The current time is %s \n", timeStr); getchar(); return 0; } } //Mostrar data e hora actual. char dateStr[9]; char timeStr[9]; _strdate(dateStr); printf("The current date is %s \n", dateStr); _strtime(timeStr); printf("The current time is %s \n", timeStr); getchar(); return 0; }
  5. Gabriel Vinicius Paffrath

    Jogo de Senha

    Pessoal, preciso de um projeto para linguagem C. Um jogo de senha onde o player 1 digita 4 letras entre (a,b,c,d,e,f) sem repetir em qualquer ordem. O player 2 tenta encontrar a sequencia digitada e na ordem digitada. para cada tentativa o programa retorna “x” ou “o”. ”o” - Acertar a letra mais errou a posicao ”x” - Acertar letra e posição maximo 10 tentativas.
  6. Rui Carlos

    Some obscure C features

    Fonte: https://multun.net/obscure-c-features.html
  7. jonhhy

    ANSWERED Trabalhar com Memória , crash

    #include <stdio.h> char * memset2 (char v[],char ch, int n); int main() { char *v = "PaP Programar"; char ch = 'A'; int n = 3; puts("abc"); printf("A string alterada é: %s \n",memset2(v,ch,n)); puts("ghdfj"); } char * memset2 (char v[],char ch, int n) { int i; for (i=0; i<n;i++) v[i] = ch; return v; } output: http://prntscr.com/or6w63 Boa tarde Caríssimos , o programa que estou a trabalhar crasha e não sei como resolver.
  8. SERGIO REBELO

    BarTender API

    Bom dia Alguém já desenvolveu alguma aplicação em C++ ou C#, de impressão de etiquetas com base de dados em SQL Server, que utilize a API do software de etiquetas Bartender ? Obrigado
  9. Bom, eu estou tentando abrir uma imagem no picture box, porém quero escrever no textbox e abrir pelo nome, sou novo na área de C#, se alguem puder me ajudar, ficarei grato, desde de já muito Obrigado
  10. José Manuel Batista

    Código de euromilhões

    Boas pessoal, encontro-me atualmente a estudar programação e o objetivo neste momento é desenvolver um programa para gerir uma chave aleatória de euromilhoes com os 5 numeros e estrelas sem que nenhum deles se repita. Alguma dica, sugestão? Obs: O código não está a correr neste momento. #include <stdio.h> #include <stdlib.h> #include <time.h> main() { time_t t; int n[5], ns, opcao, existe=0; do{ printf("\tMenú"); printf("1 - Gerar Chave\n"); printf("2 - Mostrar Chave\n"); printf("3 - Sair\n"); scanf("%d", &opcao); switch(opcao) { case 1: for(int i=0; i<5; i++) { ns=1+(rand()%50); n[i]=ns; if(i>0) do { if(n[i] == n[i--] || n[i] == n[i-2] || n[i] == n[i-3] || n[i] == n[i-4] || n[i] == n[i-i]) { existe=1; n[i] = 1 + rand() % 50; } else existe=0; } while(existe==1); } case 2 : case 3 : default : printf("Opção Inválida"); } } while(opcao!=3); }
  11. Earendil010102

    Lista de livros

    Estou criando uma lista de cadastro de livros. Quado digito a opção 2 ele deve dizer que não ha nada cadastrado, caso não tenha cadastrado nenhum livro. Mas quando digito 1 não retorna para opção 1. O que estou fazendo de errado? #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ struct inform { int cod; char autor[30], obra[30], editora[10]; }; void menu () { printf("\n-----------MENU----------------"); printf("\nDigite uma opção:"); printf("\n1 - Inserir um novo cadastro"); printf("\n2 - Mostrar todos os cadastros"); printf("\n0 - Encerrar"); printf("\n-----------MENU----------------"); } int main(int argc, char *argv[]) { setlocale (LC_ALL, "Portuguese"); //---------------variaveis struct inform livro[5]; int opc, i, cont, valor; valor = 0; char resp; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<, //inicialização menu(); printf("\n\n"); scanf("%d", &opc); fflush(stdin); system("pause"); system("cls"); i = 0; cont = 0; switch (opc) { case 1 : //inicio opcao 1 valor = 1; do { printf("\nDigite o nome do livro: "); gets(livro[i].obra); fflush(stdin); printf("\nDigite o nome do autor: "); gets(livro[i].autor); fflush(stdin); printf("\nDigite o nome da editora: "); gets(livro[i].editora); fflush(stdin); livro[i].cod = i+1; menu(); scanf("%d", &opc); fflush(stdin); i++; cont++; } while (opc == 1 && i<5); if (i == 5) { //inicio do primeiro if system("cls"); printf("\n\nSistem de cadstro lotado. Não é possivel armazenar mais informações\n"); printf("Digite outra opção.\n\n"); menu(); scanf("%d", &opc); system("pause"); system("cls"); } //fim do primeiro if //fim da opcao 1 case 2 : //inicio opcao 2 while (valor == 0) { printf("\nLista vazia"); printf("\nDigite outra opcao\n\n"); menu(); scanf("%d", &opc); } for (i=0; i<cont; i++) { // impressao printf("\n autor: %s", livro[i].autor); printf("\n obra: %s", livro[i].obra); printf("\n editora: %s", livro[i].editora); printf("\n código: %d\n\n", livro[i].cod); } //impressao //fim pocao 2 break; case 0 : //inicio opcao 0 system("cls"); printf("\nSAINDO...\n\n"); //fim opcao 0 break; default : printf("\nNumero invalido"); printf("\nDigite outro valor"); menu(); scanf("%d", &opc); } return 0; }
  12. É verdade que é considerado uma má prática de programação C alocar memória em uma função e desalocar em outra função? Tenho essa dúvida porque recentemente tive que fazer o uso deste recurso em um projeto que estou desenvolvendo sozinho e eu sinceramente não sei se foi uma boa abordagem ... Segue os códigos abaixo para uma análise: //trecho de código struct art_properties{ int art; int quote; int art_color; }; //trecho de código static void handler(int num){ clear(); endwin(); init_scr(); } int resize(int key){ struct sigaction new_action; struct sigaction old_action; new_action.sa_flags=0; new_action.sa_handler=handler; sigemptyset(&new_action.sa_mask); sigaction(SIGWINCH, &new_action, &old_action); return getmaxy(stdscr); } static size_t count_rows(const char *file_path){ size_t rows=0; FILE *file=fopen(file_path, "r"); if(file!=NULL){ while(!feof(file)){ if(fgetc(file)=='\n'){ rows++; } } fclose(file); } return rows; } struct art_properties *print_art(int y, struct art_properties *properties){ struct art_properties aux; FILE *art_file=NULL, *quote_file=NULL; size_t i=0; char row_content[1025], str_quote[1025]; const char *arts[]={"obj/arts/art_001.txt", "obj/arts/art_002.txt", "obj/arts/art_003.txt", "obj/arts/art_004.txt", "obj/arts/art_005.txt", "obj/arts/art_006.txt", "obj/arts/art_007.txt", "obj/arts/art_008.txt", "obj/arts/art_009.txt", "obj/arts/art_010.txt"}; if(properties==NULL){ srand(time(NULL)); aux.art=rand()%9; aux.art_color=rand()%7; aux.quote=1+(rand()%count_rows("obj/quotes.txt")); properties=malloc(sizeof(struct art_properties)); memcpy(properties, &aux, sizeof(struct art_properties)); }else{ memcpy(&aux, properties, sizeof(struct art_properties)); } attron(COLOR_PAIR(aux.art_color) | A_BOLD); art_file=fopen(arts[aux.art], "r"); if(art_file!=NULL){ for(i=0; i<count_rows(arts[aux.art]); i++){ fgets(row_content, 1025, art_file); mvprintw(y+i, 1, "%s", row_content); } fclose(art_file); } quote_file=fopen("obj/quotes.txt", "r"); if(quote_file!=NULL){ if(aux.quote!=1){ for(int i=0; i!=aux.quote; i++){ fgets(str_quote, 1025, quote_file); } mvprintw(y+2+i, 1, "[GANADO QUOTE] - %s", str_quote); } fclose(quote_file); } attroff(COLOR_PAIR(aux.art_color) | A_BOLD); return properties; } struct art_properties *free_art(struct art_properties *ptr){ free(ptr); return NULL; } //trecho de código case '0': noecho(); do{ properties=print_art(1, properties); attron(COLOR_PAIR(YELLOW) | A_BOLD); mvprintw(y-1, 1, "[?] - Are you sure you want to quit Saddler [Y/n]?"); attroff(COLOR_PAIR(YELLOW) | A_BOLD); key=getch(); y=resize(key); clear(); switch(key){ case 'y': case 'Y': key='Y'; break; case 'n': case 'N': key='N'; break; default: break; } }while(key!='Y' && key!='N'); properties=free_art(properties); echo(); break; -> "funcionando" -> https://imgur.com/a/n3C8n5F ________________________________________________________________________________________________________________________________________ Dúvida: Se acima eu fiz mau uso da alocação dinâmica, qual seria uma abordagem alternativa para os códigos acima? Uma solução que não afete o objetivo secundário da função print_art()? * Objetivo secundário da função print_art() -> Mater as propriedades da arte impressa no terminal mesmo que a janela seja redimensionada. ________________________________________________________________________________________________________________________________________ Peço desculpas a todos os membros desta comunidade por não postar todo o projeto, mas é que ele ainda não está 100% finalizado e eu também não quero ser zuado por outros programadores mais experiêntes por postar "gambiarra" de 3000 linhas cheia de bugs.
  13. joaobalaia

    Progrmaçao em linguagem c no linux

    Boa tarde malta, estou com um pequeno problema que não sei bem como resolver. Tenho de fazer um protejo para uma cadeira e a parte do código já a consegui fazer, seguindo alguns passos que foi vendo na net e nas aulas. O meu problema é que agora para fazer o relatório final do protejo necessito de fazer a explicação das linhas de código, e como eu foi vendo na net não sei bem explicar o código em si, espero que alguém me consiga ajudar. Vou deixar aqui o código em baixo e vou ficar a aguardar respostas. //ficheiro: cliente.c #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #include <unistd.h> int ler_socket(int cliente_socket){ //while(1){ int tamanho; if(read(cliente_socket, &tamanho, sizeof(tamanho)) == 0) return 0; char* mensagem = (char*) malloc(tamanho); read(cliente_socket, mensagem, tamanho); printf("cliente: resposta recebida do servidor--> %s\n", mensagem); if(!strcmp(mensagem, "quit")){ free(mensagem); return 1; } free(mensagem); //} } void escrever_socket(int socketfd, const char* mensagem){ int tamanho = strlen(mensagem) + 1; write(socketfd, &tamanho, sizeof(tamanho)); write(socketfd, mensagem, tamanho); } int main(int argc, char* argv[]){ const char* const nome_socket = argv[1]; //const char* const mensagem = argv[2]; int socket_fd; char mensagem[50]; //scanf("%s", &mensagem); while(1){ gets(mensagem); if(strcmp(mensagem, "start") == 0){ socket_fd = socket(PF_LOCAL, SOCK_STREAM, 0); struct sockaddr_un nome; nome.sun_family = AF_LOCAL; strcpy(nome.sun_path, nome_socket); connect(socket_fd, (struct sockaddr*) &nome, SUN_LEN(&nome)); gets(mensagem); while(1){ gets(mensagem); if(strcmp(mensagem, "ig") == 0){ socket_fd = socket(PF_LOCAL, SOCK_STREAM, 0); struct sockaddr_un nome; nome.sun_family = AF_LOCAL; strcpy(nome.sun_path, nome_socket); connect(socket_fd, (struct sockaddr*) &nome, SUN_LEN(&nome)); escrever_socket(socket_fd, "informatica de gestao"); } } while(strcmp(mensagem, "end") != 0){ escrever_socket(socket_fd, mensagem); ler_socket(socket_fd); gets(mensagem); } close(socket_fd); } } return 0; }
  14. 00Basil00

    Inicio em C e SO

    Boas, sou novo por estas bandas, mas espero que me ajudem ainda assim. Estou a fazer a licenciatura em Engenharia Informática e tenho uma cadeira que é Sistemas Operativos, aprendo a programar em C, infelizmente e por minha culpa não percebo grande coisa, ando a procura de um livro para me ajudar rumo ao 20 no exame, pensei no original "The C Programming Language" porem o meu ingles não é grande coisa, então fui pesquisar e fiquei entre o "Liguagem C" de luis damas e um da FCA. Na internet encontrei o de luis damas mas so a 10 edeicao, sera muito grande a diferenca entre a 10 e a 24 que e a a venda nas lojas? e aconselham me um desses ou outro melhor?
  15. Yasnac

    Balancear árvores - rotações ED e DE

    Boas. Relativamente a balancear arvores, existem aquelas 4 rotações comuns: EE, DD, ED e DE. As duas primeiras já as consegui fazer, mas não estou a conseguir perceber o porquê das as outras não funcionarem. Como resolvo isto? typedef struct arvore { int data; struct arvore * esquerda; struct arvore * direita; } *Arvore; Arvore DD(Arvore pointer){ int a,b; a = pointer->data; b = pointer->direita->direita->data; pointer->data = pointer->direita->data; pointer->direita->data = b; pointer->esquerda = pointer->direita->direita; pointer->direita->direita = NULL; pointer->esquerda->data = a; return pointer; } Arvore EE(Arvore pointer){ int a,b; a = pointer->data; b = pointer->esquerda->esquerda->data; pointer->data = pointer->esquerda->data; pointer->esquerda->data = b; pointer->direita = pointer->esquerda->esquerda; pointer->esquerda->esquerda = NULL; pointer->direita->data = a; return pointer; } Arvore ED(Arvore pointer){ int a,b,c; a = pointer->esquerda->direita->data; b = pointer->esquerda->data; c = pointer->data; pointer->esquerda->esquerda = pointer->esquerda; pointer->esquerda->direita = NULL; pointer->esquerda->data = a; EE(pointer); return pointer; } void balancear(Arvore pointer) { if(pointer!=NULL){ // DD if((pointer->direita!=NULL) && (pointer->direita->direita!=NULL)) { printf("DD\n"); DD(apt); } // EE else if ((pointer->esquerda!=NULL) && (pointer->esquerda->esquerda!=NULL)) { printf("EE\n"); EE(apt); } // DE else if ((pointer->direita!=NULL) && (pointer->direita->esquerda!=NULL)) { printf("DE\n"); DE(apt); } // ED else if ((pointer->esquerda!=NULL) && (pointer->esquerda->direita!=NULL)) { printf("ED\n"); ED(apt); } } }
  16. Pelo o que eu entedi até agora a respeito dessas duas constantes foi o seguinte: F_SETFD: define flags para para o descritor de arquivo especificado no parâmetro __fd. F_SETFL: define flags de status para o descritor de arquivo especificado no parâmetro __fd. Perguntas: O que é uma flag de status? Qual a diferênça entre usar F_SETFD e F_SETFL em uma chamada para fcntl()? Em quais ocasiões deve-se utilizar cada constante/valor?
  17. Sofia Raimundo

    Erro ao ler ficheiro a partir de uma estrutura

    Estou a desenvolver uma aplicação cujo objetivo é obter um gestor de músicas. O programa está organizado em menus: um menu principal e dois secundários, o menu das músicas e o menu dos artistas. No menu das músicas existem quatro opções: listar as músicas, adicionar músicas, editar músicas e remover músicas. Para estas opções funcionarem preciso que o ficheiro das músicas seja escrito e lido pelo programa. Como se pode escrever e ler um ficheiro num programa em linguagem C? void menuMusicas() { int op; do { printf("Escolha uma das opcoes:\n"); printf("1 - Listar musicas\n"); printf("1 - Adicionar musica\n"); printf("2 - Editar musica\n"); printf("3 - Remover musica\n"); printf("0 - Voltar\n"); scanf("%d", &op); switch(op) { case 1: listarMusicas(); break; case 2: adicionarMusica(); break; case 3: editarMusica(); break; case 4: removerMusica(); break; case 0: return; default: printf("\nOpcao invalida, tente novamente."); } }while(op!=0); } void listarMusicas(MUSICA * m) { printf("Funcao para listar musicas!\n"); int i=0; for(i=0; i<num_musicas; i++) //cada posição do vetor vai ser preenchida com a informação que é pedida abaixo, ficando assim as músicas listadas { printf("ar: %s\n", m[i].ar); printf("al: %s\n", m[i].al); printf("year: %d\n", m[i].year); printf("ti: %s\n", m[i].ti); printf("length: %f\n", m[i].len); printf("\n"); } } void adicionarMusica() { printf("Funcao para adicionar musica!\n"); ler_nova_musica(& v_musicas[num_musicas]); num_musicas++; } void ler_nova_musica(MUSICA * m) { //função para ler nova musica } void editarMusica(MUSICA * m) { printf("Funcao para editar musicas!\n"); int op, i=0; printf("Escreva a posicao (ID) da musica quq quer editar:\n"); //posição no vetor musicas em que está a música a e ser editada scanf("%d", i); do { printf("Escolha uma das opcoes\n"); printf("1 - Editar artista\n"); printf("2 - Editar album\n"); printf("3 - Editar ano\n"); printf("4 - Editar titulo\n"); printf("5 - Editar duracao\n"); scanf("%d", &op); switch (op) { case 1: printf("ar: %s\n", m[i].ar); //é editado o artista da musica break; case 2: printf("al: %s\n", m[i].al); //é editado o nome do álbum da musica break; case 3: printf("year: %d\n", m[i].year); //é editado o ano de lançamento da música break; case 4: printf("ti: %s\n", m[i].ti); //é editado o título da música break; case 5: printf("length: %f\n", m[i].len); //é editada a duração da música break; default: printf("Opcao invalida. Tente novamente."); } }while(op!=0); } void removerMusica() { printf("Funcao para editar musicas!\n"); int i=0; printf("Escreva a posicao (ID) da musica que quer remover:\n"); //posição no vetor musicas em que está a música a ser removida scanf("%d", &i); for(i; i<num_musicas; i++) { v_musicas[i] = v_musicas[i-1]; //a música a ser removida vai ser substituída na sua posição pela música que se encontra na posição seguinte no vetor e assim sucessivamente } } Obrigada!
  18. whoami-r

    Bubble Sort em lista ligada

    Boas pessoal, é o seguinte: eu tenho uma lista ligada de estruturas em que cada nó é constituído por vários dados. typedef struct dados_pilotos piloto, *pPiloto; typedef struct dados_carros carro, *pCarro; typedef struct lista carroPiloto, *pCarroPiloto; struct dados_pilotos { char nome[100]; int id; data nasc; // struct para data de nascimento do piloto float peso; float exp; // exp >= 0.0 int impedimento; // lesão ou penalização pPiloto prox; // ponteiro para o prox piloto da lista }; struct dados_carros { int id; int potencia; int avariado; // fica impedido 1 corrida após acidente pCarro prox; // ponteiro para o prox carro da lista }; struct lista { piloto piloto; carro carro; int *tempo; pCarroPiloto prox; }; Cada nó da lista é constituído por 1 piloto, 1 carro e um ponteiro *tempo que aponta para uma matriz com vários tempos de corridas. Aqui está a criação da lista: pCarroPiloto criaListaCarroPiloto(piloto *p, carro *c, int tam, int carros) { pCarroPiloto lista = NULL, aux; int i=0, j=0, cont=0; // i -> contador para percorrer os pilotos // j -> contador para percorrer os carros // cont -> conta o numero de vezes que é concluido um nó com sucesso (piloto+carro) for(i = 0; cont < tam; i++) { if(lista == NULL) { // PILOTOS if(p[i].impedimento == 0) { lista = malloc(sizeof(carroPiloto)); strcpy(lista->piloto.nome, p[i].nome); lista->piloto.id = p[i].id; // CARROS while(j < carros) { if(c[j].avariado == 0) { lista->carro.id = c[j].id; lista->prox = NULL; j++; cont++; break; } else j++; } } aux = lista; } else { if(p[i].impedimento == 0) { aux->prox = malloc(sizeof(carroPiloto)); aux = aux->prox; strcpy(aux->piloto.nome, p[i].nome); aux->piloto.id = p[i].id; while(j < carros) { if(c[j].avariado == 0) { aux->carro.id = c[j].id; aux->prox = NULL; j++; cont++; break; } else j++; } } } } return lista; } E aqui as funções que criam os vários tempos por volta de cada combinação carro/piloto: int calculaIdade(data nasc, data atual) { int meses[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int idadeD, idadeM, idadeA; if(nasc.dia > atual.dia) { atual.dia = atual.mes + meses[nasc.mes - 1]; atual.mes = atual.mes - 1; } if(nasc.mes > atual.mes) { atual.ano = atual.ano - 1; atual.mes = atual.mes + 12; } if(nasc.ano > atual.ano) exit(0); idadeA = atual.ano - nasc.ano; idadeM = atual.mes - nasc.mes; idadeD = atual.dia - nasc.mes; return idadeA; } int calculaSegundos(int idadeP, int pesoP, float expP, int PotC, int metros){ return metros/20 + min(3, max(1, 20-expP))*intUniformRnd(1,3) + (float)pesoP/idadeP*intUniformRnd(1,2) + 500.0*(intUniformRnd(1,2))/PotC; } pCarroPiloto tempoPorVolta(pCarroPiloto lista, piloto *p, carro *c, treino caract) { pCarroPiloto aux = lista, novo; int i=0, j=0, idade, peso, potencia, prob; int tempos[caract.n_carros][caract.voltas]; // matriz para guardar os tempos de cada piloto int volta[caract.n_carros]; data nasc, atual; int h, m, s;; float exp; int soma; obtemData(&atual.dia, &atual.mes, &atual.ano, &h, &m, &s); printf("\n\n %2.2d/%2.2d/%d: %2.2d:%2.2d:%2.2d\n", atual.dia, atual.mes, atual.ano, h, m, s); for(i = 0; i < caract.n_carros; i++) { aux->tempo = malloc(sizeof(int) * caract.voltas); printf(" Piloto %d\t", aux->piloto.id); nasc = lista->piloto.nasc idade = calculaIdade(nasc,atual); peso = lista->piloto.peso; exp = lista->piloto.exp; potencia = lista->carro.potencia; soma = 0; for(j = 0; j < caract.voltas; j++) { tempos[i][j] = calculaSegundos(idade,peso,exp,potencia,caract.comprimento); aux->tempo[j] = tempos[i][j]; soma = soma + aux->tempo[j]; aux->tempo[j] = soma; printf(" %d\t", aux->tempo[j]); } printf("\n"); aux = aux->prox; } return lista; } O meu objetivo e a minha dúvida agora é como ordenar a lista por tempos. O último elemento da matriz contém sempre a soma dos tempos de cada piloto no total das voltas. Ou seja, comparar o último elemento de cada linha da matriz e de seguida ordenar a lista por esse valor... Não sei se fui bem explícito, mas qualquer dúvida digam.
  19. Vera_Simoes

    Árvores

    Boas pessoal, Eu precisava de ajuda, estou na universidade e tenho um mini-trabalho que é criar umas funções que me listem os nos de uma árvore por níveis. E não sei como fazer Obrigado
  20. whoami-r

    Problema ao ler lista ligada

    Boas pessoal, tenho um problema que é o seguinte: eu criei uma lista ligada com x nós (sendo x um número introduzido pelo utilizador) em que cada nó é constituído por nome do piloto, id do piloto e id do carro. Quando imprimo a lista é tudo apresentado corretamente. Mas agora tenciono editar a lista e alterar os valores que lá estão, e para isso tenho esta função que atribui id's aleatórios: pCarroPiloto emparelhamentoRand(pCarroPiloto lista, piloto *p, carro *c, int capacidade, int tamCarro, int tamPiloto) { // cont -> conta o número de vezes que é editado um nó com sucesso(piloto+carro) int i=0, j=0, flag, posC=0, posP=0, cont=0; int posCarro[tamCarro], posPiloto[tamPiloto]; pCarroPiloto aux; printf("\n\n"); for(i = 0; i < tamCarro; i++) { // gera x posiçoes carro (sendo x o numero de carros no vetor) do { flag = 1; posCarro[i] = intUniformRnd(0,tamCarro-1); for(j = 0; j < i; j++) if(posCarro[i] == posCarro[j]) flag = 0; }while(flag == 0); // enquanto for repetido printf(" %d \t", posCarro[i]); } printf("\n"); for(i = 0; i < tamPiloto; i++) { // gera x posiçoes piloto (sendo x o numero de pilotos no vetor) do { flag = 1; posPiloto[i] = intUniformRnd(0,tamPiloto-1); for(j = 0; j < i; j++) if(posPiloto[i] == posPiloto[j]) flag = 0; }while(flag == 0); // enquanto for repetido printf(" %d \t", posPiloto[i]); } // EMPARELHAMENTO (EDICAO DA LISTA) j = 0; for(i = 0; cont < capacidade; i++) { while(lista != NULL) { aux = lista; // PILOTOS posP = posPiloto[i]; if(p[posP].impedimento == 0) { aux->piloto.id = p[posP].id; strcpy(aux->piloto.nome, p[posP].nome); // CARROS while(j < tamCarro) { posC = posCarro[j]; if(c[posC].avariado == 0) { aux->carro.id = c[posC].id; lista = lista->prox; j++; cont++; break; } else j++; } } } } return aux; } Basicamente o que faz é gerar uma posição aleatória e de seguida ir a um vetor dinâmico com todos os dados e escolher o elemento da posição gerada e copiar para a lista. E penso que agora o problema estará aqui porque quando tento imprimir a lista após esta função, apenas imprime 1 combinação piloto/carro, quando deveria imprimir 4 (que corresponde ao valor da variável 'capacidade' passada para a função. Deixo também aqui a função que imprime a lista: void showList(pCarroPiloto lista) { pCarroPiloto aux; if(lista == NULL) { printf("\n Lista vazia.\n"); return; } else { while(lista != NULL) { aux = lista; printf("\n------------------------------ "); printf("\n Piloto %d - %s\n Carro %d", aux->piloto.id, aux->piloto.nome, aux->carro.id); lista = lista->prox; } printf("\n------------------------------ "); } } Eu fiz debug e após imprimir o primeiro par, a lista dá com NULL e termina a função.
  21. dopo@dc-business.com

    Exercício struct

    Boas. Preciso de fazer um exercício para que apresente o nome da banda, o tipo de música, quantos integrantes e qual é o ranking. Eu consegui fazer mas no resultado, o tipo de música aparece-me um "?" e no ranking aparece-me 0. Foram usadas 2 folhas. 1ª Folha (main) #include <stdio.h> #include <stdlib.h> #include <locale.h> #include "oi.h" int main() { setlocale(LC_ALL,"portuguese"); int x; for(x=0;x<5;x++) { system("cls"); printf("Digite o nome da banda: "); gets(musica[x].nome); printf("\nDigite o tipo de música: "); gets(musica[x].tipo); printf("\nQuantos integrantes tem a banda: "); scanf("%i",&musica[x].n); fflush(stdin); printf("\nQual é a posição da banda no ranking: "); scanf("%i",&musica[x].tipo); fflush(stdin); } system("cls");\ for(x=0;x<5;x++){ printf("Nome: %s\n",musica[x].nome); printf("Música: %s\n",musica[x].tipo); printf("Nº.Integrantes: %i\n",musica[x].n); printf("Ranking: %i\n",musica[x].pos); } return x; } 2ª Folha #ifndef OI_H_INCLUDED #define OI_H_INCLUDED struct banda{ char nome[35]; char tipo[15]; int n; int pos; }; struct banda musica[5]; #endif // OI_H_INCLUDED
  22. guilherme ramalho

    fflush (stdin)

    boa noite, alguém me podia explicar o porque de eu usar o comando "fflush (stdin)" neste código ( lembrando que é um código apenas de validação, para garantir que o nome não fica vazio), ou mostrar uma alternativa para não usa-lo? do{ printf("Nome do atleta?"); fflush (stdin); gets(ciclista.nome); }while(ciclista.nome[0]== '\0'); obrigado, aguardo resposta! :D
  23. Luís Paiva

    mystrcmp e apontadores

    int myStrCmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *)s1; const unsigned char *p2 = (const unsigned char *)s2; while (*p1 != '\0') { if (*p2 == '\0') return 1; if (*p2 > *p1) return -1; if (*p1 > *p2) return 1; p1++; p2++; } if (*p2 != '\0') return -1; return 0; } alguem me pode explicar este codigo como alternativa ao strcmp? Porque são demasiados apontadores e não consigo entender nada.
  24. Luís Paiva

    linha do triangulo de pascal

    Boas, o exercício pede: "Defina uma função void pascal (int v[], int N) que preenche o vector v com a N-ésima linha do triângulo de Pascal." eu fiz isto: int pascal (int v[], int N) { if(N == 1) v[0] = 1; else { int prevLine[N - 1]; pascal(prevLine,N-1); v[0] = 1; v[N - 1] = 1; for(int i = 1; i < N - 1; i++) { v[i] = prevLine[i - 1] + prevLine[i]; } } return *v; } int main(){ int u[3] = {}; printf("%d", (pascal(u,2))); } na função main está apenas um exemplo. Alguém me consegue ajudar no programa? Obrigado
  25. Luís Paiva

    signos

    Tenho o seguinte código: char *signo(int dia, int mes) { char buffer[25]; switch (mes) { case 1: strcpy(buffer, dia < 20 ? "Capricórnio" : "Aquário" ); break; case 7: strcpy(buffer, dia < 23 ? "Cancer" : "Leao" ); break; case 8: strcpy(buffer, dia < 23 ? "Leao" : "Virgem"); break; case 9: strcpy(buffer, dia < 23 ? "Virgem" : "Libra"); break; case 12: strcpy(buffer, dia < 22 ? "Sagitário" : "Capricórnio"); break; default: strcpy(buffer, "desconhecido"); break; } return buffer; } e tem várias coisas que não entendo. Será que alguém me pode explicar o char buffer? e o ponto de interrogação? e o programa não funciona e é suposto corrigi-la com a função static. Alguém me faz o favor de me explicar tudo isto? Obrigado.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.