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

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 210 results

  1. nixfb

    help

  2. Estou iniciando em programação e tenho um trabalho em C que devo: Construir um programa que leia uma matriz 7x7 de inteiros. Após a leitura, calcular o somatório apenas dos elementos abaixo destacados da matriz lida. Mostre, os elementos destacados e o somatório. A soma deve ser entre as posições da matriz refentes a imagem em anexo. É esta a dificuldade que eu encontrei, não sei os passos para realizar esta soma em específico então provavelmente a minha tentativa abaixo foi bizarra. Alguém poderia me ajudar? Agradeço desde já. #include<stdio.h> #include<conio.h> #define linha 7 #define coluna 7 int main (void ) { int i, j, matriz[linha][coluna], result, soma; printf ("\nDigite valor para os elementos da matriz\n\n"); for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("\nElemento[%d][%d] = ", i, j); scanf ("%d", &matriz[ i ][ j ]); } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("%i", matriz[i][j]); } printf("\n"); } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ result=result+matriz[i][j]; } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ soma=soma+matriz[3][3]+matriz[4][2]+matriz[4][3]+matriz[4][4]+matriz[5][1]+matriz[5][2]+matriz[5][3]+matriz[5][4]+matriz[5][5]+matriz[6][0]+matriz[6][1]+matriz[6][2]+matriz[6][3]+matriz[6][4]+matriz[6][5]+matriz[6][6]; } } printf("\n\nA soma de todos valores da matriz: %d\n", result); printf("\n\nA soma dos valores solicitados: %d\n", soma); }
  3. programa { inclua biblioteca Matematica funcao inicio() { inteiro hom=0, mul=0, rsim=0, rnao=0, rhsim=0, rmsim=0, n, t=4 real psim, pnao caracter sexo, resp (n == t) { leia ("Informe o Sexo: ", sexo) leia ("Gostou do produto (S/N): ", resp) se (sexo =='1') { hom = hom + 1 se (resp == '1') { rmnao = rmnao + 1 } } senao { se (sexo == '2') { mul = mul + 1 se (resp == '2') { rhsim = rhsim + 1 } } } se (resp == '1') { rsim = rsim +1 } senao { se (resp == '2') { rnao = rnao +1 } } n = n + 1 } psim = 100 * (rmsim / t) pnao = 100 * (rhnao / t) } escreva ("Quantidade de pessoas que responderam sim: ", rsim) escreva ("Quantidade de pessoas que responderam não: ", rnao) escreva ("Porcentagem de mulheres que responderam sim: ", psim) escreva ("Porcentagem de homens que responderam não: ", pnao) }
  4. estou tentando fazer um programa que verifique 3 valores e informe o maior, o menor e se forem iguais! oq ta errado #include<stdio.h> #include<stdlib.h> #include<locale.h> int main() { setlocale(LC_ALL,"Portuguese"); int maior,menor; float a,b,c; printf("\n\tDigite 3 valores: \n"); scanf("%f%f%f",&a,&b,&c); if (a>b&&a>c) { maior=a; } else{} if (b>a&&b>c) { maior=b; } else{} if(c>a&&c>b) { maior=c; } if (a<b&&a<c) { menor=a; } else{} if(b<a&&b<c) { menor=b; } else{} if(c<a&&c<b) { menor=c; } else{} if (a==b&&b==c&&a==c) { printf("\n\tValores iguais\n\n"); } else{} printf("\n\tO maior é: %d\n\tO menor é: %d\n\n",maior,menor); system("pause"); return 0; }
  5. Keven Augusto

    Cronômetro em C

    Primeiramente, bom dia/boa tarde/boa noite. Eu estou migrando de vez para o Linux e percebi que não possui nenhuma aplicação nativa de cronometro como a que estava acostumado a utilizar no Windows 10. Eu faço home office, então uso muito para gerir o tempo de trabalho diário e gostaria de utilizar no Ubuntu também. Procurei na loja do sistema, mas não encontrei nenhum que me agradasse e, como estudante de Engenharia de Computação, pensei em fazer um simples que execute no terminal mesmo e possua as funções básicas que preciso: start, pause e reset. Porém, estava pensando e não aprendi ainda e não tenho a menor ideia de como faria para que fosse exibido no terminal o contador e ao mesmo tempo examinar o teclado para que pause a execução caso seja pressionada uma determinada tecla. Alguém teria alguma ideia de como possa fazer para isso? Eu pensei em iniciar um novo terminal via código mesmo e ir mostrando o contador neste outro terminal, aí no primeiro eu insiro os comandos para pausar, começar ou reiniciar o tempo. Penso que seja mais ou menos isso que preciso fazer, mas não tenho certeza e gostaria de uma luz.
  6. Lísias de Castro

    trajeto linear em linguagem c

    Ola, sou Lísias e gostaria de saber se alguém poderia me ajudar nessa tarefa tão difícil para finalizar minha biblioteca. Eu fiz um motor de jogos, e nele já consegui implementar todas as funções básicas para um uso primário. Fazendo a criação de jogos simples através dela. Mas estou desenvolvendo um rpg, e resolvi fazer com que os personagens atirem a longa distância. Porém, para que isso aconteça, tenho que fazer com que o objeto a ser atirado sempre corra em linha reta. Criei uma função que faz com que todos os objetos se movam na tela, mas ela não funciona de uma maneira linear. O que posso modificar nessa função para que ela me proporcione isso? static STATUS place_user_move(OBJECT_SET * U, BP32 x, BP32 y) { if (U == NULL)return (Off); if (U->x_route == x) { if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but(U, NORTH); if (U->y_route < y) { U->y_route = y; U->where_stop(U); return (On); } } if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but(U, SOUTH); if (U->y_route > y) { U->where_stop(U); U->y_route = y; return (On); } } return (Off); } if (U->y_route == y) { if (U->x_route > x) { U->x_route -= U->x_speed; U->where_stop_but(U, WEST); if (U->x_route < x) { U->where_stop(U); U->x_route = x; return (On); } } if (U->x_route < x) { U->x_route += U->x_speed; U->where_stop_but(U, EAST); if (U->x_route > x) { U->where_stop(U); U->x_route = x; return (On); } } return (Off); } if (U->x_route > x) { U->x_route -= U->x_speed; if (U->x_route < x)U->x_route = x; if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, WEST); if (U->y_route < y)U->y_route = y; } if (U->y_route < y) { U->where_stop_but_and(U, SOUTH, WEST); U->y_route += U->y_speed; } } if (U->x_route < x) { U->x_route += U->x_speed; if (U->x_route > x)U->x_route = x; if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but_and(U, SOUTH, EAST); if (U->y_route > y)U->y_route = y; } if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, EAST); if (U->y_route < y)U->y_route = y; } } return (Off); } PLACE_CALL STATUS PLACE_TYPE place_user_route(CHAINED * user, BP32 x, BP32 y) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * U = USER_C(user->it)->object; if (U->x_route == x && U->y_route == y) { obj_where_stop_all(U); return (On); } //printf("xs %f ys %f\n",object->x_speed,object->y_speed); return (place_user_move(U, x, y)); } return (Off); } #define sign(x) ((x > 0) ? 1 : ((x < 0) ? -1 : 0) ) PLACE_CALL STATUS PLACE_TYPE place_user_straight(CHAINED * user, BP32 x1, BP32 y1) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * O = USER_C(user->it)->object; BP32 dx, dy; dx = x1 - O->x_route; dy = y1 - O->y_route; static BP32 x = -1, y = -1, p = -1; if (x == -1)x = O->x_route; if (y == -1)y = O->y_route; if (p == -1)p = 2 * dy - dx; printf("x %lf y %lf\n", x, y); if (x < x1) { if (p >= 0) { y = y + 1; p = p + 2 * dy - 2 * dx; } else { p = p + 2 * dy; } x = x + 1; } else { O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; return (On); } O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; } return (Off); } a função user_place_straight foi minha tentativa de implementar bresenham que promete fazer o que estou tentando. Isso é o que fá fiz com o motor: https://www.youtube.com/watch?v=nuLi_lB6c4Y&feature=youtu.be Mas até agora não estou conseguindo resultado
  7. Boa noite, Preciso de ajuda com o desenvolvimento de um programa. Quero saber 3 coisas . 1 - Criei uma vetor de struct vinculada a uma constante de valor 5. Quero saber como faço para limitar o cadastro ao tamanho da constante ( controla o n° de posições do vetor da struct) De forma que ao cadastrar 5 livros ele impeça de cadastrar o sexto. 2- Impedir que dos 5 cadastros algum deles se repita. (Livros iguais) 3- Se eu der o comando para exibir a lista de dados cadastrados e não houver nenhum ele tem que informar lista vazia. Segue o meu código. #include<stdio.h> #include<stdlib.h> #include<string.h> #define Max_livros 5 struct biblio{ char nomeobra[30]; char nomeedit[30]; char nomeaut[30]; int codigo; int ativo; }; biblio livros[Max_livros]; void menu(); void cadastrar(); void mostrar(); // Menu principal -------------------------INICIO------------------------------- int main(){ menu(); return 0; } // -----------------------------------------FIM--------------------------------- void menu(){ int op; do{ system("cls"); printf("---------->>Sistema para bibliotecas<<----------\n \n \n "); printf("\n1 - Inserir um novo cadastro: "); printf("\n2 - Mostrar todos os cadastros: "); printf("\n0 - Encerrar \n\n"); printf("Opcao escolhida: "); scanf("%d",&op); getchar(); fflush(stdin); switch(op){ case 1: cadastrar(); break; case 2: mostrar(); break; default : system("cls"); printf("\n \n =========================================="); printf("\n\n\n\n\t Erro : opcao invalida!!!\n\n\n\n"); printf("\n \n ==========================================\n\n"); system("pause"); } getchar(); }while(op!=0); } void cadastrar(){ system("cls"); char nomeobra[20]; char nomeedit[20]; char nomeaut[20]; int codigo; int op; do{ codigo=0; codigo=codigo+1; printf("\nDigite o nome da obra: "); fgets(nomeobra,sizeof(nomeobra),stdin); printf("\nDigite o(s) nome(s) d(os) autor(es): "); fgets(nomeaut,sizeof(nomeaut),stdin); printf("\nDigite o nome da editora: "); fgets(nomeedit,sizeof(nomeedit),stdin); for(int i=0;i<Max_livros;i++){ if(livros.ativo==0) { strcpy(livros.nomeobra,nomeobra); strcpy(livros.nomeaut,nomeaut); strcpy(livros.nomeedit,nomeedit); livros.ativo=1; break; } } printf("\n1 - Continuar \n0 - Sair \n\n"); scanf("%d",&op); getchar(); fflush(stdin); }while(op!=0); } void mostrar(){ int codigo=0; system("cls"); printf("------------->>Lista de livros cadastrados<<-------------\n \n \n"); for(int i=0;i<Max_livros;i++){ if(livros.ativo==1){ codigo=codigo+1; printf("\nCodigo: %d\n",codigo); printf("\nNome da Obra: %s\n",livros.nomeobra); printf("\nNome do(s) autor(es): %s\n",livros.nomeaut); printf("\nNome da editora: %s\n",livros.nomeedit); printf("\n\n--------------------------------\n\n"); } } printf("\n\nPressione '0' para voltar ao menu..."); getchar(); fflush(stdin); }
  8. OBJETIVO: Ler strings armazenando em campos de uma struct, atendendo à necessidade/interesse de não ler o que resta no buffer na próxima entrada (lendo espaços e quantidade de chars pré definidos) O QUE PESQUISEI: Tudo que pude, tentei( E TESTEI!) várias formatações com scanf, li e entendi o que fui capaz (lendo em todo lugar) sobre sscanf, fgets, estruturas de repetição recebendo strings de char em char, função criada para o último método citado, setbuf, setvbuf, bufsize e muito mais acredite, vou até passar na biblioteca estadual amanhã para ver se tem algum livro de C e pesquisar mais. (ISTO SÓ PRA DEIXAR CLARO PRA COMUNIDADE que não sou preguiçoso visto que essa é minha primeira pergunta num fórum na história - todo e qualquer tipo de fórum - porque existe uma pressão muito grande sobre fazer perguntas num fórum de programação em especial) Até que achei um jeito sem ser o famigerado fflush, o rewind (stdin)... *Reafirmo! Estou ciente de getchar em estrutura de repetição ou fgets por exemplo, mas só estou aqui porque não me foi útil.* AFINAL qual o problema de usar a função rewind para o fluxo stdin? Claro, é mais usual para chamar ponteiro de arquivo em leitura, mas isso é motivo suficiente para ser ruim usar em stdin? Qual o problema real de se aplicar no fluxo stdin? Não é portável? Achei até uma doc da microsoft indicando para isto: https://docs.microsoft.com/pt-br/cpp/c-runtime-library/reference/rewind?view=vs-2019 em que há "...Para limpar o buffer de teclado, use rewind com o fluxo stdin, que está associado com o teclado por padrão...". Vi reprovação por meio de usuários de outros fóruns nos quais achei perguntas parecidas como esta mas não achei as explicações de como isto ser ruim muito convincentes (um pouco presunçoso ou dedutivo da minha parte por ser um mero iniciante). O que acham? Eu só tenho 3 meses que conheço a programação em geral. SITUAÇÃO ATUAL: Olha, já que isto é para um trabalho de ADS EAD em que a faculdade ensina com 'fflush stdin' sem problemas, e já que ainda não achei alternativa também totalmente resoluta e confiável, está assim com o fflush stdin GENTE DESCULPE QUALQUER INCONVENIENTE. #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct cadastro{ char nLivro[31]; char nAutores[31]; char nEditora[31]; int cod; }livro; int main(){ setlocale (LC_ALL, ""); livro estante[4]; int op, i, j; i = 1; j = 1; do { printf ("\t> Menu <\n\n1 - > Efetua um novo cadastro\n\n2 - > Visualiza todos cadastros\n\n0 - > Sai do menu\n\n"); scanf ("%1d%*c", &op); fflush (stdin); switch (op){ case 1 :if (i < 6){ printf ("\t> Efetua um novo cadastro\n\n> Nome da obra: "); scanf ("%30[^\n]", estante[i-1].nLivro);//não é necessário 's' nesta ocasião. printf ("\n> Autor(es): "); fflush (stdin);//ou rewind(stdin). scanf ("%30[^\n]", estante[i-1].nAutores); fflush (stdin); printf ("\n> Editora: "); scanf ("%30[^\n]", estante[i-1].nEditora); fflush (stdin); printf ("\n\n\t>Cadastro bem sucedido!"); estante[i-1].cod = i; i++; }else { printf ("Cadastro lotado!"); }......(vergonha do código)
  9. Hudson Medeiros

    Formulário condicional

    Bom dia! To precisando criar um formulário condicional com base em um menu dropdown que tem no meu site. Ele puxa as informações de uma lista no código, e gostaria que ao selecionar uma opção específica abrisse novos campos de formulário e alguns sumissem. Alguém tem alguma ideia de como posso executar isso?
  10. Construir um algoritmo em C++ que preencha um matriz quadrada de tamanho 4 pelo usuário. Após o preenchimento pelo usuário, verifique na diagonal principal qual foi o maior valor digitado e exiba na tela o valor. Por fim, exiba na tela toda matriz em forma de matriz na tela.
  11. andreluizsgf

    Impressão de Árvore Binária.

    Boa noite, eu estou tentando implementar uma função que imprima uma árvore como ela deveria ser, com o pai acima e a direita do menor filho e acima e a esquerda do maior filho. Já tenho duas funcões que me permitem imprimir por nível, porém estou tentando adaptá-las para a impressão correta. Exemplo: árvore: 5,4,3,2,1; Impressão: 5 3 4 1 2 O código para o print é este: void ---ivel(node_t* raiz, int level) { if (raiz == NULL){ for(int i = 0 ; i < 3 ; i++){ printf("\t"); return;} } if (level == 1) { for (int i=0; i<altura(raiz); i++) printf("\t"); simpleprint(raiz); } else if (level > 1) { ---ivel(raiz->left, level-1); ---ivel(raiz->right, level-1); } } void printarordem(node_t *raiz) { int h = altura(raiz); int i; for (i=1; i<=h; i++) { printf("\t"); ---ivel(raiz, i); printf("\n"); } } Se alguém souber como resolver este ou sugerir outra implementação, fico super agradecido!
  12. vinicius.benedito98

    Dúvida com vetor em C++

    Faça um Programa em Linguagem C que receba o nome e a nota de 180 alunos de uma sala e armazene em vetor. Calcule e mostre: - A média da sala; - O nome do aluno com a maior nota; - O nome do aluno com a menor nota; - Os nomes dos alunos aprovados; O meu código é esse : #define N 180 int main() { int i, ind_maior, ind_menor; float nota[N], soma=0, media, min_aprov=7; char nome[N][50]; for (i=0; i printf("Informe o nome do %dº aluno: ", i+1); gets(nome); printf("Informe a nota do %dº aluno: ", i+1); scanf(" %d ", &nota); soma += nota; } media = soma / N; printf("\nMédia da sal: %.2f\n", media); ind_menor = ind_maior = 0; for (i=1; i if (nota < nota[ind_menor]) ind_menor = i; if (nota > nota[ind_maior]) ind_maior = i; } printf("Menor nota: %s com %.2f\n", nome[ind_menor], nota[ind_menor]); printf("Maior nota: %s com %.2f\n", nome[ind_maior], nota[ind_maior]); printf("Aprovados:"); for (i=0; i if (nota >= min_aprov) printf("\t%s com: %.2f\n", nome, nota); } return 0; } Porém quando vou executa-lo, o programa pede para inserir o nome e nota do aluno apenas uma vez, e fica por isso, ele não exibe os resultados, alguém pode me ajudar ?
  13. WizardTech

    Cliente/Servidor em C - Problemas

    Eu estou criando uma aplicação cliente/servidor em C no ubuntu. O propósito é bem simples, saber se vale mais a pena alugar ou vender um imóvel, o usuário digita o valor do aluguel, os meses que irá alugar e o valor que irá vender e o servidor faz as contas e devolve o resultado. Tudo está dentro de um do while para ficar infinito, no final o usuário digita CONTINUAR para testar outros valores e SAIR para encerrar a conexão. Mas está com um problema que não consigo identificar. A primeira vez que comparamos valores, o servidor retorna o resultado correto(alugar ou vender), porém a partir da segunda vez ao digitar CONTINUAR, ele sempre retorna resultados errados. Eu suspeito que esteja armazenando dados na variáveis erradas a partir da segunda vez, coloquei uns prints no meio do código para mostrar os valores e tem divergência.E também tentei zerar as variáveis no começo e usar vários bzero e fflush, mas sem resultado. Mas não tenho certeza de nada. Podem me ajudar? CÓDIGO DO CLIENTE: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <string.h>  int main () { struct sockaddr_in sock; int con, sockid,numbytes; char resposta[10]; char buf[100]; char aluguel[10]; char venda[10]; char meses[2]; sockid = socket(AF_INET, SOCK_STREAM, 0); bzero(&(sock),sizeof(sock)); sock.sin_family = AF_INET; sock.sin_port = htons(9012); inet_pton(AF_INET, "127.0.0.1",&sock.sin_addr); con=connect(sockid,(struct sockaddr*)&sock,sizeof(sock)); do{ if(con>=0) { printf("=====================================================\n"); printf("Descubra se vale a pena vender ou alugar seu imóvel\n"); printf("=====================================================\n"); printf("Digite por quanto voce quer alugar: \n"); scanf("%s", &aluguel); printf("=====================================================\n"); if(send(sockid,aluguel,strlen(aluguel),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } printf("Digite por quantos meses ira alugar : \n"); scanf("%s", &meses); printf("=====================================================\n"); if(send(sockid,meses,strlen(meses),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } printf("Digite por quanto quer vender: \n"); scanf("%s", &venda); printf("=====================================================\n"); if(send(sockid,venda,strlen(venda),0)==-1) { printf("Erro ao enviar mensagem \n"); close(sockid); } bzero(&buf,sizeof(buf)); if((numbytes=recv(sockid,buf,100,0)==-1)) { printf("Erro ao receber a mensagem\n"); } printf("Vale mais a pena: %s\n",buf); printf("Digite SAIR para sair ou CONTINUAR para continuar a comparar.\n"); scanf("%s",&resposta); fflush(stdin); if(send(sockid,resposta,strlen(resposta),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } if(strcmp(resposta,"CONTINUAR")==0) { continue; } } }while(strcmp(resposta,"SAIR")!=0); close(sockid); } CÓDIGO DO SERVIDOR: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <string.h> int main () { int sockid; struct sockaddr_in servidor; int client,numbytes; float convertido; float convertido1; float convertido2; char passar[10]; char buf[100]; char buf1[100]; char buf2[100]; float resultado; char resposta[10];  sockid = socket(AF_INET, SOCK_STREAM,0); if(sockid==-1) { printf("Não foi possivel criar o socket"); exit(1); } servidor.sin_family= AF_INET; servidor.sin_addr.s_addr = htonl(INADDR_ANY); servidor.sin_port = htons(9012); if(bind(sockid,(struct sockaddr*)&servidor, sizeof(servidor))<0) { printf("Falhou ao associar a porta\n"); } listen(sockid, 3); int c, new_socket; while(1) { c = sizeof(struct sockaddr_in); new_socket = accept(sockid, (struct sockaddr *)&client,(socklen_t *)&c); if(new_socket <=0) { printf("Falhou ao aceitar o conector\n"); continue; } while(1){ printf("Conexão aceita\n"); fflush(stdin); resultado = 0; convertido = 0; convertido1 = 0; convertido2 = 0; bzero(&buf,sizeof(buf)); if((numbytes=recv(new_socket,buf,100,0)==-1)) { printf("Erro ao receber a mensagem\n"); } convertido = atof(buf); bzero(&buf1,sizeof(buf1)); if((numbytes=recv(new_socket,buf1,100,0)==-1)) { printf("Erro ao receber mensagem\n"); } convertido1 = atof(buf1); printf(buf1); bzero(&buf2,sizeof(buf2)); if((numbytes=recv(new_socket,buf2,100,0)==-1)) { printf("Erro ao receber mensagem\n"); } convertido2 = atof(buf2); printf(buf2);  resultado = convertido*convertido1; if(resultado>convertido2) { sprintf(passar, "Alugar"); } else { sprintf(passar,"Vender"); } if(send(new_socket,passar,strlen(passar),0)==-1) { printf("Erro ao enviar a mensagem\n"); close(new_socket); } bzero(&resposta,sizeof(resposta)); if((numbytes=recv(new_socket,resposta,strlen(resposta),0)==-1)) { printf("Erro ao receber a mensagem\n"); } fflush(stdin); if(strcmp(resposta,"SAIR")==0) {  close(new_socket); break; }  } }  }
  14. reberthkss

    Tecla ENTER

    Bom dia! Estou desenvolvendo meu primeiro jogo da velha, e estou encontrando um problema quando aperto a tecla ENTER. O que acontece é que quando aperto ENTER, o programa o reconhece como um comando de caracter e retorna um valor para quando digitam um caracter diferente de X e O. Abaixo fotos: Antes de apertar o ENTER: Após apertar o ENTER CÓDIGO:
  15. Gostaria de saber qual o problema com o meu código pois ao compilar e executar ele simplesmente abre o DOS e fecha sem realizar nenhuma tarefa #include <stdlib.h> #include <stdio.h> #include <locale.h> // aux1 = contador de coluna e aux2 = contador de linha int main () { setlocale(LC_ALL, "portuguese"); int m1, n1, m2, n2, matriz1[m1][n1], matriz2[m2][n2],matrizsoma[m1][n1],aux1,aux2,elemento,contadorlinha=0; printf("Entre com o número de linhas da 1ª matriz : "); scanf("%i",&m1); printf("Entre com o número de colunas da 1ª matriz : "); scanf("%i",&n1); printf("Entre com o número de linhas da 2ª matriz : "); scanf("%i",&m2); printf("Entre com o número de colunas da 2ª matriz : "); scanf("%i",&n2); if ((m1==m2) && (n1==n2)){ for (aux2 = 0;aux2<m1;aux2++){ for (aux1=0;aux1<n1;aux1++){ contadorlinha=aux1+1; printf("Matriz A:"); printf("Entre com os elementos um a um, separados por espaço da %iª linha: ",contadorlinha); scanf("%i",&elemento); matriz1[aux2][aux1]=elemento; } } for (aux2 = 0;aux2<m2;aux2++){ for (aux1=0;aux1<n2;aux1++){ contadorlinha=aux1+1; printf("Matriz B:"); printf("Entre com os elementos um a um, separados por espaço, da %iª linha: ",contadorlinha); scanf("%i",&elemento); matriz2[aux2][aux1]=elemento; } } for (aux2=0;aux2<m1;aux2++){ for(aux1=0;aux1<n1;aux1++){ matrizsoma[aux2][aux1]=matriz1[aux2][aux1]+matriz2[aux2][aux1]; } } printf("Matriz C = A + B:\n"); for (aux2=0;aux2<m1;aux2++){ for(aux1=0;aux1<n1;aux1++){ printf("%i",matrizsoma[aux2][aux1]); } printf("\n"); } } else{ printf("\nParâmetros das matrizes inválidos para a soma!\n"); printf("Ambas devem ter o mesmo número de linhas e colunas\n"); } system("pause"); return 0; }
  16. [INICIANTE] Boa tarde pessoal, estou com problemas para terminar o seguinte código. Preciso adicionar os seguintes procedimentos. 1. Utilizar vetores e/ou matrizes; 2. Utilizar estruturas de repetição; 3. Implementar utilizando modularização (no mínimo um módulo de procedimento e dois módulos de ação); 4. Utilizar passagem de parâmetro por valor e referência; 5. Utilizar registros; 6. Utilizar alocação dinâmica de memória; Alguém poderia dar uma luz? Já fiz o seguinte: //Projeto: Calculo de PI por Monte Carlo. Adotando o intervalo entre [0,1]. #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main(){ double px,py,deltax,deltay,DistEuc,Valor_pi; int Npont_quad = 10000000; int dentro_circ = 0; int i; srand(time(NULL)); for(i = Npont_quad; i > 0; i--){ //Estrutura de repetição para gerar pontos aleatorios. px = rand() / (double)RAND_MAX; //Primeiro numero sorteado entre 0 e 1. py = rand() / (double)RAND_MAX; //Segundo numero sorteado entre 0 e 1. deltax = pow((px- 0.5),2); //Calculo do cateto x da hipotenusa. deltay = pow((py - 0.5),2); //Calculo do cateto y da hipotenusa. DistEuc = sqrt(deltax + deltay); //Calculo da distancia euclidiana(distancia entre os pontos) if (DistEuc <= 0.5){ //Determinar quais pontos estão dentro do circulo dentro_circ++; } } Valor_pi = 4 * dentro_circ / (double) Npont_quad; //Obtenção do valor de PI. printf("O valor de PI eh: %lf", Valor_pi); //Imprimir o valor de PI. }
  17. Um cinema fez uma pesquisa através de um questionário sobre um filme e recebeu 20 respostas. Cada questionário contem a idade do espectador e sua opinião em relação ao filme, segundo as seguintes notas: 5 – ótimo, 4 – bom, 3 –regular, 2 –ruim, 1 –péssimo. Elabore um programa em C leia estes dados, calcule e imprima: a) A quantidade de respostas de cada tipo de nota dada ao filme; b) A média de idade das pessoas que responderam ruim; c) A percentagem de respostas péssimo; d) A maior idade de quem respondeu regular; e) Média de idade das pessoas que responderam ótimo ou bom ja tentei de varias maneiras e nao consegui resolver!!
  18. Olá, estou tentando fazer um programa para o problema do caixeiro comprador exato (TPP ou PCCo) e, depois de fazer algumas pesquisas, eu encontrei o código a baixo e gostaria conseguir compilar e executar para comparar com a minha implementação. O problema é que não consigo compilar o código. Fica dando, esses erros(Também segue na foto): " /tmp/ccvk9cDb.o: Na função "work()": main.cpp:(.text+0x104e): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o main.cpp:(.text+0x106e): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o main.cpp:(.text+0x1152): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o main.cpp:(.text+0x12b4): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o /tmp/ccvk9cDb.o: Na função "__static_initialization_and_destruction_0(int, int)": main.cpp:(.text+0x1526): relocação truncada para caber: R_X86_64_PC32 contra ".bss" main.cpp:(.text+0x1539): relocação truncada para caber: R_X86_64_PC32 contra ".bss" collect2: error: ld returned 1 exit status " Esse é o código: ////////////////////////////////////////////////////////////////////////////////////////////// #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <queue> #include <map> #include <set> #include <vector> #include <string> #include <stack> #include <bitset> #include"instance_access.h" #define INF 0x3f3f3f3f #define eps 1e-8 #define FI first #define SE second using namespace std; typedef long long ll; const int MaxM = 25, MaxK = 700; int M, K, Q; int G[MaxM + 5][MaxM + 5]; int P[MaxM + 5][MaxK + 5]; int C[MaxM + 5]; void read(char *p,int m,int k,int d,int h) { //scanf("%d%d", &M, &K); int* _graph; int* _price; //_graph->printMatrix(); //cout<<endl; //_price->printMatrix(); //cout<<endl; get_instance_largek(_graph,_price,m,k,p); //cout<<endl; for(int i=0;i<m;++i) { for(int j=0;j<m;++j) { int temp=_graph[i*m+j]; //cout<<temp<<" "; *(G + j)=temp; } //cout<<endl; } //cout<<endl; for(int i=0;i<m;++i) { for(int j=0;j<k;++j) { int temp=_price[i*k+j]; // cout<<temp<<" "; *(P + j)=temp; } // cout<<endl; } M=m; K=k; Q=h; for(int i=1;i<m;++i) { C=d; } } inline void ck(int &x, int v) { if(x > v) x = v; } int head[MaxM + MaxK + 10]; struct Edge { int nxt, to, cow, cost; Edge() {} Edge(int nxt, int to, int cow, int cost) : nxt(nxt), to(to), cow(cow), cost(cost) {} } ed[100000]; int ecnt, mx_flow, mi_cost; void init() { mx_flow = mi_cost = ecnt = 0; memset(head, -1, sizeof(head)); } void addedge(int u, int v, int cow, int cost) { ed[ecnt] = Edge(head, v, cow, cost); head = ecnt ++; ed[ecnt] = Edge(head[v], u, 0, -cost); head[v] = ecnt ++; } queue <int> q; int dis[MaxK + MaxM + 10], pre[MaxK + MaxM + 10], inq[MaxK + MaxM + 10]; bool Spfa(int S, int T) { memset(dis, 0x3f, sizeof(dis)); dis = 0; q.push(S); while(!q.empty()) { int u = q.front(); q.pop(); inq = 0; for(int e = head; ~e; e = ed[e].nxt) { if(!ed[e].cow) continue; int v = ed[e].to; if(dis[v] > dis + ed[e].cost) { dis[v] = dis + ed[e].cost; pre[v] = e; if(!inq[v]) { inq[v] = 1; q.push(v); } } } } return dis[T] != INF; } void End(int S, int T) { int flow = INF; for(int u = T; u != S; u = ed[pre ^ 1].to) { flow = min(flow, ed[pre].cow); } for(int u = T; u != S; u = ed[pre ^ 1].to) { ed[pre].cow -= flow; ed[pre ^ 1].cow += flow; mi_cost += flow * ed[pre].cost; } mx_flow += flow; } int minPrice(int s) { init(); int src = 0, dec = M + K+1; for(int i = 1; i < M; ++ i) { if(~s >> i & 1) continue; addedge(src, i, C, 0); for(int k = 0; k < K; ++ k) { if(P[k] == 0) continue; addedge(i, M + k+1, 1, P[k]); } } for(int i = 1; i <= K; ++ i) { addedge(M + i, dec, 1, 0); } while(Spfa(src, dec)) End(src, dec); if(mx_flow != K) return -1; return mi_cost; } int dp[MaxM + 1][1 << MaxM]; int pop[1 << MaxM]; void work() { int U = 1 << M; for(int i = 1; i < U; ++ i) { pop = pop[i >> 1] + (i & 1); } for(int i = 1; i < M; ++ i) { for(int j = 0; j < U; ++ j) { dp[j] = INF; } } for(int i = 1; i < M; ++ i) { dp[1 << i] = G[0]; } for(int s = 1; s < U; ++ s) { if(pop >= Q) continue; for(int i = 1; i < M; ++ i) { if(dp == INF) continue; for(int j = 1; j < M; ++ j) { if(s >> j & 1) continue; ck(dp[j][s | (1 << j)], dp + G[j]); } } } int ans = INF; for(int i = 0; i < U; ++ i) { if(pop > Q) continue; int f = minPrice(i); if(f == -1) continue; for(int j = 1; j < M; ++ j) { if(dp[j] == INF) continue; ck(ans, f + dp[j] + G[j][0]); } } printf("%d", ans); } int main(int argc,char *argv[]) { //arguments order: filename m k u q if(argc !=6) { cout<<"wrong number of arguments"; return 1; } int m,k,u,q; m=atoi(argv[2]); k=atoi(argv[3]); u=atoi(argv[4]); q=atoi(argv[5]); read(argv[1],m,k,u,q); time_t begin,end; cout<<"optimal object value: "; begin=clock(); work(); end=clock(); cout<<endl; cout<<"time: "; cout<<double(end-begin)/CLOCKS_PER_SEC<<endl; return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////"instance_acess.h"////////////////////////////////////////////////////////// #ifndef INSTANCE_ACCESS_H_INCLUDED #define INSTANCE_ACCESS_H_INCLUDED #include <string> #include <strstream> #include<iostream> #include<fstream> #include<string.h> using namespace std; int get_instance_largek(int *&graph, int *&product_distribution, int m,int k,char *p) { graph=new int[m*m]; product_distribution=new int[m*k]; for(int i=0;i<m;++i) { for(int j=0;j<m;++j) { graph[i*m+j]=0; } } for(int i=0;i<m;++i) { for(int j=0;j<k;++j) { product_distribution[i*k+j]=0; } } ifstream fin; fin.open(p); if(fin.is_open()) { string s; while(fin>>s) { if(s=="NODE_COORD_SECTION") { fin>>s; int num; double x[m]; double y[m]; for(int i=0;i<m;++i) { fin>>num; fin>>x; fin>>y; } for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { double xd=x-x[j]; double yd=y-y[j]; int d=(int)(sqrt(xd*xd+yd*yd)+0.5); graph[i*m+j]=d; } } } if(s=="OFFER_SECTION") { fin>>s; int id; int num=0; for(int i=0;i<m;++i) { fin>>id; fin>>num; int product_id; int cost; int dem; for(int j=0;j<num;++j) { fin>>product_id; fin>>cost; product_distribution[i*k+product_id-1]=cost; fin>>dem; } } } } return 1; }else{ return 0; } } #endif // INSTANCE_ACCESS_H_INCLUDED //////////////////////////////////////////////////////////////////////////////////////////////
  19. Seguinte, estou tentando criar um jogo da velha mas e está causando um erro ao compilar, aparece um erro dizendo->|error: cannot convert 'char (*)[3]' to 'char*' for argument '1' to 'bool verificaX(char*)', alguem sabe como posso resolver ???! (Aparentemente não ta dando pra armazenar o endereço do vetor casas dentro do ponteiro das funções... Obs: Aceito sugestões para melhorar meu código, grato.(Ignorem as bibliotecas inúteis) #include <iostream> #include <stdio.h> //Para função gets #include <stdlib.h> //Para função malloc #include <math.h> #include <iomanip> //JOGO DA VELHA using namespace std; int jogadas=0; bool verificaX(char *vetor); bool verificaO(char *vetor); int main(){ char casas[3][3]={' ',' ',' ',' ',' ',' ',' ',' ',' '}; int l=0,c=0; while(jogadas<9){ cout << "\t\t" << casas[0][0] << " | " << casas[0][1] << " | " << casas[0][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[1][0] << " | " << casas[1][1] << " | " << casas[1][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[2][0] << " | " << casas[2][1] << " | " << casas[2][2] << "\n\n\n"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; while(l<=0 || c <=0 || l>3 || c>3){ system("cls"); cout << "Linha ou Coluna não existe!"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; } system("cls"); if(jogadas%2==0){ casas[--l][--c]='X'; }else{ casas[--l][--c]='O'; } jogadas++; verificaX(casas); verificaO(casas); } if(verificaX){ cout << "Jogador X ganhou!"; }else if(verificaO){ cout << "Jogador O ganhou!"; }else{ cout << "Empate!"; } return(0); } bool verificaX(char *vetor){ int l,c; for(l=0;l<3;l++){ if(vetor[l][0] && vetor[l][1] && vetor[l][2] == 'X'){ jogadas=10; return true; }else if(vetor[0][c] && vetor[1][c] && vetor[2][c] == 'X'){ jogadas=10; return true; } c++; } return 0; } bool verificaO(char *vetor){ int l,c; for(l=0;l<3;l++){ if(*vetor[l][0]=='X' && *vetor[l][1]=='X' && *vetor[l][2] == 'X'){ jogadas=10; return o=true; }else if(*vetor[0][c]=='X' && *vetor[1][c]=='X' && *vetor[2][c] == 'X'){ jogadas=10; return o=true; } c++; } return 0; }
  20. Bom, no meu código ao acessar um vetor de struct declarado globalmente e inicializado no main eu tento passar valores para ele e tento imprimir e nem chega a esse ponto. Antes de eu fazer isso fiz um vetor de struct no int main, inicializei lá, passei para a função, mas ao imprimir não mostrava nada. Cheguei ao ponto de pensar em retornar a struct para a struct do int main, mas como são as mesmas fiquei parado e peço a ajuda de vocês se poderem apontar erros ou qualquer coisa no código a baixo: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define tamanho 3 typedef struct nomes vetnome; typedef struct letras letra; struct nomes{ char nome[30]; vetnome *pont; }; struct letras{ char L[4]; vetnome *pontpnome; }; void inserir (vetnome **nom); int chave(char nome2[30]); void imprimir(); letra tabEsp[tamanho]; int main() { int qtd=1,i=0,contd=0; int chaveres=0; char nome[30], resposta[30]; for(contd=0;contd<3;contd++) { strcpy(tabEsp[contd].L,"NULL"); } while(qtd<4) { printf("Insira 3 letras diferentes, você guardará nomes com essas iniciais depois desse processo: "); vetnome *nom=(vetnome *)malloc(sizeof(vetnome)); inserir(&nom); system("pause"); system("cls"); qtd++; } puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)"); while((strcmp(strupr(resposta),"NAO"))!=0) { vetnome *nom=(vetnome *)malloc(sizeof(vetnome)); inserir(&nom); printf("Você quer continuar?[Sim/Nao]"); scanf("%s", &resposta); system("pause"); system("cls"); } imprimir(); return 0; } int chave(char nome2[30]) { unsigned int resultado= (int)nome2[0]%tamanho; if(resultado<0) resultado=-resultado; return resultado; } void inserir (vetnome **nom) { char nome[30], nome2[30]; puts("Digite um nome: "); scanf("%s", &nome); strcpy(nome2,strupr(nome)); int chaveres=chave(nome2); vetnome *aux2; aux2=nom; if(chaveres==1) { if(strcmp(tabEsp[chaveres].L,"NULL")==0) { strncpy(tabEsp[chaveres].L,nome,1); aux2->pont=NULL; tabEsp[chaveres].pontpnome=aux2; return; } else if((strcmp(tabEsp[chaveres].L,"NULL")>0) || (strcmp(tabEsp[chaveres].L,"NULL")<0)) { aux2=tabEsp[chaveres].pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strncpy(name->nome,nome,30); aux2=name; aux2->pont=NULL; return; } } if(chaveres==2) { if (strcmp(tabEsp[chaveres].L,"NULL")==0) { strncpy(tabEsp[chaveres].L,nome,1); aux2->pont=NULL; tabEsp[chaveres].pontpnome=aux2; return; } else if((strcmp(tabEsp[chaveres].L,"NULL")>0) || (strcmp(tabEsp[chaveres].L,"NULL")<0)) { aux2=tabEsp[chaveres].pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strncpy(name->nome,nome,30); aux2=name; aux2->pont=NULL; return; } } if(chaveres==3) { if (strcmp(tabEsp[chaveres].L,"NULL")==0) { strncpy(tabEsp[chaveres].L,nome,1); aux2->pont=NULL; tabEsp[chaveres].pontpnome=aux2; return; } else if((strcmp(tabEsp[chaveres].L,"NULL")>0) || (strcmp(tabEsp[chaveres].L,"NULL")<0)) { aux2=tabEsp[chaveres].pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strncpy(name->nome,nome,30); aux2=name; aux2->pont=NULL; return; } } if (chaveres>3) { puts("Espaço não reservado!"); } } void imprimir() { int num=0,qtd=0; puts("Digite qual opção deseja: \n"); puts("[ 0 ] TUDO \n"); puts("[ 1 ] APENAS UMA DAS LISTAS DE LETRAS \n"); puts("[ 2 ] Sair \n"); scanf(" %d", &num); if(num==0) { vetnome *aux2; for(qtd=0;qtd<4;qtd++) { printf("Primeira Letra -> %c \n", tabEsp[qtd].L[0]); aux2=tabEsp[qtd].pontpnome; while(aux2!=NULL) { printf("Nome -> ", aux2->nome,"\n"); aux2=aux2->pont; } } } system("pause"); }
  21. David Samu

    Converter Javascript em C

    let total_entradas = 3//ai virar total de colunas let total_linhas = 0 let tabela = [] for(let coluna=total_entradas; coluna>0; coluna-- ) { let repeticao = 1 for(let x=1; x<=coluna; x++) { repeticao = (2 * repeticao) } if( total_linhas === 0 ) { total_linhas = repeticao } if(repeticao != 1) { repeticao = (repeticao / 2) } let valores = [] let vdd = 1 let lastBoo = 'v' for( let linha=0; linha < total_linhas; linha++ ) { if( vdd <= repeticao ) { val = lastBoo } else { if( lastBoo == 'v' ) { lastBoo = 'f' } else { lastBoo = 'v' } val = lastBoo vdd=1 } vdd++ valores.push(val) } tabela[ (coluna - 1) ] = valores } let countCol = 1 for(let coluna=tabela.length - 1; coluna>=0; coluna--) { console.log("Coluna ", countCol++) for(let linha = 0; linha < tabela[coluna].length; linha ++) { console.log( tabela[coluna][linha] ) } }
  22. Gui2000

    Código de agenda em C[Resolvido]

    O código é para a colocar 3 letras a partir de 3 nomes diferentes. Ou seja:A-> AdrianoB-> BrunoC->CarolCom isso eu criaria uma agenda.Problema1-Ao eu compara o que tem dentro da letra que como não tem nada seria NULL então ele nem entra no casso que ele é igual a NULL2- Ao receber a posição da outra struct em: aux2=aux->pontpnome, ou seja ele recebe de dentro da struct letras a posição da próxima struct que é de nomes. Ao debuggar ele insinua erro ai também.Caso vejam mais um erro por favor me comuniquem. #include <stdio.h> #include <stdlib.h> #include <string.h> #define tamanho 3 typedef struct nomes vetnome; typedef struct letras letra; struct nomes{ char nome[30]; vetnome *pont; }; struct letras{ char L[4]; vetnome *pontpnome; }; void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd); int chave(char nome[30]); int main() { int qtd=0,i=0; char nome[30], resposta[30]; letra tabEsp[tamanho]; for(i=1;i<4;i++) { strcpy(tabEsp.L,"NULL"); } printf("Insira 3 nomes diferentes primeiramente: "); while(qtd<4) { letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let->pontpnome=NULL; ini->pont=NULL; inserir(&let, tabEsp, &ini, qtd); system("pause"); system("cls"); qtd++; } puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)"); while(resposta!="NAO") { printf("Digite um nome: "); scanf("%s", &nome); letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let=NULL; ini=NULL; inserir(&let, tabEsp, &ini, qtd); printf("Você quer continuar?[Sim/Nao]"); scanf("%s", &resposta); system("pause"); system("cls"); } return 0; } int chave(char nome[30]) { unsigned int resultado= (int)nome[0]%tamanho; if(resultado<0) resultado=-resultado; return resultado; } void inserir (letra **Let, letra tabEsp[tamanho], vetnome **Ini, int qtd) { char nome[30]; puts("Digite um nome: "); scanf("%s", &nome); int chaveres=chave(nome); vetnome *aux2; aux2=Ini; letra *aux; aux=Let; if(chaveres==1) { if(tabEsp[chaveres].L=="NULL") { letra *novo= (letra*) malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome); aux=novo; aux2=name; aux->pontpnome=&aux2; aux2->pont=NULL; return ; } else if(tabEsp[chaveres].L!="NULL") { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2->pont=name; name->pont=NULL; return; } } if(chaveres==2) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome[30]); aux2->pont=&name; name->pont=NULL; return; } } if(chaveres==3) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2->pont=name; name->pont=NULL; return; } } if (chaveres>3) { puts("Espaço não reservado!"); } } CÓDIGO RESOLVIDO #include <stdio.h> #include <stdlib.h> #include <string.h> #define tamanho 3 typedef struct nomes vetnome; typedef struct letras letra; struct nomes{ char nome[30]; vetnome *pont; }; struct letras{ char L[4]; vetnome *pontpnome; }; void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd); int chave(char nome[30]); int main() { int qtd=1,i=0; char nome[30], resposta[30]; letra tabEsp[tamanho]={NULL,NULL,NULL}; printf("Insira 3 letras diferentes, você guardará nomes com essas iniciais depois desse processo: "); while(qtd<4) { letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let->pontpnome=NULL; ini->pont=NULL; inserir(&let, tabEsp, &ini, qtd); system("pause"); system("cls"); qtd++; } puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)"); while(resposta!="NAO") { letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let=NULL; ini=NULL; inserir(&let, tabEsp, &ini, qtd); printf("Você quer continuar?[Sim/Nao]"); scanf("%s", &resposta); system("pause"); system("cls"); } return 0; } int chave(char nome[30]) { unsigned int resultado= (int)nome[0]%tamanho; if(resultado<0) resultado=-resultado; return resultado; } void inserir (letra **Let, letra tabEsp[tamanho], vetnome **Ini, int qtd) { char nome[30]; puts("Digite um nome: "); scanf("%s", &nome); int chaveres=chave(nome); vetnome *aux2; aux2=Ini; letra *aux; aux=Let; if(chaveres==1) { if(tabEsp[chaveres].L==NULL) { letra *novo= (letra*) malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome); aux=novo; aux2=name; aux->pontpnome=&aux2; aux2->pont=NULL; return ; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2=name; aux2->pont=NULL; return; } } if(chaveres==2) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome[30]); aux2->pont=&name; name->pont=NULL; return; } } if(chaveres==3) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2->pont=name; name->pont=NULL; return; } } if (chaveres>3) { puts("Espaço não reservado!"); } }
  23. gramosiri2

    Exercicio Caixa Eletronico com Notas

    Exercicio Caixa eletrônico com Notas. Ola, estou tentando fazer um ex. aqui de um caixa eletrônico, onde precisa ser feito o saque apenas com as determinadas notas: 2, 5, 10, 20, 50 e 100 reais. Porém quando tento sacar 11 por exemplo ele soma uma nota de 10 apenas, acho que vai ter que tirar o mod, alguma ideia?? #include <stdio.h> #include <stdlib.h> int main() { int n100=0,n50=0,n20=0,n10=0,nota5=0,nota2=0; float valor=0; int op; printf("-> Quanto deseja sacar? R$"); scanf("%f",&valor); while(valor>=100){ valor=valor-100; n100=n100+1; } while(valor>=50){ valor=valor-50; n50=n50+1; } while(valor>=20){ valor=valor-20; n20=n20+1; } while(valor>=10){ valor=valor-10; n10=n10+1; } while(valor>=5){ valor=valor-5; nota5=nota5+1; } while(valor>=2){ valor=valor-2; nota2=nota2+1; } printf("SAQUE:\n"); printf("%d nota(s) de R$ 100.00\n",n100); printf("%d nota(s) de R$ 50.00\n",n50); printf("%d nota(s) de R$ 20.00\n",n20); printf("%d nota(s) de R$ 10.00\n",n10); printf("%d nota(s) de R$ 5.00\n",nota5); printf("%d nota(s) de R$ 2.00\n",nota2); return 0; }
  24. Não estou conseguindo entender esse programa em c , tem como me ajudar? Escreva um programa que armazene 40 elementos reais em um vetor. Mostrar o vetor e informar quantos números existem em cada faixa: Faixa 1 -> 1 - 100 Faixa 2 -> 200 - 450 Faixa 3 -> 501 - 745.5 Faixa 4 -> 800.5 - 920.9
  25. Cartilho

    Implementação do Radix sort

    Ao executar o meu .cpp ele tem feito tudo corretamente com todos os metodos, menos o radix, ele tem q calcular os tempos e fazer a media depois, ele não tem feito isso com o radix e não sei oq fazer, preciso muito de ajuda e uma solução, ja tentei de tudo, mas não sou bom em C++. link para ver funcionando: https://www.onlinegdb.com/fork/rkRmSLk24 #include <stdio.h> #include <time.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <chrono> #include <unistd.h> #include <iostream> using namespace std; int *v, *v1, *v2, *v3, *v4, *v5, *v6, *v7; //------------------------------------------------------------------------------------- void bubbleSort(int v[], int n) { bool trocou; int k = n; do { trocou = false; k--; for (int i = 0; i < k; i++) if (v[i+1] < v[i]) { int aux = v[i+1]; v[i+1] = v[i]; v[i] = aux; trocou = true; } } while (trocou); } //------------------------------------------------------------------------------------- void insertionSort(int v[], int n) { int i, j, chave; for (j = 1; j < n; j++) { chave = v[j]; i = j - 1; while (i >= 0 && v[i] > chave) { v[i+1] = v[i]; i--; } v[i+1] = chave; } } //------------------------------------------------------------------------------------- void selectionSort(int v[], int n) { int i, j, min; for(i = 0; i < n-1; i++) { min = i; for (j = i + 1; j < n; j++) if (v[j] < v[min]) min = j; if (min != i) { int temp = v[min]; v[min] = v[i]; v[i] = temp; } } } //------------------------------------------------------------------------------------- void shellSort(int v[], int n) { int i , j , valor; int h = 1; while(h < n) { h = 3*h+1; } while (h > 1) { h /= 3; for(i = h; i < n; i++) { valor = v[i]; j = i - h; while (j >= 0 && valor < v[j]) { v [j + h] = v[j]; j -= h; } v [j + h] = valor; } } } //------------------------------------------------------------------------------------- void quickSort1(int v[], int ini, int fim) { int i = ini; int j = fim; int pivo = v[(ini+ fim)/2]; // Pivo e o elemento central do { while (v[i] < pivo && i < fim) i++; while (pivo < v[j] && j > ini) j--; if (i <= j) { int aux = v[i]; v[i] = v[j]; v[j] = aux; i++; j--; } } while (i <= j); if (ini < j) quickSort1(v,ini,j); if (i < fim) quickSort1(v,i,fim); } void quickSort(int v[], int tam) { quickSort1(v, 0, tam-1); } //------------------------------------------------------------------------------------- void intercala(int v[], int aux[], int ini, int meio, int fim) { int i = ini, j = fim, k; for (k = ini; k <= meio; k++) aux[k] = v[k]; for (k = meio+1; k <= fim; k++) aux[fim + meio + 1 - k] = v[k]; for (k = ini; k <= fim; k++) if (aux[i] <= aux[j]) v[k] = aux[i++]; else v[k] = aux[j--]; } void mergeSort1(int v[], int aux[], int ini, int fim) { if (ini < fim) { int meio = (ini + fim) / 2; mergeSort1(v, aux, ini, meio); mergeSort1(v, aux, meio+1, fim); intercala(v, aux, ini, meio, fim); } } void mergeSort(int v[], int n) { int *aux = (int *) malloc(n * sizeof(int)); mergeSort1(v, aux, 0, n-1); free(aux); } //------------------------------------------------------------------------------------- int getMax(int v[], int tam) { int max = v[0]; for (int i = 1; i < tam; i++) if (v[i] > max) max = v[i]; return max; } void countSort(int v[], int tam, int exp) { int output[tam], i, count[10] = {0}; for (i = 0; i < tam; i++) count[(v[i] / exp) % 10]++; for (i = 1; i < 10; i++) count[i] += count[i-1]; for (i = tam - 1; i >= 0; i--) { output[count[(v[i] / exp) % 10] - 1] = v[i]; count[(v[i] / exp) % 10]--; } for (i = 0; i < tam; i++) v[i] = output[i]; } void radixsort(int v[], int tam) { int exp, m; m = getMax(v, tam); for (exp = 1; m/exp > 0; exp *= 10) countSort(v, tam, exp); } //------------------------------------------------------------------------------------- void gerar(int v[], int tam) { srand((unsigned int)time(NULL)); for (int i = 0; i < tam; i++) v[i] = rand() % 100000001; } //------------------------------------------------------------------------------------- void copiar(int origem[], int destino[], int n) { for (int i = 0; i < n; i++) destino[i] = origem[i]; } //------------------------------------------------------------------------------------- bool verifica(int v[], int n) { for (int i = 0; i < n-1; i++) if (v[i] > v[i+1]) return false; return true; } //------------------------------------------------------------------------------------- void inverte(int v[], int n) { for (int i = 0, j = n-1; i < n/2; i++,j--) v[i] = v[j]; } //------------------------------------------------------------------------------------- int main(void) { chrono::steady_clock::time_point start, end; long double cpu_time; int tam, iter; char metodos[100]; long double tempo[] = { 0, 0, 0, 0, 0, 0 }; tam = 0; printf("Quantos numeros? "); scanf("%d", &tam); getchar(); if (tam <= 0) return 0; printf("Selecione os metodos:\n 1-Bubble sort\n 2-Selection sort\n 3-Insertion sort\n 4-Shell sort\n 5-Quicksort\n 6-Mergesort\n 7-Radix sort\nMetodos: "); gets(metodos); printf("Quantas execucoes (1, 2, 3, ...)? "); scanf("%d", &iter); getchar(); if (iter <= 0) return 0; v = (int *) malloc(tam * sizeof(int)); v1 = (int *) malloc(tam * sizeof(int)); v2 = (int *) malloc(tam * sizeof(int)); v3 = (int *) malloc(tam * sizeof(int)); v4 = (int *) malloc(tam * sizeof(int)); v5 = (int *) malloc(tam * sizeof(int)); v6 = (int *) malloc(tam * sizeof(int)); v7 = (int *) malloc(tam * sizeof(int)); for (int i = 1; i <= iter; i++) { printf("------------------------------------------------\nExecucao %d:\n------------------------------------------------\n", i); printf("Gerando %d elementos...\n", tam); gerar(v, tam); copiar(v, v1, tam); copiar(v, v2, tam); copiar(v, v3, tam); copiar(v, v4, tam); copiar(v, v5, tam); copiar(v, v6, tam); copiar(v, v7, tam); // bubble if (strchr(metodos, '1') != NULL) { printf("Bubble sort...\n"); start = chrono::steady_clock::now(); bubbleSort(v1, tam); end = chrono::steady_clock::now(); cpu_time = chrono::duration_cast<chrono::nanoseconds>(end - start).count() / (long double) 1000000.0; printf("%s. Tempo: %lf ms (%lf s)\n", verifica(v1, tam) ? "OK":"ERRO", cpu_time, cpu_time/1000); tempo[0] += cpu_time; } // selection if (strchr(metodos, '2') != NULL) { printf("Selection sort...\n"); start = chrono::steady_clock::now(); selectionSort(v3, tam); end = chrono::steady_clock::now(); cpu_time = chrono::duration_cast<chrono::nanoseconds>(end - start).count() / (long double) 1000000.0; printf("%s. Tempo: %lf ms (%lf s)\n", verifica(v3, tam) ? "OK":"ERRO", cpu_time, cpu_time/1000); tempo[1] += cpu_time; } // insertion if (strchr(metodos, '3') != NULL) { printf("Insertion sort...\n"); start = chrono::steady_clock::now(); insertionSort(v2, tam); end = chrono::steady_clock::now(); cpu_time = chrono::duration_cast<chrono::nanoseconds>(end - start).count() / (long double) 1000000.0; printf("%s. Tempo: %lf ms (%lf s)\n", verifica(v2, tam) ? "OK":"ERRO", cpu_time, cpu_time/1000); tempo[2] += cpu_time; } // shell if (strchr(metodos, '4') != NULL) { printf("Shell sort...\n"); start = chrono::steady_clock::now(); shellSort(v4, tam); end = chrono::steady_clock::now(); cpu_time = chrono::duration_cast<chrono::nanoseconds>(end - start).count() / (long double) 1000000.0; printf("%s. Tempo: %lf ms (%lf s)\n", verifica(v4, tam) ? "OK":"ERRO", cpu_time, cpu_time/1000); tempo[3] += cpu_time; } // quick if (strchr(metodos, '5') != NULL) { printf("Quick sort...\n"); start = chrono::steady_clock::now(); quickSort(v5, tam); end = chrono::steady_clock::now(); cpu_time = chrono::duration_cast<chrono::nanoseconds>(end - start).count() / (long double) 1000000.0; printf("%s. Tempo: %lf ms (%lf s)\n", verifica(v5, tam) ? "OK":"ERRO", cpu_time, cpu_time/1000); tempo[4] += cpu_time; } // merge if (strchr(metodos, '6') != NULL) { printf("Merge sort...\n"); start = chrono::steady_clock::now(); mergeSort(v6, tam); end = chrono::steady_clock::now(); cpu_time = chrono::duration_cast<chrono::nanoseconds>(end - start).count() / (long double) 1000000.0; printf("%s. Tempo: %lf ms (%lf s)\n", verifica(v6, tam) ? "OK":"ERRO", cpu_time, cpu_time/1000); tempo[5] += cpu_time; } //radixsort if (strchr(metodos, '7') != NULL) { printf("Radix sort...\n"); start = chrono::steady_clock::now(); radixsort(v7, tam); end = chrono::steady_clock::now(); cpu_time = chrono::duration_cast<chrono::nanoseconds>(end - start).count() / (long double) 1000000.0; printf("%s. Tempo: %lf ms (%lf s)\n", verifica(v7, tam) ? "OK":"ERRO", cpu_time, cpu_time/1000); tempo[6] += cpu_time; } } if (iter > 1) { printf("-------------------------------------------\nTempos medios:\n"); if (strchr(metodos, '1') != NULL) printf("Bubble sort: %lf ms (%lf s)\n", tempo[0]/iter, tempo[0]/(iter*1000)); if (strchr(metodos, '2') != NULL) printf("selection sort: %lf ms (%lf s)\n", tempo[1]/iter, tempo[1]/(iter*1000)); if (strchr(metodos, '3') != NULL) printf("Insertion sort: %lf ms (%lf s)\n", tempo[2]/iter, tempo[2]/(iter*1000)); if (strchr(metodos, '4') != NULL) printf("Shell sort: %lf ms (%lf s)\n", tempo[3]/iter, tempo[3]/(iter*1000)); if (strchr(metodos, '5') != NULL) printf("Quick sort: %lf ms (%lf s)\n", tempo[4]/iter, tempo[4]/(iter*1000)); if (strchr(metodos, '6') != NULL) printf("Merge sort: %lf ms (%lf s)\n", tempo[5]/iter, tempo[5]/(iter*1000)); if (strchr(metodos, '7') != NULL) printf("Radix sort: %lf ms (%lf s)\n", tempo[6]/iter, tempo[6]/(iter*1000)); } free(v); free(v1); free(v2); free(v3); free(v4); free(v5); free(v6); free(v7); }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.