
RonaldoRG
Membros-
Total de itens
259 -
Registro em
-
Última visita
Tudo que RonaldoRG postou
-
Vê se esse código serve pra você: #include <iostream> using namespace std; int main () { float massa = 1.0; // Massa inicial do material int tempo = 0; while(massa >= 0.5) { massa = massa / 2.0; tempo++; } cout << "Massa final: " << massa << "\ntempo: " << tempo*50 << " segundos"; }
-
É isso mesmo é bom limpar tudo no final do programa. E também é melhor na portabilidade do código. Valeu.
-
É isso mesmo que você disse, quando o programa fecha, o windows desaloca a memória SOMENTE no final do programa, mesmo que não libere a memória. O uso do delete é importante em algumas situações, como constantes alocamentos de memória, que se não forem liberados podem fazer o sistema travar por falta de memória. Agora é bom liberar manualmente porque o windows pode falhar nessa desalocação e deixar lixo na memória Abraço.
-
Nunca dei aulas de Linux mas já assisti algumas. Bom como toda aula, a abordagem vai depender muito das pessoas que vão assistir as aulas, se são experientes ou iniciantes, se é um curso introdutório ou avançado, do tempo do curso, e outras coisas mais. Comece pela história rápida do Linux, depois mostre as características dele, vantagens e desvantagens. Dai começa os conceitos (kernel, terminal, etc). Bom isso são algumas ideias de como eu faria. Boa Sorte pra você.
-
Basta verificar o resto da divisão de cada elemento. Se for 0 é par se não é impar. falou.
-
O erro tá no scanf, você tá usando %d. Tem que usar %f porque num é float. ... printf("Informe a %da nota ",i+1); scanf("%f",&num); // Antes tava scanf("%d",&num); ... vlw
-
Vê se esse código funciona ai: #include <stdio.h> #include <math.h> int main () { int num = 3; /// Numero para verificar se é primo int aux=1; if(num % 2 != 0) { for(int i = 3; i < sqrt(num); i = i + 2) { if(num % i==0) { aux = 0; break; } } } if(aux == 0) printf("não e primo"); else printf("E primo"); } Basta você verificar primeiro se é divisível por 2, senão verifica para os ímpares até a raiz quadrada do número. Assim o código fica mais rápido quando testamos para números grandes. Abraço.
-
Se quiser criar janelas, botões etc. você estuda sobre a api do windows (windows.h), Qt, Visual C++, e outros. No Google você acha muita coisa sobre eles, suas vantagens e desvantagens. Bons estudos. Abraço.
-
Ok eu mudei pro linux também e to adaptando meus códigos pra executar nele. Como C++ é padrão né então as mudanças são muito poucas. Eu ainda não usei a ncurses, mas quando tiver tempo eu vou experimentá-la. vlw.
-
(Resolvido) Meu programa está pronto,porém falta algum detalhe.
pergunta respondeu ao senhor_unix de RonaldoRG em C, C++
Tem vários erros no código. Parece que você escreveu ele em Basic. printf("\n Digite o operador:"); // Falta o "n" depois do "\" A sintax do if tá errada o correto é: if (operador=='+') { resultado=n1+n2; printf ("\n O resultado e: %f",resultado); } else { ... } Abraço. -
Desse último jeito funciona também, acho que é até mais simples. O comando new aloca memória para um ponteiro, assim char *texto = new char[DIM] aloca DIM posições de memória do tipo char e passa o endereço dessa alocação para o ponteiro texto. Ponteiro é um recurso muito poderoso que vale a pena você dar uma estudada a fundo. O comando delete libera a alocação de memória apontada pelo ponteiro. Já char texto[DIM] cria um vetor texto do tipo char com DIM posições. Que bom que deu certo. Abraço.
-
Acho que você esqueceu de alocar memória para o ponteiro texto e depois liberá-la no final. char *texto = new char[DIM]; ... delete texto; Abraço.
-
(Resolvido) Retorno para uma funcao causa problema
pergunta respondeu ao nothing at all de RonaldoRG em C, C++
Seria melhor se você colocasse os ifs assim: ... if(opcao == '1') { ... } else if(opcao == '2') { ... } else if(opcao == '3') { exit(0); } else cout << "Opcao invalida"; ... Acho também que chamando a função main sucessivamente deve sobrecarregar o programa com o empilhamento das funções, pois você não termina a função anterior e chama outra e outra e mais outra. Seria melhor se você colocasse um loop no main: int main() { while(1) { start(); } } Abraço. -
Voltar pra qual pergunta? Se for pro menu, então você bota um loop com o menu dentro dele. ... do{ ... // Menu ... cout << "Deseja sair? (s/n)"; cin >> x; }while(x != 'n'); ... Abraço.
-
O problema é que nos case do switch da função menu você colocou as funções com os protótipos. É como se você estivesse definindo elas e não chamando. Deixe elas assim: ... switch(x){ case 1: cadastralivro(livros); break; case 2: cadastrausuario(x, y, z); break; ... Abraço.
-
Olá companheiro. O erro tá no ";" no final do if, dessa maneira você interrompeu o comando if. É só você retirar o ";" que vai funcionar beleza. static void * LoadModule(char *module) { if (module == NULL); <=== AQUI O ERRO { // Ele sempre entra aqui... return (NULL); } return (dlopen(module, RTLD_LAZY)); } } Abraço.
-
ok durub. Eu tinha visto sobre isso tambem, entrei nas opções de projetos e modifiquei algumas coisas lá sobre mas não consegui fazer funcionar os aplicativos em outro PC. Mas vou ver agora no Google sobre sua sugestão. Eu também mudei pro Linux (Ubuntu - Karmic), mas tenho o windows ainda instalado, embora tem muito tempo que não uso ele. Aguardo o seu retorno. Brigadão. Abraço.
-
ninguém sabe essa... Então porque a resposta é que não dá pra rodar em outro PC sem instalar a distribuição do visual C++. Portanto continuo no DEV C++ porque não tem frescuras. De que adianta ter interface bonita se o programa só roda no PC que compilou, não tem nem graça. Valeu pela ajuda de todos.
-
(Resolvido) divisão de um arquivo de programa em vários arquivos menor
pergunta respondeu ao luizfernando de RonaldoRG em C, C++
Ai nesse caso você deve colocar os includes necessários primeiro e depois colocar o seu include. #include<string.h> #include<ctype.h> ... #include "seu_arquivo.h" Usando aspas o arquivo deve estar na mesma pasta do arquivo principal. -
Quando você usa a função new, o sistema aloca um espaço na memória para você usar. Depois que você usa o comando delete aquela alocação passa a ser considerada livre para o sistema, podendo ele utilizá-la para gravar dados que ele queira. Embora o conteúdo ainda esteja lá, mas a alocação não existe mais. Se você continuar utilizando pode ocasionar um erro no sistema pois você pode modificar um conteúdo dele. Portanto não se deve utilizar uma alocação liberada pelo delete. Abraço.
-
Se você quiser representar números grandes você pode utilizar a biblioteca gmp. Com ela você representa números inteiros, reais, frações com a precisão que você quiser, limitada pelo tamanho da memória do PC. Veja esse link: http://gmplib.org/ Ela é free e funciona muito bem. Usei pra representar inteiros num programa de criptografia e ficou uma beleza, bem rápido. Abraço.
-
A função tá errada. O protótipo dela é: int fseek (FILE *fp,long numbytes,int origem); numbytes é a quantidade de bytes que ele deve mover o cursor, origem é o início da contagem. Então você usa assim: int fseek (arq , n*sizeof(tipo_agenda), SEEK_SET); SEEK_SET indica que ele deve contar a partir do início, e "n" indica qual a posição do registro que você quer ir. Dá uma olhada em: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c970.html#c979 e também: http://www.cplusplus.com/reference/clibrary/cstdio/fseek/
-
Por isso que tava substituindo o arquivo anterior. Para abrir no modo de leitura e escrita tem que usar o "r+". Para verificar se o arquivo já existe faz assim: Você tenta abrir o arquivo e testa se o ponteiro de retorno da função fopen é vazio. Caso seja NULL então é sinal que o arquivo não existe. Caso seja diferente de NULL então é porque ele existe. ... FILE *arq; arq = fopen("arquivo.txt", "r+"); if(arq) printf("Arquivo existe"); else printf("arquivo não existe"); ... Abraço.
-
Tem sim. Na biblioteca windows.h tem funções para você posicionar o cursor onde quiser na tela, mudar de cor, gerencia eventos do teclado, mouse, etc. Esse código abaixo mostra os eventos do mouse e teclado, experimente mover o mouse, clicar no console e pressionar alguma tecla. Você estudando ele vai poder fazer o que você quer. Eu já fiz uma tela de cadastro, mas deu pau no meu PC e perdi o código. Qualquer coisa posta sua dúvida. #include <windows.h> #include <stdio.h> VOID KeyEventProc(KEY_EVENT_RECORD); VOID MouseEventProc(MOUSE_EVENT_RECORD); VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD); HANDLE Hsaida; int main(VOID) { DWORD cNumRead, i; INPUT_RECORD irInBuf[128]; HANDLE Hentrada; // Get the standard input handle. Hentrada = GetStdHandle(STD_INPUT_HANDLE); Hsaida = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleMode(Hentrada, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT ); SetConsoleTitle("Console de Teste"); // Loop to read and handle the input events. while (1) { // Wait for the events. ReadConsoleInput( Hentrada, // input buffer handle irInBuf, // buffer to read into 128, // size of read buffer &cNumRead); // number of records read // Dispatch the events to the appropriate handler. for (i = 0; i < cNumRead; i++) { switch(irInBuf[i].EventType) { case KEY_EVENT: // keyboard input KeyEventProc(irInBuf[i].Event.KeyEvent); break; case MOUSE_EVENT: // mouse input MouseEventProc(irInBuf[i].Event.MouseEvent); break; case WINDOW_BUFFER_SIZE_EVENT: // scrn buf. resizing ResizeEventProc( irInBuf[i].Event.WindowBufferSizeEvent); break; case FOCUS_EVENT: // disregard focus events case MENU_EVENT: // disregard menu events break; default: break; } } } return 0; } VOID KeyEventProc(KEY_EVENT_RECORD quer) { COORD pos; pos.X=1; pos.Y=5; SetConsoleCursorPosition(Hsaida,pos); if(quer.bKeyDown) { if(quer.uChar.AsciiChar !=0) printf("Letra: %c ",quer.uChar.AsciiChar); else printf("Especial: %d ",quer.wVirtualKeyCode); } else printf("Tecla Suspensa"); } void MouseEventProc(MOUSE_EVENT_RECORD mer) { COORD pos; pos.X=1; switch(mer.dwEventFlags) { case 0: pos.Y=3; SetConsoleCursorPosition(Hsaida,pos); printf("button press: %d ",mer.dwButtonState); break; case DOUBLE_CLICK: pos.Y=3; SetConsoleCursorPosition(Hsaida,pos); printf("double click "); break; case MOUSE_MOVED: pos.Y=1; SetConsoleCursorPosition(Hsaida,pos); printf("Posicao mouse (%2d, %2d)",mer.dwMousePosition.X, mer.dwMousePosition.Y); break; case MOUSE_WHEELED: pos.Y=3; SetConsoleCursorPosition(Hsaida,pos); printf("vertical mouse wheel: %d",mer.dwButtonState); break; default: pos.Y=3; SetConsoleCursorPosition(Hsaida,pos); printf("nada "); break; } } VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD wbsr) { COORD pos; pos.X=1; pos.Y=7; SetConsoleCursorPosition(Hsaida,pos); printf("\n\nResize event\n\n"); } Abraço.
-
Não vi no seu código a função fopen de abrir arquivo. Mas se você tá abrindo um arquivo e ta substituindo o anterior, você deve tá usando a string "w" no segundo argumento da função. O "w" deve ser usado para criar o arquivo. Depois que ele já existe você usa "r+" que abre o arquivo para leitura e escrita. Abraço, feliz 2010.