Search the Community
Showing results for tags 'c++'.
-
Boas queria construir um robô seguidor de linha para um projeto mas apenas tenho um sensor, face a este problema será que o poderia programar para apenas seguir uma linha reta ligando assim o único sensor aos dois motores? Se possível ficaria agradecido se pudessem disponibilizar o código para a programação
-
Neste seguinte programa preciso de ajuda para trocar os números de char para int. O código é o seguinte: #include <stdio.h> #include <locale.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <time.h> int i; char resposta[6],adivinha[6]; FILE *fp; void menu() { printf("Bem-vindo ao jogo de adivinhar um número com 6 digitos!\n"); } void gerador()//numero aleatorio { srand(time(0)); for(i=0;i<6;i++) { resposta[i]=rand()%10+48; } } void tentativa(int y) { printf("Esta é a %d/7 tentativa\n\n",y); for(i=0;i<6;i++) { do { printf("Advinha o número! %d:",i+1); scanf("%c",&adivinha[i]); getchar(); if((adivinha[i]=='1')||(adivinha[i]=='2')||(adivinha[i]=='3')||(adivinha[i]=='4')||(adivinha[i]=='5')||(adivinha[i]=='6')||(adivinha[i]=='7')||(adivinha[i]=='8')||(adivinha[i]=='9')||(adivinha[i]=='0')) { printf(""); }else { printf("Número inválido\nClica Enter e tenta outra vez!\n"); } }while((adivinha[i]!='1')&&(adivinha[i]!='2')&&(adivinha[i]!='3')&&(adivinha[i]!='4')&&(adivinha[i]!='5')&&(adivinha[i]!='6')&&(adivinha[i]!='7')&&(adivinha[i]!='8')&&(adivinha[i]!='9')&&(adivinha[i]!='0')); } } int check() { int x; for(i=0;i<6;i++) { if(resposta[i]==adivinha[i]) { printf("%c",adivinha[i]); x++; } else printf("-"); } printf("\n"); if(x==6) return 1; else return 0; } int main() { setlocale(LC_ALL,"Portuguese"); int bin=0,y,momento; char recorde[100],nome[100]; system("color A"); menu(); gerador(); fp = fopen("Recorde.txt","r"); if(fp!=NULL) { fgets(recorde,100,fp); fclose(fp); printf("O recorde atual é %s\n",recorde); } fp=fopen("Recorde.txt","r"); if(fp!=NULL) fscanf(fp,"%d",&momento); else momento=10000; for(y=1;y<=7;y++) { tentativa(y); bin=check(); if(bin==1) { printf("Parabens adivinhaste em %d tentativas\n",y); if(y<momento) { printf("Bateste o record, escreve o teu nome para o registo!\n"); gets(nome); fp = fopen("Recorde.txt","w"); fprintf(fp,"%d - %s",y,nome); fclose(fp); } break; } } printf("Resposta = %c%c%c%c%c%c",resposta[0],resposta[1],resposta[2],resposta[3],resposta[4],resposta[5]); } Fico agradecido por qualquer resposta! ❤️ Quanto mais rápido agradeço!
-
Malta preciso de ajuda eu quero fazer o jogo 3 em linha em c++ e não consigo podem me mostrar como é que fazem eu ficaria muito agradecido. ps: sou iniciante
-
Estou com uma duvida, eu tenho este menu. Na ultima case (case 6), o menu tem de fechar, mas não sei o que fazer, podem me ajudar. Estou a trabalhar em código de C++. //Projeto UFCD - programação #include <iostream> #include <string> #include <fstream> using namespace std; //declaração de variaveis int opcao, numero1, numero2, ntrabalhadores; ofstream ficheiro ("GESTAOSALARIAL.txt"); struct trabalhadores { string nome; int nhoras; int escalao; }; //ARRAY QUE GUARDA NOMES DOS TRABALHADORES trabalhadores conjtrabalhadores[1000]; //FUNCAO SALARIO float salario (int escalao, float nhoras) { float res; if (escalao == 1){ res= 150 * nhoras; } else if (escalao == 2){ res= 200 * nhoras; } else if (escalao == 3){ res= 250 * nhoras; } else if (escalao == 4){ res= 300 * nhoras; } else { cout<<"Escalao Invalido"<<endl; } return res; } int main () { menu: cout<<system("cls"); cout<<" \t\t_________________________________"<<endl; cout<<" \t\t| |"<<endl; cout<<" \t\t| GESTAO SALARIAL |"<<endl; cout<<" \t\t|_______________________________|"<<endl; cout<<" \t\t| |"<<endl; cout<<" \t\t| 1- Inserir trabalhador |"<<endl; cout<<" \t\t|_______________________________|"<<endl; cout<<" \t\t| |"<<endl; cout<<" \t\t| 2- Lista de trabalhadores |"<<endl; cout<<" \t\t|_______________________________|"<<endl; cout<<" \t\t| |"<<endl; cout<<" \t\t| 3- Escaloes |"<<endl; cout<<" \t\t|_______________________________|"<<endl; cout<<" \t\t| |"<<endl; cout<<" \t\t| 4- Salarios |"<<endl; cout<<" \t\t|_______________________________|"<<endl; cout<<" \t\t| |"<<endl; cout<<" \t\t| 5- Gravar |"<<endl; cout<<" \t\t|_______________________________|"<<endl; cout<<" \t\t| |"<<endl; cout<<" \t\t| 6- Sair |"<<endl; cout<<" \t\t|_______________________________|"<<endl; cout<<" \t\t Selecione a opcao pretendida: "; cin>>opcao; //EXITs switch(opcao) { case 1: cout<<"\n\t\t\t Quantos trabalhadores pretende inserir? "; cin>>ntrabalhadores; for (int i=0; i<ntrabalhadores;i++) { cout<<"\n\t\t\t Introduza o nome do "<<i+1<< " trabalhador: "; cin>>conjtrabalhadores[i].nome; cout<<"\t\t\t Introduza o numero de horas do "<<i+1<< " trabalhador: "; cin>>conjtrabalhadores[i].nhoras; cout<<"\t\t\t Introduza o escalao do "<<i+1<< " trabalhador: "; cin>>conjtrabalhadores[i].escalao; cout<<endl; } break; case 2: cout<<" \n\t\t\t *** LISTAGEM DOS TRABALHADORES *** "<<endl; for (int i=0; i<ntrabalhadores;i++) { cout<<"\n\t\t\t Nome do "<<i+1<< " trabalhador: "<<conjtrabalhadores[i].nome<<endl; cout<<"\t\t\t Numero de horas do "<<i+1<< " trabalhador: "<<conjtrabalhadores[i].nhoras<<endl; cout<<"\t\t\t Escalao do "<<i+1<< " trabalhador: "<<conjtrabalhadores[i].escalao<<endl; } break; case 3: system("cls"); cout<<"\t\t\t______________________________"<<endl; cout<<"\t\t\t| | |"<<endl; cout<<"\t\t\t| ESCALAO | MONTANTE GANHO |"<<endl; cout<<"\t\t\t|___________|________________|"<<endl; cout<<"\t\t\t| | |"<<endl; cout<<"\t\t\t| 1 | 150/H |"<<endl; cout<<"\t\t\t|___________|________________|"<<endl; cout<<"\t\t\t| | |"<<endl; cout<<"\t\t\t| 2 | 200/H |"<<endl; cout<<"\t\t\t|___________|________________|"<<endl; cout<<"\t\t\t| | |"<<endl; cout<<"\t\t\t| 3 | 250/H |"<<endl; cout<<"\t\t\t|___________|________________|"<<endl; cout<<"\t\t\t| | |"<<endl; cout<<"\t\t\t| 4 | 300/H |"<<endl; cout<<"\t\t\t|___________|________________|"<<endl<<endl; break; case 4: { //cin>> ntrabalhadores; for (int i=0; i<ntrabalhadores;i++) { //SALARIO DO PRIMEIRO TRABALHADOR cout<<"\t O "<<conjtrabalhadores[i].nome<<" tem o escalao: "<<conjtrabalhadores[i].escalao<<endl; cout<<"\t O "<<conjtrabalhadores[i].nome<<" trabalhou: "<<conjtrabalhadores[i].nhoras<<endl; cout<<"\t --> O salario do "<<conjtrabalhadores[i].nome<<" e: "<<salario(conjtrabalhadores[i].escalao, conjtrabalhadores[i].nhoras)<<" euros"<<endl<<endl; } } break; case 5: if (ficheiro.is_open()) { ficheiro<<" ***** PROGRAMA GESTAO SALARIAL *****"<<endl; for (int i=0; i<ntrabalhadores;i++) { ficheiro<<"\t\t\t O"<<i+1<<conjtrabalhadores[i].nome<<endl; ficheiro<<endl; cout<<"\t\t\t O salario do "<<conjtrabalhadores[i].nome<<"e: "<<salario(conjtrabalhadores[i].escalao, conjtrabalhadores[i].nhoras)<< " euros"<<endl; } ficheiro.close(); } else { cout<<"NAO E PERMITIDO GRAVAR"<<endl; cout<<"\t\t\t A Informação foi gravada com sucesso!"<<endl; } break; case 6: { system ("ext"); } default: cout<<"\n\t\t\t**OPCAO INVALIDA!!!**"<<endl<<endl; break; } system("pause"); goto menu; return 0; cout<<endl<<endl<<endl<<endl; }
-
Crie uma função em C que permita percorrer uma matriz quadrada bidimensional em diagonal. Seu programa não deve impor limitações sobre o tamanho da matriz. Não use a notação de colchetes. Use ponteiros e alocação dinâmica do tamanho da matriz. Apresente um programa de teste e exemplos (quanto mais melhor), mostrando que a sua implementação funciona. estou tendo dificuldades para formar essa questão, não vejo por onde começar e alguns exemplos que busquei não me fez tanto sentido, alguém me ajuda nessa questão!
-
Implemente um programa no qual o usuario informa, através da linha de comando, uma frase e o programa busca todas repetições da mesma palavra. Ao final, o programa imprime o numero de vezes que cada palavra aparece no frase. Para isso, só será permitido utilizar as funções strcpy(), strlen(), e fgets() de String.h. Realize a implementação própria de todas outras funções que precisar para resolver o problema. estou tendo dificuldades para achar as palavras iguais da frase e dizer quantas são, alguém me ajuda. só estou conseguindo fazer contar o numero de caracteres da frase, mais as palavras iguais não consigo achar um jeito certo, alguém pode me ajudar com um exemplo!
-
Olá pessoal. Estou a desenvolver uma biblioteca em C++ e, neste momento, dar-me-ia imenso jeito ter uma forma de aceder aos métodos de uma instância de outra classe. Numa classe (vamos chamá-la de FooMgr) tenho um map que me permite aceder a instâncias de outra classe (vamos assumir que se chama foo) através do seu nome. map<string, Foo> foolist; FooMgr é, portanto, um gestor de instâncias de Foo onde posso dar um nome arbitrário a cada uma dessas instâncias. De momento preciso de fazer algo deste género para aceder aos métodos de cada instância: FooMgr foo(); // etc... foo.getInstance("batatas").coisas(); foo.getInstance("batatas").cenas(); foo.getInstance("batatas").factos(); A minha ideia é definir a instância actual e, a partir daí, aceder directamente aos seus métodos sem precisar de recorrer a este "proxy" (getInstance) FooMgr foo(); // etc... foo.setCurrent("batatas"); foo.coisas(); foo.cenas(); foo.factos(); Sei que existe forma de fazer isto em Delphi, mas desconheço se há algum mecanismo para tal em C++. As minhas pesquisas deram num beco sem saída (talvez não esteja a usar as keywords certas nas pesquisas, idk). Conhecem alguma forma de fazer isto em C++, ou de o simular de uma forma um tanto-quanto elegante? Cumprimentos.
-
namespace ClassesDerivadas { //****************************************************** //* Classe1 "ProdutoEletrodomestico" - Classe1 Derivada //****************************************************** class ProdutoBiologico: public Classes::ClassePrincipal::Produto { // 1. Dados int caloria; int eficacia; string classe1; public: // 2. Métodos // 2.1 Métodos Construtores ProdutoBiologico():Produto() {this->caloria = 0; this->eficacia = 0; this->classe1 = ""; cout<<"Produto Biológico criado!";} ProdutoBiologico(int cal, string d): Produto(cal,d) {caloria = 0; eficacia = 0; classe1 = ""; cout<<"Produto Biológico criado!";} ProdutoBiologico(int codP, string d, int numC): Produto(codP,d, numC) {caloria = 0; eficacia = 0; classe1 =""; cout<<"Produto Biológico criado!";} // 2.2 Métodos destrutores ~ProdutoBiologico() { cout<<"Eliminação de um objeto "<<"'Produto Biológico': "; cout<<getDesignacao()<<"."; cout<<endl; } // 2.3 Métodos "setters" void setCaloria (int cal) {this->caloria = cal;} void setEficacia (int e) {this->eficacia = e;} void setClasse1(string c3) {this->classe1 = c3;} // 2.4 Métodos "getters" int getCaloria () {return caloria;} int getEficacia () {return eficacia;} string getClasse1() {return classe1;} // 2.5 Métodos de leitura void leCaloria() { int num = 0; cout<<"Insira o valor das "<<"calorias: "; cin>>num; setCaloria(num); fflush(stdin); } void leEficacia() { int num = 0; cout<<"Insira o valor da "<<"eficacia: "; cin>>num; setEficacia(num); fflush(stdin); } void leClasse1() { const int MAXNOME = 50; char texto[MAXNOME]; for(int cLetra= 0; cLetra < MAXNOME; cLetra++) texto[cLetra]= '\0'; cout<<"Insira o valor da classe1: "; cin.getline(texto, MAXNOME,'\n'); setClasse1(texto); fflush(stdin); } // 2.6 Métodos de Escrita void mostraCaloria() { cout<<"Calorias: "<<getCaloria()<<" do produto."; cout<<endl; } void mostraEficacia() { cout<<"Eficacia: "<<getEficacia ()<<" meses."<<endl;} void mostraClasse() { cout<<"Classe: "<<getClasse1()<< "."<<endl; } void mostraTudoProdutoEletrodomestico() { cout<<"\nApresentação dos dados "; cout<<"de um produto: "<<endl; mostraTudoProduto(); mostraCaloria(); mostraEficacia(); mostraClasse1(); } }; // Fim da classe1 "Produto Biológico" } // Fim do espaço de nomes "ClassesDerivadas". } // Fim do espaço de nomes "Classes". //************************************************ //* Função principal //************************************************ int main() { setlocale(LC_ALL, "Portuguese"); Classes::ClassesDerivadas::ProdutoBiologico produto; produto.leTudoProdutoBiologico(); produto.mostraTudoProdutoBiologico(); return 0; } // Fim da função "main()".
-
Boas, Estou com alguma dificuldade em perceber o que está errado no código que gerei, pois nunca me dá com exatidão qual a pessoa que comeu menos panquecas, a que comeu mais dá certo.Obrigado (Estou a usar o Visual Studio 2019) int pancakes[10]; int index; int index2; int max = 1; int min = 1; int max_pancakes = 1; int min_pancakes = 1; for (index = 1; index < 10; index++) { std::cout << "INSERT THE NUMBER OF PANCAKES THAT THE PERSON" << index << "EAT" << std::endl; std::cin >> pancakes[index]; } for (index2 = 1; index2 < 10; index2++) { for (index = 1; index < 10; index++) { if (pancakes[index2] < pancakes[index]) { max = pancakes[index]; max_pancakes = index; } else if (pancakes[index] < pancakes[index2]) { min = pancakes[index]; min_pancakes = index; } } } std::cout << " THE PERSON WHO EAT MORE PANCAKES IS " << max_pancakes << std::endl; std::cout << " THE PERSON WHO EAT LESS PANCAKES IS " << min_pancakes << std::endl;
-
Boas pessoal a minha questão é a do titulo, é a única coisa que me falta. Alguém me conseguia ajudar? Obrigado #include <iostream> #include <stdlib.h> const int max = 6; int main() { int arr [max], aux; printf("escreva %d valores\n", max); for (int i = 0 ; i < max; i++) { scanf("%d", &arr[i]); } for(int i = 0; i < max; i++) for (int j=0; j<max -1-i; j++) if (arr[j]> arr[j+1]) { aux = arr[j]; arr[j]= arr[j+1]; arr[j+1]=aux; } printf("Os valores ordenados sao\n"); //escrever o array ordenado abaixo }
-
Escreva um programa para ler 10 palavras. Para cada palavra lida escrever a quantidade de caracteres existentes na palavra. Considere que cada palavra possui no máximo 30 caracteres. estou com bastante dificuldade em resolver essa questão a única coisa que consegui fazer foi contar quantas palavras existem mas não quantos caracteres tem na palavra
-
Boa tarde, estou a fazer um trabalho para a universidade que consiste em fazer o jogo dos 4 em linha e estou com dificuldades em saber como posso determinar quem é que ganha o jogo e como fazer , na linguagem C++. Obrigado pela atenção
-
Olá boa tartde eu estou a fazer um jogo para entregar para a cadeira de lab mas eu fiquei preso com este erro se alguem poder ajudar eu agredecia . Erros: Build started... 1>------ Build started: Project: Atirar, Configuration: Debug Win32 ------ 1>Atirar.cpp 1>Tabuleiro.cpp 1>Generating Code... 1>Tabuleiro.obj : error LNK2005: "void __cdecl gotoxy(int,int)" (?gotoxy@@YAXHH@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl printAscii(int,int,int)" (?printAscii@@YAXHHH@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl printfAt(int,int,char * const)" (?printfAt@@YAXHHQAD@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl resetColor(void)" (?resetColor@@YAXXZ) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl setBackColor(int)" (?setBackColor@@YAXH@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl setColor(int,int)" (?setColor@@YAXHH@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl setForeColor(int)" (?setForeColor@@YAXH@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl show90RectAt(int,int,int,int)" (?show90RectAt@@YAXHHHH@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl showCharAt(int,int,char)" (?showCharAt@@YAXHHD@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl showRectAt(int,int,int,int)" (?showRectAt@@YAXHHHH@Z) already defined in Atirar.obj 1>Tabuleiro.obj : error LNK2005: "void __cdecl showVerticalWordAt(int,int,char * const,int)" (?showVerticalWordAt@@YAXHHQADH@Z) already defined in Atirar.obj 1>C:\Users\josep\source\repos\Atirar\Debug\Atirar.exe : fatal error LNK1169: one or more multiply defined symbols found 1>Done building project "Atirar.vcxproj" -- FAILED. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Atirar.cpp: #include <windows.h> #include <mmsystem.h> #include <iostream> #include <conio.h> #include <ctime> #include <iterator> #include <stdlib.h> #include <array> #include <algorithm> #include "Barco.h" #include "Tabuleiro.h" #include "lab.h" using namespace std; //variaveis globais int opcao=0; //--------------- void menu() { system("cls"); showRectAt(20, 1, 100, 25); gotoxy(25, 5); cout << " ____ _ _ _ _ _ _ "; gotoxy(25, 6); cout << "| \\ | | | | | | | \\ | | | |"; gotoxy(25, 7); cout << "| |_) | __ _ | |_ __ _ | | | |__ __ _ | \\| | __ _ __ __ __ _ | | "; gotoxy(25, 8); cout << "| _ < / _` | | __| / _` | | | | '_ \\ / _` | | . ` | / _` | \\ \\ / / / _` | | |"; gotoxy(25, 9); cout << "| |_) | | (_| | | |_ | (_| | | | | | | | | (_| | | |\\ | | (_| | \\ V / | (_| | | |"; gotoxy(25, 10); cout << "|____/ \\__,_| \\__| \\__,_| |_| |_| |_| \\__,_| |_| \\_| \\__,_| \\_/ \\__,_| |_|"; gotoxy(55, 15); cout << "_________________________________" << endl; gotoxy(60, 16); cout << " " << endl; gotoxy(66, 17); cout << "Jogar" << endl; gotoxy(66, 18); cout << "Carregar Jogo" << endl; gotoxy(66, 19); cout << "Regras" << endl; gotoxy(66, 20); cout << "Sair" << endl; gotoxy(50, 27); cout << "Desenvolvido Por Ricardo Inacio & Jose Alves 2021" << endl; if (opcao == 1) { gotoxy(66, 17); setColor(1, 15); printf("-> Jogar\n"); setColor(15, 0); } else if (opcao == 2) { gotoxy(66, 18); setColor(1, 15); printf("-> Carregar Jogo.\n"); setColor(15, 0); } else if (opcao == 3) { gotoxy(66, 19); setColor(1, 15); printf("-> Regras.\n"); setColor(15, 0); } else if (opcao == 4) { gotoxy(66, 20); setColor(1, 15); printf("-> Sair.\n"); setColor(15, 0); } } bool checkCords(int x, int y, int cords[4][2], int pos) { bool exists = false; for (int i = 0; i < 4; i++) { if (i == pos) { continue; } else { if (x == cords[i][0] && y == cords[i][1]) { exists = true; } } } return exists; } void DrawBoards(int scx[4], int scy[4]) { int i; int cli[4]; char cl[4]; int cn[4]; char letras[10] = { 'a','b','c','d','e','f','g','h','i','j' }; int savedc[4][2]; Tabuleiro t1, t2; for (i = 0; i < 4; i++) { t2.setCell(scx[i], scy[i], 'O'); } gotoxy(75, 0); t2.Draw(75, 5); gotoxy(0, 0); t1.Draw(27, 5); gotoxy(26, 3); cout << "JOGADOR"; gotoxy(110, 3); cout << "COMPUTADOR"; showRectAt(25, 4, 48, 24); showRectAt(73, 4, 48, 24); show90RectAt(25, 30, 10, 48); for (i = 0; i < 4; i++) { gotoxy(26, 31); cout << "Insira o " << i + 1 << " numero a colocar : " << endl; ; gotoxy(58, 31); do { cin >> cn[i]; if (cn[i] < 1 || cn[i] > 10) { gotoxy(26, 31); cout << " "; gotoxy(26, 31); cout << "Insira o " << i + 1 << " numero a colocar : " << endl; ; gotoxy(26, 33); cout << "O numero tem de estar contido entre 1 e 10!"; gotoxy(58, 31); } } while (cn[i] < 1 || cn[i] > 10); savedc[i][0] = cn[i]; gotoxy(26, 33); cout << " "; cout << endl; gotoxy(26, 31); cout << "Insira a " << i + 1 << " letra a colocar : " << endl; gotoxy(58, 31); do { cin >> cl[i]; if (!strchr(letras, cl[i])) { gotoxy(26, 31); cout << " "; gotoxy(26, 31); cout << "Insira a " << i + 1 << " letra a colocar : " << endl; ; gotoxy(26, 33); cout << "A letra tem de estar contida entre A e J!"; gotoxy(58, 31); } } while (!strchr(letras, cl[i])); cli[i] = int(cl[i] - 96); savedc[i][1] = cli[i]; gotoxy(26, 33); cout << " "; cout << endl; //verificar se ponto de cordenadas ja existe bool check = checkCords(cn[i], cli[i], savedc, i); while (check) { gotoxy(26, 31); cout << "Insira o " << i + 1 << " numero a colocar : " << endl; gotoxy(26, 33); cout << "Esse ponto de cordenadas ja existe!"; gotoxy(58, 31); do { cin >> cn[i]; if (cn[i] < 1 || cn[i] > 10) { gotoxy(26, 31); cout << " "; gotoxy(26, 31); cout << "Insira o " << i + 1 << " numero a colocar : " << endl; ; gotoxy(26, 33); cout << "O numero tem de estar contido entre 1 e 10!"; gotoxy(58, 31); } } while (cn[i] < 1 || cn[i] > 10); gotoxy(26, 33); cout << " "; cout << endl; gotoxy(26, 31); cout << "Insira a " << i + 1 << " letra a colocar : " << endl; gotoxy(58, 31); do { cin >> cl[i]; if (!strchr(letras, cl[i])) { gotoxy(26, 31); cout << " "; gotoxy(26, 31); cout << "Insira a " << i + 1 << " letra a colocar : " << endl; ; gotoxy(26, 33); cout << "A letra tem de estar contida entre A e J!"; gotoxy(58, 31); } } while (!strchr(letras, cl[i])); gotoxy(26, 33); cout << " "; cout << endl; check = checkCords(cn[i], cli[i], savedc, i); } savedc[i][0] = cn[i]; cli[i] = int(cl[i] - 96); savedc[i][1] = cli[i]; } for (i = 0; i < 4; i++) { t1.setCell(cn[i], int(cl[i]) - 96, 'O'); } system("cls"); gotoxy(75, 0); t2.Draw(75, 5); gotoxy(0, 0); t1.Draw(27, 5); gotoxy(26, 3); cout << "JOGADOR"; gotoxy(110, 3); cout << "COMPUTADOR"; showRectAt(25, 4, 48, 24); showRectAt(73, 4, 48, 24); // for(i=0; i<4; i++) { // cout << endl; // cout << "CORDS: (" << savedc[i][0] << "," << savedc[i][1] << "=" << cl[i] << ")" << endl; // t1.setCell(cn[i],int(cl[i])-96,'O'); // } } void gerarBarcos() { int x0, y0, dx, dy, i=0; x0 = 5; y0 = 4; dx = 10; dy = 10; Barco sub1, sub2, sub3, sub4; sub1.generateSub(1); sub2.generateSub(2); sub3.generateSub(3); sub4.generateSub(4); int sub_cordsx[4] = { sub1.get_subx(),sub2.get_subx(),sub3.get_subx(),sub4.get_subx() }; int sub_cordsy[4] = { sub1.get_suby(),sub2.get_suby(),sub3.get_suby(),sub4.get_suby() }; // cout << "DEBUG-----------------------" << endl; // for(i=0;i<4;i++){ // cout << "Cords: (" << sub_cordsx[i] << "," << char(64 + sub_cordsy[i]) << ")" << endl; // } // // cout << "----------------------------" << endl; DrawBoards(sub_cordsx, sub_cordsy); } void game() { system("cls"); //backgorund music //PlaySound(TEXT("bg.wav"), NULL, SND_FILENAME | SND_ASYNC); HWND hWnd = GetConsoleWindow(); ShowWindow(hWnd, SW_SHOWMAXIMIZED); gerarBarcos(); } int main() { int op; opcao = 1; do { menu(); op = _getch(); if (op == 80) { opcao++; } if (op == 72) { opcao--; } if (opcao > 4) { opcao = 1; } if (opcao < 1) { opcao = 4; } } while (op != 13); switch (opcao) { case 1: game(); break; case 2: //loadgame(); break; case 3: //rules(); break; case 4: exit(0); break; } //SimbolBoxList(); //cin.get(); return 0; } Tabuleiro.h: #pragma once #include "PontoNaval.h" class Tabuleiro { private: int dimx; int dimy; char M[10][10]; public: Tabuleiro(); Tabuleiro(int mdx, int mdy); virtual ~Tabuleiro(); void setDimX(int mdx) { dimx = mdx; } void setDimY(int mdy) { dimy = mdy; } int getDimX() { return dimx; } int getDimY() { return dimy; } void setCell(int l, int col, char c) { M[l - 1][col - 1] = c; } char getCell(int l, int col) { return M[l - 1][col - 1]; } void setCell(PontoNaval P, char c) { M[P.Getx() - 1][P.Getinty() - 1] = c; } char getCell(PontoNaval P) { return M[P.Getx() - 1][P.Getinty() - 1]; } void SimbolBoxList(); void DrawFirstLine(int x0, int dxcel); void DrawMiddleLine(int x0, int dxcel); void DrawDataLine(int line, int x0, int dxcel); void DrawLastLine(int x0, int dxcel); void Draw(int x0, int y0); }; tabuleiro.cpp: #include <iostream> #include "Tabuleiro.h" #include "lab.h" using namespace std; Tabuleiro::Tabuleiro() { int i, j; setDimX(10); setDimY(10); for (i = 1; i <= getDimY(); i++) { for (j = 1; j <= getDimX(); j++) { setCell(i, j, '.'); } } } Tabuleiro::Tabuleiro(int mdx, int mdy) { int i, j; setDimX(mdx); setDimY(mdy); for (i = 1; i < getDimY(); i++) { for (j = 1; j <= getDimX(); j++) { setCell(i, j, '.'); } } } Tabuleiro::~Tabuleiro() { } void Tabuleiro::SimbolBoxList() { cout << endl << endl; cout << "tabela ASCII e Extendida para as box"; cout << endl << endl; int tabela[] = { 185,186,187,188,200,201,202,203,204,206, 191,192,217,218,179,196,193,194,195,197,221,180, 45,47,60,62,88,91,92,93,94,95,238,240, 30,31,176,177,178,219,220,223,254, 59,123,124,125,143,205,189,190,207,241,242,245,249,46,58,61,127,174,175,145 }; int j = 0; for (int i = 0; i < 62; i++) { cout << tabela[i] << '\t' << (char)tabela[i] << '\t'; j++; if (j == 5) { cout << endl << endl; j = 0; } } } void Tabuleiro::DrawFirstLine(int x0, int dxcel) { int i, j; for (i = 0; i < x0 + 2; i++) { cout << " "; } cout << char(218); for (i = 0; i < getDimX(); i++) { for (j = 0; j < dxcel; j++) { cout << char(196); } if (i < getDimX() - 1) { cout << char(194); } } cout << char(191); } void Tabuleiro::DrawMiddleLine(int x0, int dxcel) { int i, j; for (i = 0; i < x0 + 2; i++) { cout << " "; } cout << char(195); for (i = 0; i < getDimX(); i++) { for (j = 0; j < dxcel; j++) { setBackColor(1); cout << char(196); resetColor(); } if (i < getDimX() - 1) { setBackColor(1); cout << char(197); resetColor(); } } cout << char(180); } void Tabuleiro::DrawLastLine(int x0, int dxcel) { int i, j; for (i = 0; i < x0 + 2; i++) { cout << " "; } cout << char(192); for (i = 0; i < getDimX(); i++) { for (j = 0; j < dxcel; j++) { cout << char(196); } if (i < getDimX() - 1) { cout << char(192); } } cout << char(217); } void Tabuleiro::DrawDataLine(int line, int x0, int dxcel) { int i; for (i = 0; i < x0; i++) { cout << " "; } if (line > 9) { cout << line; } else { cout << line << " "; } for (i = 1; i <= getDimX(); i++) { setBackColor(1); cout << char(179); cout << " " << getCell(line, i) << " "; resetColor(); } cout << char(179); } void Tabuleiro::Draw(int x0, int y0) { int i, l, dxtab, dytab, dxcel; // , dycel; // dycel = 1; dxcel = 3; dxtab = 4 * getDimX(); dytab = 1 * getDimY(); for (i = 0; i < y0; i++) { cout << endl; } for (i = 0; i < x0 + 2; i++) { cout << " "; } for (i = 0; i < getDimX(); i++) { cout << " " << char(65 + i) << " "; } cout << endl; //Draw First Line DrawFirstLine(x0, dxcel); cout << endl; DrawDataLine(1, x0, dxcel); cout << endl; //Draw Middle Lines for (l = 2; l <= getDimY(); l++) { DrawMiddleLine(x0, dxcel); cout << endl; DrawDataLine(l, x0, dxcel); cout << endl; } //Draw Last Line DrawLastLine(x0, dxcel); cout << endl << endl; }
-
Olá, comecei a estudar tratamento de exceções e tenho um pouco de dúvidas ainda. Alguém pode me ajudar? O código é o seguinte, tenho 4 opções, e é para captar um valor de cada tipo. Minha maior dificuldade é em como capturar o case 2. (...) int valor=0; cout << "Introduza um valor de 1 a 4:"; cin >> valor; try{ switch (valor){ case 1: throw 1; break; case 2: throw '2'; break; case 3: throw "3"; break; case 4: throw 4.0; break; default: throw 505; break; } } catch (int valor) { if (valor == 505) cout << "Valor introduzido errado" << endl; else cout << "Exeção de Inteiros\n"; } catch (const char* valor) { } catch (char valor) { } catch (double valor) { } }
-
Objetivo: Popular uma BD a partir de um .txt Pergunta: Que linguagem é mais simples/prática para o fazer? Descrição: Eu quero fazer um programa simples que me permita ler e escrever uma base de dados e ter uma interface gráfica que permita aplicar filtros à minha pesquisa. Estou a fazer esta pergunta porque sou novo na programação e queria saber a vossa opinião sobre como deveria fazer esta aplicação. As linguagens que sei sao: C C# C++ JAVASCRIPT PHP SQL Obrigado 😄
-
Olá. Quero colocar uma imagem de fundo num programa que estou a fazer, para isto criei uma textura. No entanto estou a ter os seguintes problemas: a textura está a aparecer com uns tons azulados, já tentei mudar os vértices que correspondem às cores mas só fica pior. E outro problema: não estou a conseguir com que ocupe a janela toda: caso coloque o 3ºvértice (z) a -1 fica a ocupar a janela toda mas fica à frente dos outros objetos, o que não é suposto, aliás a partir de -5 fica à frente dos mesmos, só -6 ou valores inferiores fazem com que não se sobreponha em relação aos objetos (tornando a imagem mais pequena). float vertices[] = { -1.0f, -1.0f, -6.0f, 0.0f, 0.0f, 0.00f, 0.0f, 1.0f, 0.0f, 1.0f, -1.0f, -6.0f, 1.0f, 0.0f, 0.00f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, -6.0f, 1.0f, 1.0f, 0.00f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, -6.0f, 1.0f, 1.0f, 0.00f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, -6.0f, 0.0f, 1.0f, 0.00f, 0.0f, 1.0f, 0.0f, -1.0f, -1.0f, -6.0f, 0.0f, 0.0f, 0.00f, 0.0f, 1.0f, 0.0f}; Estive a pesquisar sobre a transparência duma textura, e supostamente teria que usar a função que já está declarada no código: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); No while do main: glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture1); ourShader.use(); glm::mat4 model = glm::mat4(1.0f); glm::mat4 view = glm::mat4(1.0f); glm::mat4 projection = glm::mat4(1.0f); projection = glm::perspective(glm::radians(45.0f), (float) SCR_WIDTH / (float) SCR_HEIGHT, 0.1f, 100.0f); unsigned int modelLoc = glGetUniformLocation(ourShader.ID, "model"); unsigned int viewLoc = glGetUniformLocation(ourShader.ID, "view"); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); glUniformMatrix4fv(viewLoc, 1, GL_FALSE, &view[0][0]); ourShader.setMat4("projection", projection); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 6); Finalmente para se ter uma ideia do que está a acontecer: imagem que não consigo pôr aqui
-
Olá, Estou com o seguinte problema: num programa do Visual Studio em que uso c++, tenho algumas figuras que constituem uma casa como o telhado, a porta, a janela. Sendo que faço cada um deste elementos deslocar-se para um sítio, como está no código seguinte (aqui está o exemplo da porta, o da janela terá uma deslocação para um sítio diferente, já o telhado e as paredes ficam no mesmo sítio) que funciona bem: glm::mat4 mvp = glm::ortho(-40.0f, 40.0f, -40.0f, 40.0f); unsigned int matrix = glGetUniformLocation(programID, "mvp"); glUniformMatrix4fv(matrix, 1, GL_FALSE, &mvp[0][0]); glm::mat4 trans; trans = glm::translate(glm::mat4(1.0), glm::vec3(delta, delta, 0.0f)); //direção da deslocação (se puser -delta vai na direção contrária unsigned int m = glGetUniformLocation(programID, "trans"); glUniformMatrix4fv(m, 1, GL_FALSE, &trans[0][0]); Acontece que gostava que cada elemento que se desloca também rodasse sobre si próprio, ou seja fizesse uma rotação, o código que pus a seguir ao de cima não está a ter efeito, e não estou a conseguir resolver o assunto: glm:mat4 rot = glm::mat4(1.0f); rot = glm::rotate(rot, glm::radians(0.0f), glm::vec3(0.0f, 0.0f, 1.0f)); GLint r = glGetUniformLocation(programID, "rot"); glUniformMatrix4fv(r, 1, GL_FALSE, &rot[0][0]); Será que me podiam ajudar?
-
Olá boa noite, Estou a desenvolver um trabalho sobre uma maquina de auto atendimento, que deve de aparecer um menu e depois o utilizador escolhe o menu que quiser e deverá de aparecer o valor com o respetivo troco ou não. E eu estou com duvidas como fazer para que se possa adicionar mais um produto depois de se já ter escolhido o primeiro menu. Nesta parte foi a minha tentativa de fazer algo: case 1: printf("Escolheu o menu 'Frango sem bebida e com acompanhamento'.\n"); printf("Quer adicionar mais algum produto? (S/N)\n"); scanf("%s", &letra); switch(letra){ case 'N': printf("\nTotal: 10,89 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP1){ dinheiro_falta = PrecoP1 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP1; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); case 'S': printf("Insira o numero do outro produto que quer adicionar: \n"); scanf("%d", &novo_produto); } break; e este é o meu trabalho inteiro: #include<stdio.h> #include<locale.h> void escreveLinha(){ printf("\n**************************"); } void escreveTraco(){ printf("\n -------------------------------------------------------------------------------------------"); } void escreveColuna(){ printf("\t|\t|\t|\t|\t|\t"); } int main() { setlocale(LC_ALL,"Portuguese"); char letra; int menu; float troco, dinheiro, dinheiro_falta, falta, PrecoP1 = 10.89, PrecoP2 = 13.29, PrecoP3 = 15.00, PrecoP4 = 16.99, PrecoP5 = 7.50, PrecoP6 = 8.50, PrecoP7 = 3.00, PrecoP8 = 4.00, PrecoP9 = 3.50; escreveLinha(); printf("|SEJA BEM-VINDO A CHURRASQUEIRA CAMOMILA|**************************\n"); escreveTraco(); printf("\n|\t\t\t\t\t\t\t\t\t\t\t |\n| *Menu*\t *Conteúdo*\t\t\t\t\t\t *Preço*\t |\n"); printf("| 1 \t\t Frango sem bebida e com acompanhamento \t\t 10,89 euros\t |\n"); printf("| 2 \t\t Frango com bebida e acompanhamento \t\t\t 13,29 euros\t |\n"); printf("| 3 \t\t Frango com bebida, acompanhamento e sobremesa \t 15,00 euros\t |\n"); printf("| 4 \t\t Prato do dia com bebida, acompanhamento e sobremesa \t 16,99 euros\t |\n"); printf("|\t\t\t\t\t\t\t\t\t\t\t |\n"); printf("| *Unidade*\t *Conteúdo*\t\t\t\t\t\t *Preco*\t |\n"); printf("| 5 \t\t Frango \t\t\t\t\t\t 7,50 euros\t |\n"); printf("| 6 \t\t Prato do Dia \t\t\t\t\t\t 8,50 euros\t |\n"); printf("| 7 \t\t Bebida \t\t\t\t\t\t 3,00 euros\t |\n"); printf("| 8 \t\t Guarnição \t\t\t\t\t\t 4,00 euros\t |\n"); printf("| 9 \t\t Sobremesa \t\t\t\t\t\t"); printf(" 3,50 euros\t |\n"); printf("|\t\t\t\t\t\t\t\t\t\t\t |"); printf("\n| Para SAIR, marque 10 \t\t\t\t\t\t\t\t |\n"); printf("|\t\t\t\t\t\t\t\t\t\t\t |"); escreveTraco(); printf("\n\nInsira o número do produto que deseja: \n"); do{ scanf("%d",&menu); switch(menu) { case 1: printf("Escolheu o menu 'Frango sem bebida e com acompanhamento'.\n"); printf("Quer adicionar mais algum produto? (S/N)\n"); scanf("%s", &letra); switch(letra){ case 'N': printf("\nTotal: 10,89 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP1){ dinheiro_falta = PrecoP1 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP1; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); case 'S': printf("Insira o numero do outro produto que quer adicionar: \n"); scanf("%d", &novo_produto); } break; case 2: printf("Escolheu o menu 'Frango com bebida e acompanhamento'.\n"); printf("\nTotal: 13,29 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP2){ dinheiro_falta = PrecoP2 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP2; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); break; case 3: printf("Escolheu o menu 'Frango com bebida, com acompanhamento e sobremesa'.\n"); printf("\nTotal: 15,00 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP3){ dinheiro_falta = PrecoP3 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP3; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); break; case 4: printf("Escolheu o menu 'Prato do dia com bebida, acompanhamento e sobremesa'.\n"); printf("\nTotal: 16,99 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP4){ dinheiro_falta = PrecoP4 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP4; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); break; case 5: printf("Escolheu uma unidose de 'Frango'.\n"); printf("\nTotal: 7,50 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP5){ dinheiro_falta = PrecoP5 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP5; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); break; case 6: printf("Escolheu uma unidose de 'Prato do dia'.\n"); printf("\nTotal: 8,50 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP6){ dinheiro_falta = PrecoP6 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP6; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); break; case 7: printf("Escolheu uma unidose de 'Bebida'.\n"); printf("\nTotal: 3,00 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP7){ dinheiro_falta = PrecoP7 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP7; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nDirija-se ao balcão para levantar o seu pedido, OBRIGADO!\n\n"); break; case 8: printf("Escolheu uma unidose de 'Acompanhamento'.\n"); printf("\nTotal: 4,00 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP8){ dinheiro_falta = PrecoP8 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP8; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n"); break; case 9: printf("Escolheu uma unidose de 'Sobremesa'.\n"); printf("\nTotal: 3,50 euros \nProceda ao pagamento...\n"); scanf("%f", &dinheiro); while(dinheiro<PrecoP9){ dinheiro_falta = PrecoP9 - dinheiro; printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta); scanf("%f", &falta); dinheiro = dinheiro + falta; } troco = dinheiro - PrecoP9; printf("\nRetire o seu troco...\n%.2f euros", troco); printf("\n\nDirija-se ao balcão para levantar o seu pedido, OBRIGADO!\n\n"); break; case 10: printf("Temos muita pena que não queira continuar a operação, OBRIGADO E VOLTE SEMPRE! \n"); break; default: printf("\nNão existe o producto escolhido, volte a introduzir o número do produto que deseja: \n"); } } while(menu>10); } Cumprimentos,
-
Olá, estou a fazer um projeto em c++,"gestão de alunos" com vários menus, como fazer para voltar. Ex: 1- inserir dados; 2 - Consultar dados e 3- sair. obrigado
-
Como faço pra esse código ler vários números até o usuário digitar -1 e no fim mostrar a soma dos divisores de cada um? #include <iostream> using namespace std; int main() { int valor,i, soma; soma = 0, i = 1; cin>>valor; while(i < valor and valor !=-1) { if (valor%i==0) { soma += i; } i++; } cout<<soma<<endl; return 0; }
-
Boa tarde Estou a tentar fazer um exercicio quero criar um programa que lê-se as combinaçoes dos teclados antigos dos telemoveis por exemplo 222 2 333 33 daria "cafe" como é que posso fazer isto ? Não existe nenhuma função que agrupe os numeros num array para ficar {"222","2","333","33"}, isto facilitaria bastante o problema. Desde Ja Obrigado
-
Manipulação de Arquivos do Tipo Texto Ver Ficheiro Notes de aula sobre manipulação de arquivos de texto em C++. Universidade de São Paulo Departamento de Física e Matemática Autor: Prof. Dr. José Augusto Baranauskas Submetido por Erik Submetido em 09/11/2020 Categoria Textos Académicos Licença Website http://dcm.ffclrp.usp.br/~augusto/teaching/ici/ Submetido pelo Autor? Não
-
-
Ola! Preciso de ajuda com meu programa. Por favor! Tenho 3 Classes: Complexo: que faz operações entre números complexos, Matriz: cria matriz de complexos e faz operações entre matrizes Por ultimo, criei a Classe sistema que possui métodos para calcular a resolução de um sistema linear pelo método iterativo de Gauss, sendo os elementos da Matriz (Sistema) todos complexos. Até ai ok. O meu bug esta a ser em manipular as coisas no Main.cpp Preciso: primeiro verificar convergencia(), depois se convergir faço o calculo pelo metodo Gauss(). Por ultimo exibir a solução dada pelo metodo resultados(). Com duas classes fui até bem. Com tres já estou a misturar as coisas. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include"Complexo.h" #include"Matriz.h" #include"Sistema.h" `insira o código aqui`int main() { Matriz AB,X; Sistema Y; AB.lerMatriz(); AB.escreverMatriz(); Y = AB; // verificar convergencia da matriz A if (Y.convergencia()) { printf("\nSistema pode ser calculado pelo metodo iterativo de Gauss-Siedel\n"); } // se convergencia ok calcular gauss } #pragma once class Complexo { private: float re, im; public: Complexo(); // Construtor cria um número nulo Complexo(float r, float i); void atribuir(float r, float i); void lerComplexo(); // ler complexo do teclado void imprimir(); // escrever complexo para o monitor float real() { return re; } // devolve coeficiente real float imaginario() { return im; } // devolve coeficiente imaginário float modulo(); // devolve módulo do número float argumento(); // devolve argumento do número Complexo conjugado(); // devolve o conjugado do número Complexo simetrico(); // devolve o simétrico do número Complexo potencia(float exp); // devolve potência do número // operações entre 2 complexos Complexo operator +(const Complexo& c); // adição Complexo operator -(const Complexo& c); // subtração Complexo operator *(const Complexo& c); // multiplicação Complexo operator /(const Complexo& c); // divisão // operações entre um complexo (operador da esquerda) e um real (operador da // direita) Complexo operator *(float f); Complexo operator /(float f); }; #define _CRT_SECURE_NO_WARNINGS #include "Complexo.h" #include<stdio.h> #include<math.h> Complexo::Complexo() { re = 0; im = 0; } Complexo::Complexo(float r, float i) { re = r; im = i; } void Complexo::atribuir(float r, float i) { float novo_re = r; float novo_im = i; } void Complexo::lerComplexo() { printf("Parte real:"); scanf("%f", &re); printf("\n"); printf("Parte imaginaria:"); scanf("%f", &im); printf("\n"); } void Complexo::imprimir() // escrever complexo para o monitor { printf("%.1f +%.1fi\t", re, im); } float Complexo::modulo() // devolve módulo do número { float m; m = float(sqrt(pow(re, 2) + pow(im, 2))); return m; } float Complexo::argumento() // devolve argumento do número { float arg; arg = float(atan2(im, re)); return arg; } Complexo Complexo::conjugado() // devolve o conjugado do número { Complexo c; c.re = re; c.im = -im; return c; } Complexo Complexo::simetrico() // devolve o simétrico do numero { Complexo s; s.re = re * (-1); s.im = im * (-1); return s; } Complexo Complexo::potencia(float exp) // devolve potência do número { Complexo p; float mod; mod = float(pow(modulo(), exp)); p.re = float(mod * cos(exp * argumento())); p.im =float( mod * sin(exp * argumento())); return p; } // operações entre 2 complexos Complexo Complexo::operator +(const Complexo& c) // adição { Complexo res; res.re = re + c.re; res.im = im + c.im; return res; } Complexo Complexo::operator -(const Complexo& c) // subtração { Complexo res; res.re = re - c.re; res.im = im - c.im; return res; } Complexo Complexo::operator *(const Complexo& c) // multiplicação { Complexo res; res.re = re * c.re - im * c.im; res.im = re * c.im + im * c.re; return res; } Complexo Complexo::operator /(const Complexo& c) // divisão { Complexo num, den, res; num = Complexo(re, im); den = c; num = *this * den.conjugado(); den = den * den.conjugado(); return Complexo(num.re / den.re, num.im / den.re); } // operações entre um complexo (operador da esquerda) e um real (operador da // direita) Complexo Complexo::operator *(float f) { Complexo res; res.re = re * f; res.im = im * f; return res; } Complexo Complexo::operator /(float f) { Complexo res; res.re = re / f; res.im = im / f; return res; } #pragma once #include "complexo.h" class Matriz { friend class Sistema; private: Complexo** elems; // elementos da matriz int nlin, ncol; // número de linhas e colunas public: void inicia(); // função para iniciar matriz void delete_matriz(); // função para apagar matriz Matriz(); //um construtor por omissão(a ordem da matriz é definida posteriormente) Matriz(int lin, int col); //um construtor que recebe a ordem da matriz e cria uma matriz com elementos a zero Matriz(const Matriz& m2); //um construtor por cópia ~Matriz(); // Um destrutor para eliminar os dados dinâmicos da classe void lerMatriz(); void escreverMatriz(); bool podeSomar(const Matriz& m2); bool podeMultiplicar(const Matriz& m2); Matriz& operator=(const Matriz& m2); Matriz operator+(const Matriz& m2); Matriz operator*(const Matriz& m2); }; #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> #include <string.h> #include <math.h> #include "Matriz.h" #include"Sistema.h" void Matriz::inicia() { elems = new Complexo * [nlin]; for (int i = 0; i < nlin; i++) { elems[i] = new Complexo[ncol]; } } void Matriz::delete_matriz() { for (int i = 0; i < nlin; i++) { delete[] elems[i]; } delete[] elems; } Matriz::Matriz() //um construtor por omissão(a ordem da matriz é definida posteriormente) { nlin = 1; ncol = 1; inicia(); } Matriz::Matriz(int lin, int col) //um construtor que recebe a ordem da matriz e cria uma matriz com elementos a zero { delete_matriz(); nlin = lin; ncol = col; inicia(); } Matriz::Matriz(const Matriz& m2) //um construtor por cópia { nlin = m2.nlin; ncol = m2.ncol; inicia(); for (int i = 0; i < nlin; i++) for (int j = 0; j < ncol; j++) elems[i][j] = m2.elems[i][j]; } Matriz::~Matriz() // Um destrutor para eliminar os dados dinâmicos da classe { delete_matriz(); } void Matriz::lerMatriz() { delete_matriz(); printf("Digite a ordem da Matriz Aumentada. Numero de linha e numero de colunas respectivamente\n\n"); printf("OBS: O numero de linhas da matriz aumentada corresponde ao numero de esquacoes do sistema\n"); printf("O numero de colunas = numero de linhas +1\n"); scanf("%d %d", &nlin, &ncol); inicia(); for (int i = 0; i < nlin; i++) { for (int j = 0; j < ncol; j++) { printf("\nDigite a posicao %dx%d da Matriz AB\n", i + 1, j + 1); elems[i][j].lerComplexo(); } } } void Matriz::escreverMatriz() { printf("\n"); for (int i = 0; i < nlin; i++) { for (int j = 0; j < ncol; j++) { elems[i][j].imprimir(); } printf("\n"); } } bool Matriz::podeSomar(const Matriz& m2) { return (nlin == m2.nlin && ncol == m2.ncol); } bool Matriz::podeMultiplicar(const Matriz& m2) { return (ncol == m2.nlin); } Matriz& Matriz::operator = (const Matriz& m2)// Operador Igual { delete_matriz(); nlin = m2.nlin; ncol = m2.ncol; inicia(); for (int i = 0; i < nlin; i++) { for (int j = 0; j < ncol; j++) { elems[i][j] = m2.elems[i][j]; } } return *this; } Matriz Matriz::operator + (const Matriz& m2) { Matriz mat(nlin, ncol); for (int i = 0; i < nlin; i++) { for (int j = 0; j < ncol; j++) { mat.elems[i][j] = elems[i][j] + m2.elems[i][j]; } } return mat; } Matriz Matriz::operator*(const Matriz& m2) { Matriz mat(nlin, m2.ncol); for (int i = 0; i < nlin; i++) { for (int j = 0; j < m2.ncol; j++) { for (int k = 0; k < ncol; k++) { mat.elems[i][j] = mat.elems[i][j] + (elems[i][k] * m2.elems[k][j]); } } } return mat; } #pragma once #include "Complexo.h" #include "Matriz.h" class Sistema { friend class Matriz; private: int ordem; public: Sistema() { Matriz(); } Matriz Matriz_AB;// matriz aumentada Matriz X; // vetor de icognitas void gauss(); bool convergencia(); void resultados(); }; #define _CRT_SECURE_NO_WARNINGS #define max_iter 100 //número máximo de iterações admissível #define tol 0.0001 //erro máximo admitido #include<stdio.h> #include "Sistema.h" #include "Matriz.h" #include "Complexo.h" #include <math.h> void Sistema::gauss() { Matriz X(ordem, 1);//vector das incógnitas na iteração actual Complexo x_antigo; //valor da incógnita na iteração anterior Complexo soma; float erro_x = 0; // erro_x - o erro da incógnita float erro_iter = 0; //erro_iter - erro da iteração int niter = 0; //numero de iteracoes do { niter++; float erro_iter = 0; for (int i = 0; i < ordem; i++) { x_antigo = X.elems[i][0]; //soma =0 for (int j = 0; j < ordem; j++) { if (j != i) soma = soma + (Matriz_AB.elems[i][j] * X.elems[j][1]); } X.elems[i][1] = (Matriz_AB.elems[i][ordem]) - (soma) / Matriz_AB.elems[i][i]; erro_x = (X.elems[i][0] - x_antigo).modulo(); if (erro_x > erro_iter) erro_iter = erro_x; } } while (erro_x > tol && niter < max_iter);//ver erro x return X; } bool Sistema::convergencia() { Complexo soma; for (int i = 0; i < ordem; i++) { for (int j = 0; j < ordem; j++) { if (j != i) soma = soma + Matriz_AB.elems[i][j]; } if (Matriz_AB.elems[i][i].modulo() > soma.modulo()) return true; else return false; } } void Sistema::resultados() { for(int i=0;i<ordem;i++) X.elems[i][1].imprimir(); }