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 5,003 results

  1. 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); }
  2. 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; }
  3. É 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.
  4. 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; }
  5. 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?
  6. 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); } } }
  7. 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?
  8. 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!
  9. 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.
  10. 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
  11. 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.
  12. 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
  13. guilherme ramalho

    fflush (stdin) - duvida.

    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
  14. 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.
  15. 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
  16. 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
  17. 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.
  18. QuitoSousa

    Pedir ao utilizador para inserir matrícula

    Boa tarde, Basicamente eu preciso de pedir ao utilizador que insira uma matrícula num dos 3 formatos abaixo. A matrícula é suposto ir para um vector de uma estrutura. 1 - 00-00-XX 2 - XX-00-00 3 - 00-XX-00 Onde: XX são quaisquer duas letras maiúsculas de A a Z inseridas pelo utilizador. 00 é qualquer número de 00 a 99 inseridos pelo utilizador. Alguém que me consiga ajudar? Obrigado desde já!
  19. vinicius

    Conversão Codigo C para Python

    Estou com dificuldade para converter este script em C para Python. Alguém me ajuda por favor int main() { int i, j; int n; int soma=0; int a, b; int pilha[PMAX]; int moves=0; int movimentos=0; scanf("%d", &n); for (i=0; i<n; i++) { scanf("%d", &pilha[ i ]); soma+=pilha[ i ]; } b=(((2*soma)/n)+(n-1))/2; a=1+b-n; for (i=0; i<n; i++) { moves+=(pilha[ i ]-(i+a)); if (pilha[ i ]>i+a) { movimentos+=(pilha[ i ]-(i+a)); } } if (moves!=0) { printf("-1\n"); } else { printf("%d\n", movimentos); } return 0; }
  20. whoami-r

    Função para emparelhamento aleatório

    Boas pessoal, estou a desenvolver um programa de gestão de corridas de automóveis e estou neste momento a tentar fazer uma função que faça o emparelhamento aleatório entre pilotos e carros. Isto é, eu tenho os pilotos armazenados num ficheiro de texto e os carros noutro ficheiro de texto. Criei 2 vetores dinâmicos para os armazenar (visto que é um requisito do enunciado) e neste momento tenho de gerar pares piloto/carro (através de listas ligadas) que posteriormente serão para competir em corridas. A minha dúvida está em como irei desenvolver isto. Pensei em 2 formas mas não sei se serão as mais eficientes: 1 - Converter os 2 vetores dinâmicos (pilotos e carros) em 2 listas ligadas e de seguida criar uma lista "pCarroPiloto" que une as duas. 2 - Voltar a ler os dados do ficheiro e copiar para uma lista com os dados de ambos (pilotos e carros). Foi nos também dada esta função que recebe 2 inteiros e gera 1 int nesse intervalo: int intUniformRnd(int a, int b){ return a + rand()%(b-a+1); } Eu já tentei criar uma lista para os pilotos e copiar os dados do vetor dinâmico, mas sempre que a imprimo só aparece os dados relativos ao primeiro piloto. /*------STRUCTS------*/ typedef struct data_nascimento data; typedef struct dados_pilotos piloto, *pPiloto; typedef struct dados_carros carro, *pCarro; typedef struct corrida treino, campeonato; typedef struct lista carroPiloto, *pCarroPiloto; struct data_nascimento{ int dia, mes, ano; }; 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 corrida { int voltas; // entre 5 e 10 int comprimento; // entre 500 e 1000 (metros) int n_carros; // numero maximo de carros a participar int corridasCamp; // numero de corridas/provas do campeonato }; struct lista { char nome[100]; int idPiloto, idCarro; data nasc; float peso, exp; int impedimento, avariado, potencia; pCarroPiloto prox; }; /*------FIM STRUCTS--------*/ pCarroPiloto criaLista(piloto *p) { pCarroPiloto pc = NULL, novo; novo = malloc(sizeof(pCarroPiloto)); if(novo == NULL) { printf("Erro ao alocar memoria.\n"); return NULL; } preenche(pc,p); pc = novo; return pc; } pCarroPiloto insere_final(pCarroPiloto pc, piloto *p) { pCarroPiloto novo, aux; novo = malloc(sizeof(pCarroPiloto)); if(novo == NULL) { printf("Erro ao alocar memoria.\n"); return pc; } preenche(novo,p); if(pc == NULL) pc = novo; else { aux = pc; while(aux->prox != NULL) aux = aux->prox; aux->prox = novo; } return pc; } void preenche(pCarroPiloto novo, piloto *p) { strcpy(novo->nome, p->nome); novo->idPiloto = p->id; novo->nasc.dia = p->nasc.dia; novo->nasc.mes = p->nasc.mes; novo->nasc.ano = p->nasc.ano; novo->peso = p->peso; novo->exp = p->exp; novo->impedimento = p->impedimento; novo->prox = NULL; } void imprimir_lista(pCarroPiloto lista) { while(lista != NULL) { printf("\n Nome: %s\n" " ID: %d\n" " Data de nascimento: %d/%d/%d\n" " Peso: %.2f\n" " Experiencia: %.2f\n" " Impedimentos: %d\n", lista->nome, lista->idPiloto, lista->nasc.dia, lista->nasc.mes, lista->nasc.ano, lista->peso, lista->exp, lista->impedimento); lista = lista->prox; } }
  21. Douglas

    Programa de perguntas e respostas

    Boa noite, tudo bom? Sou estudante de ciência da computação do primeiro período, estou iniciando na linguagem C e preciso de ajuda pra criar um software pra um trabalho da faculdade, mesmo sem saber quase nada da linguagem. Preciso criar um software onde a ideia inicial é um programa onde o usuário faz perguntas sobre doenças psicológicas, e o computador responde. Minha ideia inicial é criar um conjunto de pronomes interrogativos [P] (Que, quais, qual), e um conjunto de doenças [D] (Depressão, ansiedade, etc), quando o usuário digitasse P+D (Acompanhado de "?") o sistema daria a descrição da pergunta. Sou bem leigo no assunto, estou começando agora a programar, se alguém puder me indicar pelo menos o que estudar pra conseguir manipular essas saídas de dados, eu ficaria muito, muito grato, não faço a menor ideia de como fazer isso em código.
  22. Boas, Estou a desenvolver um programa em C para um trabalho da faculdade e tenho uma dúvida no acesso aos ficheiros. Eu tenho um ficheiro de texto com pilotos (e suas definições) na seguinte forma: Paulo Andrade 2 23 12 1995 76 0.5 0 Faisca 3 1 1 1980 50 9.5 1 Diana Alves Pombo 4 1 10 1990 55 4.5 0 Ana Luisa Freitas 7 12 7 1976 68 1.0 3 Ricardo Cardoso 8 4 2 1999 65 0.2 0 Os valores apresentados por baixo dos nomes correspondem, respetivamente ao ID, data de nascimento (dd mm aaaa), peso, experiencia, impedimento. O valor "impedimento" corresponde ao número de corridas que um determinado piloto está impedido de correr. P.ex. O primeiro piloto está autorizado a correr e o quarto está impedido durante 3 corridas. O meu objetivo é abrir o ficheiro e contar o nº de pilotos que estão autorizados a correr, acedendo apenas ao campo "impedimento", mas não sei se isso é possível. Tenho algum código que fiz mas penso que o que está a fazer é simplesmente contar o número de pilotos que estão no ficheiro: typedef 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 } piloto; int conta_pilotos() { FILE *f; piloto *v; int tam_fich, cont; f = fopen("pilotos.txt", "rt"); // abre o ficheiro e verifica se deu erro if(f == NULL) { printf("Erro no acesso ao ficheiro.\n"); return 0; } else // verifica se o ficheiro está vazio { fseek(f, 0, SEEK_END); tam_fich = ftell(f); if(tam_fich == 0) { printf("O ficheiro esta vazio\n\n"); return 0; } } fseek(f, 0, SEEK_SET); v = malloc(sizeof(piloto)); // aloca memoria e verifica se deu erro if(v == NULL) { printf("Erro na alocacao de memoria.\n"); return 0; } do { if(fscanf(f, "%49[^\n] %d %d %d %d %f %f %d\n", v->nome, &v->id, &v->nasc.dia, // verifica se tem 8 argumentos &v->nasc.mes, &v->nasc.ano, &v->peso, &v->exp, &v->impedimento) != 8) { printf("Formato invalido\n\n"); return 0; } else // aqui verifica quantos pilotos estão impedidos de correr { if(v->impedimento == 0) cont++; } }while(!feof(f)); return cont; }
  23. PsySc0rpi0n

    Usar o operador ternário

    Boas. Já não me recordo como se usar o operador ternário quando preciso de devolver o resultado de uma operação dentro do operador ternário. Passo a expôr o problema: Tenho uma função que é suposto devolver 0 ou 1 mas a condição a verificar é diferente, ou seja, devolve 0 se a condição XXX for verdadeira e devolve 1 se a condição YYY for verdadeira. Com um 'if era fácil mas para o compilador, existe sempre a possibilidade de uma terceira situação não contemplada no 'if' e portanto o compilador queixa-se que a função precisa de devolver um valor. Passo ao código uint8_t TWI_Read(uint8_t d_address, uint8_t* packet){ // Send Slave address and R/W operation TWI0_MADDR = 0x18 | READ_OP; //0x18 + 1 bit for read operation // Check for Slave ACK/NACK bit for slave address if( !(TWI0_MSTATUS & TWI_RXACK_bm) ){ // Read data *packet = TWI0_MDATA; } if(TWI0_MSTATUS & TWI_RIF_bm) return 0x00; else if (TWI0_MSTATUS & TWI_WIF_bm) return 0x01; } Como declarei esta função para devolver um unit8_t e o if que está no final verifica duas condições diferentes, para o compilador existe sempre a possibilidade de nem a condição do IF nem a condição do ELSE IF serem verdadeiras, o compilador queixa-se. Portanto queria usar o operador ternário porque me resolveria o problema mas já não me recordo de como o usar nesta situação. Assim dá: return (TWI0_MSTATUS & TWI_RIF_bm) ? 0x00 : ((TWI0_MSTATUS & TWI_WIF_bm) ? 0x01 : 0x02); Ou seja, se (TWI0_MSTATUS & TWI_RIF_bm) der 1, devolve0, se for 0, vai ver o resultado de (TWI0_MSTATUS & TWI_WIF_bm). Se este for 1, devolve 1, se for falso devolve 2. Mas não sei se era assim ou se há outra forma mais comum para fazer isto! Eu sei que podia adicionar o ELSE no if e devolver o 0x02, mas na verdade este 0x02 nem me interessa! Apenas me interessa o resultado daquelas duas verificações porque sei que no que pretendo, apenas aqueles dois resultados são possíveis!
  24. Boas, gostava de saber se e possivel e como separar um inteiro pelos seus algarismos , ou seja, por ex numero 255, os algarismos sao: 2 - 5 - 5 . Cumprimentos
  25. Luís Paiva

    Erros na declaração de main

    No código seguinte: char main(char s1[], char s2[]) { int i=0,len=strlen(s1); while (s1[i+len]=s2){ i++; } return s1; } e retorna-me os seguintes avisos: line 5 warning return type of 'main' is not 'int' line 5 warning first argument of 'main' should be 'int' line 5 warning second argument of 'main' should be 'char **' in function 'main': line 6 warning implicit declaration of function 'strlen' line 6 warning incompatible implicit declaration of built-in function 'strlen' line 6 note: include '<string.h>' or provide a declaration of 'strlen' line 7 warning suggest parentheses around assignment are used as truth value line 10 warning return makes integer from pointer without a cast alguém me pode explicar o porquê de tantos avisos? e porquê de serem avisos e não erros?
×
×
  • 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.