Ir ao conteúdo
  • Cadastre-se

Plástico Bolha

Membros Plenos
  • Total de itens

    396
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

34

Sobre Plástico Bolha

  • Data de Nascimento 13-04-1991 (27 anos)

Informações gerais

  • Cidade e Estado
    Curitiba-pr
  1. Faz bastante tempo desde a ultima vez que usei openGL e webGL, tinha guardado este trecho de código, pode te ajudar a iniciar algo. A glut.h é legal para aprender a programar com openGL, mas se for fazer um projeto mais complexo, vai precisar usar outras coisas. OBS: para rodar este código será necessário a DLL glut32.dll e as libs glut.h e GL/gl.h. Este código gera uma animação de um cilindro 3D, esta animação termina quando a tecla "esc" for apertada. #include <stdlib.h> #include <glut.h> #include <GL/gl.h> #include <stdio.h> #include <math.h> #define ESCAPE_KEY 27 float janela; float t = 0.0f; void renderCylinder(float x1, float y1, float z1, float x2,float y2, float z2, float radius,int sub_divisao,GLUquadricObj *quadric) { float vx = x2-x1; float vy = y2-y1; float vz = z2-z1; if(vz == 0) vz = .00000001; float v = sqrt( vx*vx + vy*vy + vz*vz ); float ax = 57.2957795*acos( vz/v ); if ( vz < 0.0 ) ax = -ax; float rx = -vy*vz; float ry = vx*vz; glPushMatrix(); //CORPO CILINDRO glTranslatef( x1,y1,z1 ); glRotatef(ax, rx, ry, 0.0); gluQuadricOrientation(quadric,GLU_OUTSIDE); gluCylinder(quadric, radius, radius, v, sub_divisao, 1); //Primeiro Cap gluQuadricOrientation(quadric,GLU_INSIDE); gluDisk( quadric, 0.0, radius, sub_divisao, 1); glTranslatef( 0,0,v ); //Segundo Cap gluQuadricOrientation(quadric,GLU_OUTSIDE); gluDisk(quadric, 0.0, radius, sub_divisao, 1); glPopMatrix(); } void CILINDRO(float x1, float y1, float z1, float x2,float y2, float z2, float radius,int sub_divisao) { GLUquadricObj *quadric=gluNewQuadric(); gluQuadricNormals(quadric, GLU_SMOOTH); renderCylinder(x1,y1,z1,x2,y2,z2,radius,sub_divisao,quadric); gluDeleteQuadric(quadric); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-7); //Definindo o cilindro float x1 = sin(t); float y1 = sin(t/2); float z1 = cos(t*1.1); float x2 = -sin(t*1.3); float y2 = 0; float z2 = -cos(t); float radius = 0.03+(sin(t)/2+0.5)/3; CILINDRO(x1,y1,z1,x2,y2,z2,radius,32); t+=0.010; glutSwapBuffers(); } void InitGL(int Width, int Height) { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glEnable(GL_LIGHTING); GLfloat LightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f }; GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat LightPosition[] = { 0.0f, 0.0f, 2.0f, 1.0f }; glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); glEnable(GL_LIGHT1); } void keyPressed(unsigned char key, int x, int y) { if(key == ESCAPE_KEY) { glutDestroyWindow(janela); exit(1); } } int main( int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(640, 480); janela = glutCreateWindow(""); glutDisplayFunc(&display); glutKeyboardFunc(&keyPressed); glutFullScreen(); glutIdleFunc(&display); InitGL(640, 480); glutMainLoop(); return 1; }
  2. O que fiz, foi algo com pouca performance, no entanto, atende aos requisitos, está é apenas a ideia de como você poderia fazer: package main import ( "fmt" ) const MAX = 12 func main() { var vetA = [MAX]int{7, 2, 3, 2, 5, 2, 3, 7, 1, 2, 45, 1} var idx int = 0 var vetB [MAX]int for i := 0; i < MAX; i++ { for j := i + 1; j < MAX; j++ { if vetA[j] == vetA[i] { var flag bool = true for k := 0; k < MAX; k++ { if vetB[k] == vetA[j] { flag = false break } } if flag { vetB[idx] = vetA[j] idx++ } } } } fmt.Println("Valores repetidos: ", vetB) // Output: Valores repetidos: [7 2 3 1 0 0 0 0 0 0 0 0] }
  3. Acho que a ideia seria essa: package main import "fmt" func main() { var b float32 = -1; var h float32 = -1; var maxTry int = 3; var try int = 0; for(((b < 0) || (h < 0)) && (try < maxTry)) { fmt.Print("Digite o valor da base: "); fmt.Scanln(&b); fmt.Print("Digite o valor da altura: "); fmt.Scanln(&h); try++; if(((b < 0) || (h < 0)) && (try < maxTry)) { fmt.Print("Dados invalidos - "); fmt.Println(try); } } if(try < maxTry) { try = 0; b = (b*h) / 2; fmt.Println("Area: ", b); } else { fmt.Println("Erro !"); } } Se for proibido usar for ... teria como fazer com recursividade: package main import "fmt" func calcArea(try int, maxTry int) bool { var b float32 = -1; var h float32 = -1; var rsp bool = false; try++; if(try <= maxTry) { fmt.Print("Digite o valor da base: "); fmt.Scanln(&b); fmt.Print("Digite o valor da altura: "); fmt.Scanln(&h); if((b < 0) || (h < 0)) { fmt.Print("Dados invalidos - "); fmt.Println(try); rsp = calcArea(try, maxTry); } else { b = (b*h) / 2; fmt.Println("Area: ", b); rsp = true; } } return rsp; } func main() { var maxTry int = 3; var try int = 0; var rsp bool = calcArea(try, maxTry); if(rsp) { fmt.Println("Ok"); } else { fmt.Println("Erro"); } }
  4. Entendi! Pense em uma "label" como uma espécie de "componente" dentro do seu windows.forms ! Veja este vídeo, ele é básico e objetivo. OBS: Depois que você ver o vídeo e criar a label, basta fazer algo como
  5. Crie uma label, depois acesse a propriedade text (pelo setText).
  6. A ideia seria essa: package main import "fmt" const( MIN = 0; MAX = 12; ) func factorial(n int) int { var count, i int = n, n; for (i > 1) { count = count*(i-1); i--; } return count; } func main() { var n int; fmt.Print("Por favor digite um numero maior que ",MIN," e menor que ",MAX ,": "); fmt.Scanf("%d", &n); if((n > MIN) && (n < MAX)) { fmt.Print("Fatorial de ",n,": ", factorial(n)); } else { fmt.Print("O numero ",n," esta fora do range"); } } Att
  7. É importante que você refaça os algoritmos, para compreender a lógica de funcionamento deles, se alguém simplesmente te explicar, ou mostrar o código feito, ou se você apenas ler em uma apostila, é possível que na hora da prova o professor faça alguma distorção no algoritmo, ou apresente o exercício em um outro formato, justamente para saber se você compreendeu detalhadamente como ele funciona ou apenas decorou uma receita de bolo. Pegando como exemplo o algoritmo de busca binária: func Binary_SearchI(vet []int, key int, max int) int { var l int = 0; var r int = max-1; var mid int; for(l <= r) { mid = (l+r)/2; if(key == vet[mid]){ return mid; } else if(key < vet[mid]) { r = mid-1; } else { l = mid+1; } } return -1; } func main() { var vet []int = []int{2,5,8,12,16,23,38,56,72,91}; var max int = len(vet); var key int = 38; var pos = Binary_SearchI(vet,key,max); fmt.Println("Posicao da chave: ", pos); } Deu para perceber que este algoritmo abaixo seria um pseudo-código de um algoritmo de busca binária distorcido, para aceitar uma estrutura 'cliente'. i == 0; f == final; m == (i + f) / 2; Leia cod; Enquanto ((i <= f) e (cod != cliente[m][0])) Faça { Se (cod < cliente[m][0]){ Então {f == m - 1; Senão {i == m + 1; m == (i + f) / 2; Se (i <= f) Então {Imprima cliente[m][i]; Senão imprima "Código não existe"; } O que pode te ajudar a compreender completamente como a busca binária funciona, seria refazer ele de várias maneiras diferentes, por exemplo, pegue o busca binária original/padrão e altere ele para buscar o CPF de um array (do tipo cliente) de clientes como esta por exemplo: type Client struct { CPF int Name int Login int Password int } // ... var Clients [10]Client; //... // Acessar o CPF do cliente 0 -> Clients[0][0] // ...
  8. tente usar o "mouse_event " do windows.h https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx Veja se este exemplo de código corresponde: (Não testei) #include <windows.h> #include <iostream> using namespace std; int main() { HANDLE hIn; HANDLE hOut; COORD MouseWhere = {30, 20}; COORD DClickWhere = {30, 20}; bool Continue = TRUE; DWORD EventCount; int LoopCount = 0; int KeyEvents = 0; INPUT_RECORD InRec; DWORD NumRead; hIn = GetStdHandle(STD_INPUT_HANDLE); hOut = GetStdHandle(STD_OUTPUT_HANDLE); cout << "Mouse is at : " << endl; cout << "Double Click at : " << endl; while (Continue) { Sleep(10); // To slow it down!! GetNumberOfConsoleInputEvents(hIn,&EventCount); while (EventCount > 0) { ReadConsoleInput(hIn,&InRec,1,&NumRead); if (InRec.EventType == KEY_EVENT) { if (InRec.Event.KeyEvent.uChar.AsciiChar == 'x') { cout << "Exiting..." << endl; Continue = FALSE; } } else if (InRec.EventType == MOUSE_EVENT) { if (InRec.Event.MouseEvent.dwEventFlags == MOUSE_MOVED) { SetConsoleCursorPosition(hOut, MouseWhere); cout << InRec.Event.MouseEvent.dwMousePosition.X << "," << InRec.Event.MouseEvent.dwMousePosition.Y << " " << flush; } else if (InRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK) { SetConsoleCursorPosition(hOut, DClickWhere); cout << InRec.Event.MouseEvent.dwMousePosition.X << "," << InRec.Event.MouseEvent.dwMousePosition.Y << " " << flush; } } GetNumberOfConsoleInputEvents(hIn,&EventCount); } } return 0; }
  9. O que tem feito ? Se não tem nada eu começaria pelo inicio, que é criando uma estrutura ou classe já que você está no C++ que seja um modelo abstrato de uma politriz ... Por exemplo, se quero simular um carro, vou criar um classe que abstrai o comportamento e características de um carro: class Car { constructor(color, model, year, position) { this.color = color; this.model = model; this.year = year; this.position = position; } Run(units) { this.position += units; } }
  10. Criei um vetor com 6 posições, faça um for de 1 até 30, a cada iteração do for gere um número aleatório de 1 até 6, incremente em +1 a posição do vetor com esses números aleatórios, a ideia seria essa: package main import ( "math/rand" "fmt" "time" ) func main() { var N int = 30; var max int = 8; var min int = 2; faces := make([]int, max-1); rand.Seed(time.Now().UnixNano()); for i := 0; i < N; i++ { n := rand.Intn(max - min)+1; // Gero um numero de 1 até 6 faces[n]++; // incremento em +1 uma posicao aleatorio entre 1 e 6 } fmt.Println("Faces sorteadas em",N,"jogadas :",faces); }
  11. looping infinito while (x<N) { r=valores[x]+valores[a]; a++; } Faça um teste também, tire o & dessa linha: scanf(" %d", &valores[index]);
  12. Cara, você precisa entender algumas coisas como ! Leia isto: Caso você queira fazer testes simulando acesso total a memoria, ou seja, acessar o que você quiser, quando quiser e alterar ou ler o endereço de memoria que quiser, recomendo você utilizar o "DosBox", aí sim você vai conseguir sair fora da caixa de verdade ! OBS: Quando você cria um processo feito em C/C++ seja lá a linguagem que for, você está dentro de uma caixa, onde os S.Os "modernos" criam pra sua caixa endereços de memória relativos ! E você pode operar ali dentro, se quiser acessar endereços fora dessa caixa , DLLs são uma opção ... No entanto imagina só se o S.Os modernos deixassem você criar um processo que pude-se ler/escrever em endereços de memória fora do seu processo ! Seria o caos ... Nos tempos antigos de IBM PC isso era permitido, e deu muito errada hahah ... Tipo eu crio um programa que altera o endereço do bootloader do teu PC ... Pronto matei teu HD, você não inicia mais o PC =D ...
  13. Criei essa função pra calcular o pow: func _pow(x int, n int) int { var _sum int = x; for i := 1; i < n; i++ { _sum = x*_sum; } return _sum; }
  14. Passa isso de GO pra C ... Porque facilitar não é mesmo =D package main import "fmt" func _pow(x int, n int) int { var _sum int = x; for i := 1; i < n; i++ { _sum = x*_sum; } return _sum; } func main() { var N int = 8; var n int = 2; var x int = 2; var terms []int; if((n % 2) == 0) { for i := 0; i < N; i++ { fmt.Print(n,"*(",x,"^",n,") + "); terms = append(terms,n*_pow(x, n)); n += 2; } fmt.Println("... + nx^n\nSomatorio: ", terms); } else { fmt.Println("n deve ser par"); } } https://play.golang.org/p/Hw3qWbUzHlI

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×