Jump to content

All Activity

This stream auto-updates     

  1. Today
  2. Yesterday
  3. Interessante... eu nunca tinha visto esse padrão de nome. Não me parece o name decoration / mangling normal de C++. E mesmo assim o extern "C" deveria impedir a decoração, claro, já que C não tem sobrecarga de funções. Será que não há uma função com o mesmo nome nessa pch.h? Achei uma discussão longa de um usuário com um problema muito parecido, inclusive ele cita o mesmo padrão de nomes aqui. Bem, eu iria com baby steps, saca? Compila a menor possível, checa os exports e, se tiver tudo certo, vai crescendo o código e checando os exports da DLL compilada, até encontrar o problema. Por exemplo, o código abaixo foi sem problemas aqui: // user_force.h int _stdcall USER_FORCE(int a, int b); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } // user_force.cpp extern "C" __declspec(dllexport) int _stdcall USER_FORCE(int a, int b) { return a + b; } Compilação: c:\Users\admin\Documents>cl /LD user_force.cpp Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.01 for x64 Copyright (C) Microsoft Corporation. All rights reserved. user_force.cpp Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:user_force.dll /dll /implib:user_force.lib user_force.obj Creating library user_force.lib and object user_force.exp Checagem dos exports: c:\Users\admin\Documents>dumpbin /exports user_force.dll Microsoft (R) COFF/PE Dumper Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file user_force.dll File Type: DLL Section contains the following exports for user_force.dll 00000000 characteristics 5ECD966F time date stamp Tue May 26 23:21:35 2020 0.00 version 1 ordinal base 1 number of functions 1 number of names ordinal hint RVA name 1 0 00001000 USER_FORCE Summary 3000 .data 1000 .pdata 2000 .rdata 1000 .reloc Daí seria ir acrescentando o código e recompilando toda hora, até achar o problema... Mas pode ser que alguém saiba exatamente o que ocorre aqui e ajude também. Abraço!
  4. E ai Pessoal! Beleza? Estou trabalhando com simulações no Ansys (AQWA) e estou tendo problemas para compilar uma DLL que exportará funções para a simulação. Estou usando o Visual Studio 2019, com um tamplate Biblioteca de Vínculo Dinâmico (DLL). Sou bem iniciante com este tipo de programação, pelo desculpas caso o erro seja muito tolo Esses são os meus algortimos: //user_force64.cpp #include "user_force.h" #include "pch.h" #include <stdio.h> extern "C" { __declspec(dllexport) void _stdcall USER_FORCE(int* Mode, int I_Control[100], float R_Control[100], int* Nstruc, float* Time, float* TimeStep, int* Stage, float Position[][6], float Velocity[][6], float Cog[][3], float Force[][6], float Addmass[][6][6], int* ErrorFlag) { // // *** Visual C++ Template // ----------------------- // // 1. Uses stdcall calling convention // 2. Routine name MUST be in upper case // 3. All parameters are passed as pointers // // Input Parameter Description: // // Mode int* - 0 = Initialisation. This routine is called once with mode 0 // before the simulation. All parameters are as described // below except for STAGE, which is undefined. FORCES and // ADDMAS are assumed undefined on exit. // IERR if set to > 0 on exit will cause // the simulation to stop. // // 1 = Called during the simulation. FORCE/ADDMAS output expected. // // 99 = Termination. This routine is called once with mode 99 // at the end of the simulation. // // I_Control[100] - User-defined integer control parameters input in .DAT file. // (int*) // // R_Control[100] - User-defined real control parameters input in .DAT file. // (float*) // // Nstruc int* - Number of structures in the the simulation // // Time float* - The current time (see Stage below) // // Timestep float* - The current timestep (DT, see Stage below) // // Stage int* - The stage of the integration scheme. AQWA time integration is // based on a 2-stage predictor corrector method. This routine is // therefore called twice at each timestep, once with STAGE=1 and // once with STAGE=2. On stage 2 the position and velocity are // predictions of the position and velocity at TIME+DT. // e.g. if the initial time is 0.0 and the step 1.0 seconds then // calls are as follows for the 1st 3 integration steps: // // CALL USER_FORCE(.....,TIME=0.0,TIMESTEP=1.0,STAGE=1 ...) // CALL USER_FORCE(.....,TIME=0.0,TIMESTEP=1.0,STAGE=2 ...) // CALL USER_FORCE(.....,TIME=1.0,TIMESTEP=1.0,STAGE=1 ...) // CALL USER_FORCE(.....,TIME=1.0,TIMESTEP=1.0,STAGE=2 ...) // CALL USER_FORCE(.....,TIME=2.0,TIMESTEP=1.0,STAGE=1 ...) // CALL USER_FORCE(.....,TIME=2.0,TIMESTEP=1.0,STAGE=2 ...) // // Cog[Nstruc][3] - Position of the Centre of Gravity in the Definition axes. // // Position[Nstruc][6] - Position of the structure in the FRA - angles in radians // (float*) // // Velocity[Nstruc][6] - Velocity of the structure in the FRA // (float*) angular velocity in rad/s // // // Output Parameter Description: // // Force[Nstruc][6] - Force on the Centre of gravity of the structure. NB: these // (float) forces are applied in the Fixed Reference axis e.g. // the surge(X) force is ALWAYS IN THE SAME DIRECTION i.e. in // the direction of the X fixed reference axis. // // Addmass[Nstruc][6][6] // (float) - Added mass matrix for each structure. As the value of the // acceleration is dependent on FORCES, this matrix may be used // to apply inertia type forces to the structure. This mass // will be added to the total added mass of the structure at each // timestep at each stage. // // Errorflag int* - Error flag. The program will abort at any time if this // error flag is non-zero. The values of the error flag will // be output in the abort message. int i, j; int struc = 1; //------------------------------------------------------------------------ // MODE#0 - Initialise any summing variables/open/create files. // This mode is executed once before the simulation begins. //------------------------------------------------------------------------ if (*Mode == 0) { } //------------------------------------------------------------------------ // MODE#1 - On-going - calculation of forces/mass //------------------------------------------------------------------------ else if (*Mode == 1) { for (struc = 0; struc < *Nstruc; struc++) { for (i = 0; i < 6; i++) { Force[struc][i] = 2 * Velocity[struc][i]; for (j = 0; j < 6; j++) { Addmass[struc][j][i] = 0.0; } } } *ErrorFlag = 0; } //------------------------------------------------------------------------ // MODE#99 - Termination - Output/print any summaries required/Close Files // This mode is executed once at the end of the simulation //------------------------------------------------------------------------ else if (*Mode == 99) { } //------------------------------------------------------------------------ // MODE# ERROR - OUTPUT ERROR MESSAGE //------------------------------------------------------------------------ else { } return; } } -------------------------------------------------------------------- //user_force.h #pragma once extern "C" { __declspec(dllexport) void _stdcall USER_FORCE(int* Mode, int I_Control[100], float R_Control[100], int* Nstruc, float* Time, float* TimeStep, int* Stage, float Position[][6], float Velocity[][6], float Cog[][3], float Force[][6], float Addmass[][6][6], int* ErrorFlag) } -------------------------------------------------------------------------- // dllmain.cpp : Define o ponto de entrada para o aplicativo DLL. #include "pch.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } Depois de usar o comando dumpbin /exports na DLL gerada, esta é a mensagem: Section contains the following exports for user_force64.dll 00000000 characteristics FFFFFFFF time date stamp 0.00 version 1 ordinal base 1 number of functions 1 number of names ordinal hint RVA name 1 0 00011046 _USER_FORCE@52 = @ILT+65(_USER_FORCE@52) Summary 1000 .00cfg 1000 .data 1000 .idata 1000 .msvcjmc 2000 .rdata 1000 .reloc 1000 .rsrc 6000 .text 10000 .textbss E quando uso o mesmo comando em uma DLL funcional, este é o output Dump of file user_force64.dll File Type: DLL Section contains the following exports for user_force64.dll 00000000 characteristics 5D3F15AA time date stamp Mon Jul 29 12:50:02 2019 0.00 version 1 ordinal base 1 number of functions 1 number of names ordinal hint RVA name 1 0 00001000 USER_FORCE Summary 1000 .data 1000 .pdata 1000 .rdata 1000 .reloc 1000 .rsrc 1000 .text Aparentemente errei alguma coisa na compilação, o que causou a diferença no nome da função exportada.
  5. Uma carta aberta assinada por algumas personalidades como ministros de Relações Exteriores, ex-presidentes, ganhadores do Prêmio Nobel, e diretores de empresas de tecnologia solicita ao governo e à Organização das Nações Unidas (ONU) que ajudem a impedir ataques cibernéticos direcionados a instalações médicas e de pesquisa durante a disseminação do novo coronavírus (COVID-19). De acordo com o Cybersecurity Insiders, a carta é liderada pelo CyberPeace Institute – organização estabelecida pela Microsoft, fundada em 2019, com apoio da Mastercard e da Hewlett Foundation – e apoiada pelo Comitê Internacional da Cruz Vermelha. O pedido é para que todos os governos de todo o mundo se unam no combate a ataques cibernéticos a hospitais e organizações de saúde pública. "É preciso haver um plano de regras internacionais a serem seguidas pelos governos para combater o cibercrime", acrescenta a carta. Entre os nomes que assinaram a carta está o presidente da Microsoft, Brad Smith; o dono da empresa russa de segurança cibernética Kaspersky, Eugene Kaspersky; o ex-presidente mexicano Ernesto Zedillo; o secretário geral da ONU, Ban ki-Moon; e alguns agentes da Interpol.
  6. Last week
  7. Dei uma olhada no código e fiz algumas alterações, algumas simples, outras mais drásticas, mas mantendo o espírito do código original. Vou mostrando o código e explicando na sequência. //BIBLIOTECAS #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> //CONSTANTES #define FILA_TAMANHO 20 #define ESTADO_TAMANHO 51+1 #define CIDADE_TAMANHO 51+1 #define BAIRRO_TAMANHO 51+1 #define RUA_TAMANHO 101+1 Mantive as mesmas bibliotecas. Adicionei mais constantes, baseadas nos tamanhos das strings da struct Denuncia. As definições das constantes estão em caixa alta por padrões adotados em outros códigos, porém isso é totalmente opcional. O +1 explicarei depois. //DEFINIÇÃO DAS STRUCUTS typedef struct Denuncia { char estado[ESTADO_TAMANHO]; char cidade[CIDADE_TAMANHO]; char bairro[BAIRRO_TAMANHO]; char rua[RUA_TAMANHO]; int numero; } Denuncia; typedef struct FilaDenuncias { Denuncia denuncias[FILA_TAMANHO]; int tamanhoDaFila; } FilaDenuncias; A struct Denuncia teve alterações nos campos numero, ini e fim. O campo numero não é mais um array de ints, em vez disso, passa a ser um int comum. Os campos ini e fim foram removidos pois nada no código fazia referência a eles. Além disso, criei um novo struct FilaDenuncias, que agrega tanto o array de denúncias quanto o total de denúncias inseridas. Note que não há mais declarações globais de variáveis. //PROTOTIPAÇÃO void Denuncia_Inserir(FilaDenuncias *fila); void Denuncia_Excluir(FilaDenuncias *fila); void Denuncia_Imprimir(FilaDenuncias *fila); int Menu_Executar(); void Pausa(); void Remover_EOL(char* str); Aqui começam as mudanças mais brabas. Como não há mais a fila global de denuncias, para cada operação que deve ser executada na fila, esta deve ser passada por referência, exceto na função Denuncia_Imprimir, onde é admissível passar a fila por valor. A função de exibir o menu passa também a gerenciar a entrada do usuário, por isso a mudança do nome para Menu_Executar. O retorno agora é int, pois a função retornará a opção do usuário. Outras duas funções foram adicionadas. Pausa foi criada para eliminar as chamadas do system("pause"), de modo a tornar o código mais portável. Remover_Char foi criada para eliminar caracteres específicos de uma string. Seu uso será justificado depois. Agora, para a função main: int main(){ // DECLARAÇÕES int op = -1; FilaDenuncias filaDenuncias; filaDenuncias.tamanhoDaFila = 0; // INCLUINDO PT-BR setlocale(LC_ALL, "Portuguese"); ... return 0; } Note que as estruturas que antes eram de escopo global passam a ser localmente declaradas em main. Uma fila de denúncias é inicializada. int main(){ ... while ((op = Menu_Executar()) != 0) { switch (op){ case 1: Denuncia_Inserir(&filaDenuncias); break; case 2: Denuncia_Imprimir(&filaDenuncias); break; case 3: Denuncia_Excluir(&filaDenuncias); break; default: printf("Opcao Inválida \n\n"); break; } Pausa(); } return 0; } No loop principal da aplicação, a condicional chama a própria função Menu_Executar. As funções agora necessitam da referência da fila de denúncias. Após cada ação, o programa pausa. Agora, a implementação de cada função //ADICIONAR ELEMENTO AO FIM DA FILA void Denuncia_Inserir(FilaDenuncias *fila){ int i = fila->tamanhoDaFila; if (fila->tamanhoDaFila == FILA_TAMANHO){ ... } else { ... } } Essa foi a função que teve as mudanças mais radicais. Na primeira linha, criei uma variável temporária "i" para não ter que escrever fila->tamanhoDaFila o tempo todo e deixar o código mais limpo. A verificação feita para não exceder o tamanho máximo do array de denúncias agora é feito com a constante definida no início do código. //ADICIONAR ELEMENTO AO FIM DA FILA void Denuncia_Inserir(FilaDenuncias *fila){ int i = fila->tamanhoDaFila; if (fila->tamanhoDaFila == FILA_TAMANHO){ ... } else { while(getchar() != '\n'); printf("Digite o Estado: "); fgets(fila->denuncias[i].estado, ESTADO_TAMANHO, stdin); Remover_EOL(fila->denuncias[i].estado); ... printf("Digite o Número do Imóvel: "); scanf("%d", &(fila->denuncias[i].numero)); fila->tamanhoDaFila++; printf("Denúncia cadastrada!\n"); } } A lógica principal da inserção de denúncias. A primeira linha (while(getchar() != '\n') limpa o buffer de teclas pressionadas (stdin) até encontrar um '\n'. Isso faz com que a primeira entrada da denúncia (estado) não seja ignorada com o '\n' gerado pelo pressionar do enter utilizado para entrar na opção. Os campos que são strings (char*) são preenchidos com a função fgets, e não mais com a função scanf. A função fgets lê bytes de um arquivo até um número especificado de bytes ou encontrar uma quebra de linha ou fim do arquivo (EOF). O arquivo que será lido na verdade é o stdin, que é um arquivo "interno" da linguagem que armazena as teclas pressionadas. Ao fim, os caracteres são escritos na string designada. Depois disso, é removido o caractere '\n' gerado por causa da entrada no fgets através da função Remover_EOL. O número de caracteres máximo definido no início é +1 para que se possa comportar esse '\n' adicional. Para a cidade, bairro e rua, a lógica é a mesma. O número é lido apenas uma vez. No fim, o tamanho da fila é alterado. //EXCLUIR O PRIMEIRO ELEMENTO DA FILA void Denuncia_Excluir(FilaDenuncias *fila){ if (fila->tamanhoDaFila == 0){ printf("Não há Denúncias cadastradas...\n"); printf("Cadastre as suas denúncias...\n\n"); }else { int i; for (i = 0; i < fila->tamanhoDaFila; i++){ fila->denuncias[i] = fila->denuncias[i+1]; } fila->tamanhoDaFila--; printf("Denúncia excluída!\n"); } } Esta é a função que exclui a primeira denúncia da fila. Não foi muito alterada, exceto pela remoção de uma linha que, creio eu, sobrescrevia a denúncia na antiga posição da denúncia mais nova, que é desnecessária, em termos práticos. //IMPRIMIR O CONTEÚDO DAS DENÚNCIAS void Denuncia_Imprimir(FilaDenuncias *fila){ int i; if (fila->tamanhoDaFila == 0){ printf("Não há denúncias cadastradas.\n"); printf("Cadastre alguma denúncia...\n\n"); }else { printf("DENÚNCIAS CADASTRADAS\n"); for (i = 0; i < fila->tamanhoDaFila; i++){ printf("\n"); printf("Estado: %s \n", fila->denuncias[i].estado); printf("Cidade: %s \n", fila->denuncias[i].cidade); printf("Bairro: %s \n", fila->denuncias[i].bairro); printf("Rua: %s \n", fila->denuncias[i].rua); printf("Número: %d \n\n", fila->denuncias[i].numero); } } } Função para imprimir na tela as denúncias. Pouca coisa mudou, também. No entanto, note o uso dos operadores . e ->. Deve-se tomar cuidado aqui e em outros pontos do código onde esses operadores são usados. A variável "fila" é um ponteiro para uma FilaDenuncias, e não uma FilaDenuncias em si! Para acessar os membros da estrutura FilaDenuncias a qual "fila" aponta, usa-se ->: fila->denuncias. Note, agora, que denuncias não é um ponteiro, ele é um próprio exemplo direto da struct denuncia. Portanto, para acessar os membros de denuncias basta usar o .: denuncias.estado. Juntando tudo, fila->denuncias.estado é o campo "estado" da estrutura "denuncias", que por sua vez é um campo de uma FilaDenuncias apontada por "fila". int Menu_Executar(){ int op; printf("Escolha uma opção:\n"); printf("1- Cadastrar Denúncia\n"); printf("2- Exibir Denúncia\n"); printf("3- Excluir Denúncia\n"); printf("0- Sair\n\n"); printf("Digite aqui: "); scanf("%d", &op); return op; } A função que antes apenas exibia o menu agora também gerencia a entrada da opção. void Pausa() { printf("Pressione enter para continuar...\n"); while(getchar() != '\n'); getchar(); } Essa função foi criada para lidar com a pausa e substituir as linhas system("pause"). A função system passa um comando para o sistema operacional executar, que nesse caso é "pause". Ocorre que a chamada "pause" funcionará apenas em Windows. De modo a tornar o programa agnóstico de SO, criei essa função. a linha while(getchar() != '\n') funciona como ele é usado na função de inserir denúncia, para que qualquer '\n' no fluxo de entrada não seja capturado pelo getchar() subsequente, fazendo que a pausa seja ignorada. void Remover_EOL(char* str) { char* posicao = strchr(str, '\n'); if (posicao != NULL) *posicao = '\0'; } Finalmente, a função que remove o '\n' no final da string. A função strchr retorna um ponteiro para a primeira ocorrência do char solicitado (que aqui é um '\n'. Se for encontrado, a linha *posicao = '\0'" faz com que o local onde aponta "posição" seja alterado para '\0', que indica final de uma string. O código completo tá em anexo. Boa sorte com os estudos e aproveite! dengue.c
  8. Você tem algum serviço escutando na porta 80 no seu host? Porque você tá enviando o pacote, mas se não tiver ninguém pra responder, não vai ter resposta mesmo. 😉 Você não falou em que SO está, mas se for Linux/macOS, experimenta escutar com o netcat, numa porta alta pra não precisar de root, por exemplo: $ nc -vlp 3000 E depois tenta enviar seu TCP SYN pra ela usando o Scapy (dport=3000 no teu código). Enfim, basicamente você precisa falar com uma porta que esteja aberta (haja algum serviço escutando nela). Abraço!
  9. Java and C were already very close in April, but this month C surpasses Java again. The last time C was number one was back in 2015. We can only guess why C is number one again. One of the reasons might be the Corona virus. This might sound silly but some programming languages really benefit from this situation. Examples are Python and R in the data sciences area because everybody is searching for an antidote for the virus. But also embedded software languages such as C and C++ are gaining popularity because these are used in software for medical devices. On another note, it is also worth mentioning that Rust is really getting close to the top 20 now (from #27 to #21 within one month). - Paul Jansen CEO TIOBE Software Tiobe
  10. Essa função cria um nó com o dado "valor" e o acrescenta ao final da lista "l"
  11. O cavalo de tróia (trojan) AnarchyGrabber foi atualizado por cibercriminosos para roubar senhas e tokens de usuários, desativar a autenticação de dois fatores (2FA) e espalhar malware para contatos da vítima. De acordo com o BleepingComputer, esse trojan já é popular e geralmente distribuído gratuitamente em fóruns e vídeos do YouTube. O alvo dos ataques é o Discord, um aplicativo de voz projetado para comunidades de jogos. Os atacantes distribuem o trojan no Discord, fingindo ser um truque de jogo, ferramenta de hacking ou software protegido por direitos autorais, e quando instalado, os arquivos JavaScript do cliente Discord são modificadas e viram um malware que rouba o token de usuário do Discord da vítima. A nova versão do malware foi denominada AnarchyGrabber3. A única maneira de remover o malware é desinstalando e instalando o Discord novamente. Para verificar a possibilidade de estar infectado, é possível abrir o abrir o arquivo AppData%\Discord\[version]\modules\discord_desktop_core\index.js file with no Bloco de Notas e verificar se há modificações. Um arquivo normal e não modificado terá a seguinte linha única: module.exports = require('./core.asar');
  12. o que sugeri foram pedaços isolados de código apenas para exemplificar o que estava dizendo. Não é pra vc copiar e colar... Mas o problem da duplicidade é simplesmente o fato de vc estar chamando o printf duas vezes...
  13. O código que você mandou tá dando erro
  14. sai repetido pq vc está printando 2 vezes ué '-' não tem necessidade desses IFs todos, veja o que sugeri pra parte de comparação e separação dos nomes com maior e menor peso
  15. Muito bom pessoal, parabéns pelo evento. Cara seria massa ver alguém falando sobre segurança dentro de uma empresa de telecomunicação, tipo a oi e a vivo e talz... Abraço e obrigado pelos ótimos eventos pessoal!
  16. Olá pessoal, sou novo aqui e iniciante no aprendizado. Estou fazendo Faculdade de ADS; e como Portfólio do 1º Semestre tivemos que começar a desenvolver um programa. Esse programa deveria ser em C. E deveria conter algumas obrigações. O usuário deverá cadastrar denúncias de focos de Dengue. Ele também pode visualizar as suas denúncias e excluí-las. O máximo é de 20 denúncias. Anexei o código como eu entreguei, porém, não está perfeito. Tem alguns problemas e não sei como resolver. Gostaria dou auxílio de você sobre o que eu devo fazer para que as funções sejam completas corretamente. É a minha primeira publicação, então não conheço bem as regras. CÓDIGO_ENTREGUE_ASSIM.c
  17. Tá quase pronto, mas o nome das pessoas sai repetido, tem como não acontecer isso?? desde já agradeço, você tem me ajudado muito!!
  18. Adicionei no meu código e ficou assim: #include <stdio.h> #include <string.h> int main(){ int pessoas, i; float peso,altura; float resultado = 0; float resultado2 = 0; char sexo; char nome[20]; char ela[21]; char ele[21]; char novoele[23]; char novoela[23]; printf("Digite o numero de pessoas: "); scanf("%i",&pessoas); for(i=0;i<pessoas;i++){ printf("Digite o nome da pessoa: "); scanf("%s", nome); printf("Digite seu peso: "); scanf("%f",&peso); printf("Digite 'M' para Sexo Masculino ou 'F' para Sexo Feminino: "); scanf("%s",&sexo); if(sexo == 'm' || sexo == 'M'){ while(peso > resultado){ resultado = peso; strncpy(ele, nome, 20); ele[20] = '\0'; } if(peso==resultado){ strncpy(novoele, nome, 20); novoele[20] = '\0'; }} else if(sexo == 'f' || sexo == 'F'){ while (peso > resultado2){ resultado2 = peso; strncpy(ela, nome, 20); ela[20] = '\0'; } if(peso == resultado2){ strncpy(novoela, nome, 20); novoela[20] = '\0'; }}} printf("A(s) Mulher(es) de menor peso: %.2f kg", resultado2); printf(" %s ", ela); printf(" %s ", novoela); printf("\nO(s) Homem(ns) de maior peso: %.2f kg", resultado); printf(" %s ", ele); printf(" %s ", novoele); return 0; }
  19. Tente construir algo se baseando nestes materiais e caso tenha alguma dúvida, poste aqui sobre repetições: https://youtu.be/SCdXdotTnTo sobre funções: https://youtu.be/OkmYNLFxTKg sobre o rand: (eu tinha a impressão que o @Fernando Mercês falava desse cara em algum vídeo) http://linguagemc.com.br/valores-aleatorios-em-c-com-a-funcao-rand/
  20. Os nomes das pessoas com maior e menor peso não estão sendo exibidos porque vc não armazenou em nenhum lugar como fez com os pesos. char mulher_menor_peso[21]; char homem_maior_peso[21]; // pra salvar o nome da mulher com menor peso vc pode fazer o seguinte quando encontrar esse menor peso strncpy(mulher_menor_peso, nome, 20); mulher_menor_peso[20] = '\0'; //de forma semelhante, pode fazer o seguinte quando encontrar o homem com maior peso strncpy(homem_maior_peso, nome, 20); homem_maior_peso[20] = '\0'; você pode encontrar os pesos da seguinte forma: #include <float.h> float peso_homem = 0; float peso_mulher = FLT_MAX float temp_peso; //vai armazenar temporiamente o peso inserido pelo usuário, independente do sexo //especificamente para ver o peso, vc poderia fazer desta forma. char sexo; sexo = getchar(); switch(sexo) { case 'm': case 'M': if ( temp_peso < peso_muher) peso_mulher = temp_peso; //mais a rotina pra copiar o nome sugerida anteriormente break; case 'h': case 'H': if (temp_peso > peso_homem) peso_homem = temp_peso; //mais a rotina pra copiar o nome break; default: fprintf(stderr, "não sei de que sexo vc é\n\n"); break; //redundante de certa forma } Adicionalmente, tem esse artigo que fala um pouco sobre entrada de dados em C http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
  21. O aplicativo Todos Unidos, criado de maneira independente por funcionários do C6 Bank, tem como objetivo conectar pessoas nesta época de pandemia do novo coronavírus (COVID-19). Segundo artigo, o app já tem 145 projetos listados. Apesar de ter sido criado por funcionários do C6 Bank, a empresa destaca que não tem participação na iniciativa do Todos Unidos. "Os funcionários estão conduzindo o trabalho do app de maneira independente e como um projeto pessoal de voluntariado", diz o artigo. Desde instituições que assistem comunidades em situação de vulnerabilidade até pequenos negócios que buscam novas formas de seguir com as atividades, como vendedores de legumes, verduras e carnes, já cadastraram seu projeto em busca de ajuda para realizá-lo durante a crise. É possível também oferecer ajuda aos projetos por meio de doações, ou outro tipo de auxílio. O dono do projeto tem um espaço livre para escrever qual tipo de necessidade ele tem, e há ainda planos do app passar a fazer uma conexão entre a demanda e a oferta de ajuda, o que seria um mecanismo semelhante a um match de aplicativo de relacionamento. O app Todos Unidos está disponível para Android, com lançamento para iPhone previsto para esta semana.
  22. De nada 🙂 O código-fonte (à esquerda) é em C e pode ser compilado pra 16, 32 ou 64 sem problemas. Já o exemplo do código compilado à direita tá em Assembly e o fato de ter esse ".model small" acredito que só faça sentido em programas de 16-bits sim, mas aqui tem uma explicação mais completa: https://stackoverflow.com/questions/47252660/what-is-meaning-of-model-small-in-8086-programs Abraço!
  23. Opa, obrigado pela explicação. Tem alguma dica pra saber se o programa é 16bits ou 32bits? Este programa abaixo é 16bits também? Grato!
  24. Basicamente ele foi configurado com o awscli aws configure --profile paculabs Com isso ele pedirá access e secretkey. Mais info como instalar https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html Porém você pode usar o set_keys direto também no PACU. set_keys Add a set of AWS keys to the session and set them as the default Qualquer coisa estamos ai! Abs
  25. Isso é código de 16-bits. Nunca usei o MASM para tal, mas esse cara dá algumas dicas pra fazer funcionar: https://blog.fpmurphy.com/2017/11/16-bit-intel-assembly-on-windows-10.html - perceba que ele só rodou o binário no DOSBox (um emulador de DOS), mas compilou no MASM 6.14 e 7.10 (com a opção /omf). Enfim, dá um trabalhinho mas vai. 😉 Abraço!
  26. Criei um programa que o usuário informa seu nome, sexo e peso. E o resultado é retornar o nome da mulher com o menor peso e o nome do homem com maior peso, porém preciso de ajuda para que na saída fale o nome tanto dessa mulher quanto o homem, mas não tô conseguindo fazer isso. Só conseguir comparar os pesos. #include <stdio.h> #include <string.h> int main(){ int pessoas, i; float peso; float resultado = 0; float resultado2 = 0; char sexo; char nome[20]; printf("Digite o numero de pessoas: "); // quantas vezes o programa vai rodar para coletar os dados scanf("%i",&pessoas); for(i=0;i<pessoas;i++){ printf("Digite o nome da pessoa: "); scanf("%s", nome); printf("Digite seu peso: "); scanf("%f",&peso); printf("Digite [M] para Sexo Masculino ou [F] para Sexo Feminino: "); scanf("%s",&sexo); if(sexo == 'm' || sexo == 'M'){ while(peso > resultado){ resultado = peso; } } else if(sexo == 'f' || sexo == 'F'){ while(resultado2 == 0){ resultado2 = peso; } if (peso < resultado2){ resultado2 = peso; } } } printf("A Mulher de menor peso: %.2f kg", resultado2); printf("\nO Homem de maior peso: %.2f kg", resultado); printf(" %s ", nome); return 0; }
  27. Olá, Tenho um código que funciona que consegui de outra postagem aqui do site: Eu queria fazer este código simples funcionar: ;[ORG 0x100] MOV AH, 9 ; AH deve ser 9 para a int 21 imprimir uma string MOV DX, msg ; DX=Ponteiro para msg INT 0x21 MOV AX, 0x4C00 ; Termina o programa INT 0x21 msg DB 'HelloWorld!$' ; Insere a mensagem que é uma string terminada em "$" Como faço pra esse pequeno código acima funcionar? Vejam a imagem a seguir. Eu quero fazer o código da esquerda ir para o editor à direita e rodar: Obrigado pela ajuda!
  28. Olá, Eu estava meio perdido quanto ao conteúdo(características) de cada tipo de código que eu deveria colocar no meu código pra rodar. Acabei por descobrir que há o "Nasm", "Tasm" e "Masm" e cada um tem suas particularidades e "convenções". Tentei os 3 programas mas só consegui fazer funcionar usando o "Masm" com a função do editor do Masm e seguindo o tutorial que esta neste link: Enfim, deu certo. Gostei do MASM também porque da pra usar os "invoke" para funções win32 de modo limpo e direto. Me corrijam se eu falar besteira. Muito obrigado! Resolvido!
  1. Load more activity
×
×
  • Create New...