camoes Posted October 11, 2012 at 10:42 AM Report #478699 Posted October 11, 2012 at 10:42 AM Bons dias. Tenho de fazer um trabalho para a universidade, em C++ mas estou pouco familiarizado com esta linguagem. Sei programar em Java e tenho umas luzes de C, linguagem que aprendi a 1 década. Estou a ter algumas dificuldades com a linguagem em si, e propunha-me a expor estas duvidas aqui, ao longo do decorrer do trabalho, na esperança que alguém me possa dar um apoio. Logo não se trata de um tópico com um problema pontual e específico, mas sim um tópico "ongoing" até ao final de Dezembro, data em que tenho de fazer a entrega. São sempre bem vindas ideias. O trabalho consiste no software de gestão de uma fábrica básica, robotizada, e devemos gerir a movimentação de fornecimento de materiais aos postos de trabalho e armazéns, de acordo com regras predefinidas. Basicamente e um trabalho sobre filas e prioridades penso eu. Nos próximos dias dias vou começando a colocar as dúvidas. Obrigado.
pikax Posted October 11, 2012 at 11:00 AM Report #478700 Posted October 11, 2012 at 11:00 AM estas a fazer com a framework .Net? Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
camoes Posted October 11, 2012 at 01:47 PM Author Report #478710 Posted October 11, 2012 at 01:47 PM acho que sim.. Estou a usar o Visual Studio 2010.
pikax Posted October 11, 2012 at 01:49 PM Report #478711 Posted October 11, 2012 at 01:49 PM quando tiveres duvidas posta aqui Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
HappyHippyHippo Posted October 11, 2012 at 02:12 PM Report #478714 Posted October 11, 2012 at 02:12 PM acho que sim.. Estou a usar o Visual Studio 2010. A e B não implica C por outras palavras: C++ e Visual Studio não implica .Net IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
camoes Posted October 12, 2012 at 06:04 PM Author Report #478882 Posted October 12, 2012 at 06:04 PM A e B não implica C por outras palavras: C++ e Visual Studio não implica .Net agora e que me trocaste as voltas. ps: Ja tenho a 1ª dúvida: qual e a cenas de apontador e do apontador para apontador? (* ou **) para aceder a um vector??? sou mesmo nabo...
HappyHippyHippo Posted October 12, 2012 at 06:08 PM Report #478886 Posted October 12, 2012 at 06:08 PM qual e a cenas de apontador e do apontador para apontador? (* ou **) para aceder a um vector??? sou mesmo nabo... ui, está bonito nunca aprendeste/ouviste/leste algo sobre o que é um ponteiro ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest Posted October 13, 2012 at 04:51 PM Report #478984 Posted October 13, 2012 at 04:51 PM agora e que me trocaste as voltas. ps: Ja tenho a 1ª dúvida: qual e a cenas de apontador e do apontador para apontador? (* ou **) para aceder a um vector??? sou mesmo nabo... Camões, tens aqui uma óptima explicação sobre o funcionamento dos apontadores (ou ponteiros). Mais para o fim da página tens a resposta à tua pergunta sobre "pointers to pointers".
camoes Posted October 13, 2012 at 10:40 PM Author Report #479045 Posted October 13, 2012 at 10:40 PM tanks... acho que percebi.. ja não trabalhava com apontadores a muito tempo... +- 10 anos... portanto se eu entendi bem: private: int key; float tara, carga; Posto * posicao; (...) Robot::Robot (const int k,const float tar,const float carg,const Posto& pos){ key=k; tara=tar; carga=carg; posicao=pos; } mas da-me erro... não devia igualar o apontador ao endereçõ de memória?
camoes Posted October 13, 2012 at 10:58 PM Author Report #479049 Posted October 13, 2012 at 10:58 PM o mesmo se passa com os "set's": void setPosicao(const Posto* pos); void setPosicao(const Posto& pos); (...) void Robot::setPosicao(const Posto * pos){ posicao = pos; } void Robot::setPosicao(const Posto & pos){ posicao = pos; } da-me erro em ambos.. onde e que eu estou a falhar? faz setido ter os 2?
HappyHippyHippo Posted October 14, 2012 at 12:30 PM Report #479073 Posted October 14, 2012 at 12:30 PM é impossivel responder correctamente porque não apresentas código suficiente ... no primeiro problema : o que é pos ? batatas ? e no segundo, achas que : primeiro set : X = Y e primeiro set : X = Z se o tipo de Y e Z são diferentes logo é impossível que X seja do mesmo tipo que os dois ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
camoes Posted October 14, 2012 at 02:39 PM Author Report #479088 Posted October 14, 2012 at 02:39 PM bem... "pos" e um apontador para uma instância de objecto Posto. Esta classe é um robot que anda de posto em posto a carregar e descarregar materiais. O apontador "posicao" indica onde é que esta agora o robot. No "setPosicao" o que eu quero e um método que me altere essa posição, passando a apontar para um segundo posto. Estou em duvida se, para isso, devo passar o endereço (&) ou o apontador (*) ou se devo ter as 2 disponíveis. Quanto ao construtor, a situação e semelhante. Quero que me passe a apontar para um posto passado por parâmetro.
HappyHippyHippo Posted October 14, 2012 at 02:59 PM Report #479091 Posted October 14, 2012 at 02:59 PM eu sinseramente não quero saber o que o código faz, o que interessa é perceberes como funciona os ponteiros segue o seguinte código int i; // variável do tipo número inteiro (tipo = int) int j = 100; // variável do tipo número inteiro com o valor de 100(tipo = int) int * p; // variável do tipo ponteiro para um número inteiro (tipo = int*) int * pp; // variável do tipo ponteiro para um número inteiro (tipo = int*) i = 10; // OK porque 10 é um número inteiro, logo tens : (int = int) p = 10; // OK e ERRADO, o compilador aceita por causa de definição de ponteiro mas não estás a guardar o valor 10, estás a referênciar a posição de memória 10 (int* = int) p = i; // OK e ERRADO pelas razões do último exemplo mas o compilador agora dexe se queixar mais viemente (int* = int) p = &i; // OK, estás a guardar em p o endereço de memória da variável i (int* = int*) pp = &j; // OK, ja referido acima p = pp; // OK, estás a guardar em p a posição de memória apontada por pp que é a posição de j (int* = int*) *p = 20; // OK, estás a guardar o valor 10 na posição de memória apontada por p (int = int) (nota : j = 20) *p = i; // OK, estás a guardar o valor de i na posição de memória apontada por p (int = int) (nota: j = i) como vês, tem tudo haver com o tipo de dados ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
camoes Posted October 14, 2012 at 03:23 PM Author Report #479093 Posted October 14, 2012 at 03:23 PM (edited) tanks... logo eu devia poder fazer o que fiz: Posto * posicao; //apontador para o posto void setPosicao(const Posto* pos); void setPosicao(const Posto& pos); (...) // metodo set para quando quero passar o destino por um apontador void Robot::setPosicao(const Posto * pos){ posicao = pos; } // metodo set para quando quero passar o destino por uma posição de memória void Robot::setPosicao(const Posto & pos){ posicao = pos; } não deviam funcionar os 2? Edited October 14, 2012 at 03:27 PM by camoes
HappyHippyHippo Posted October 14, 2012 at 03:29 PM Report #479096 Posted October 14, 2012 at 03:29 PM claro que não ... então se : Posto* posição; // tipo = Posto* como é que isto pode ser : void Robot::setPosicao(const Posto & pos) { posicao = pos; // Posto* = Posto& ????????? } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
camoes Posted October 14, 2012 at 03:46 PM Author Report #479101 Posted October 14, 2012 at 03:46 PM (edited) Agora é que me trocaste as voltas... p = &i; // OK, estás a guardar em p o endereço de memória da variável i (int* = int*) pensei que pudesse fazer a igualdade entre um apontador e o endereço de memória. C++ esta a fazer-me duvidar da minha inteligência... Edited October 14, 2012 at 03:46 PM by camoes
camoes Posted October 20, 2012 at 10:39 PM Author Report #479894 Posted October 20, 2012 at 10:39 PM bem... aquilo ficou resolvido.. agora e outro. queria fazer uma divisão de uma string (proveniente de um .csv). A solução que me parecei lógica foi a seguinte: string * LeitorFicheiros::split(const string frase){ if(frase.size()==0) return NULL; int inicio=0; int count=0; int posicao; string *retorno ; while ((posicao = frase.find(",",inicio))>=0){ count++; inicio=posicao+1; }; retorno = new string [count]; string dado; inicio=0; posicao = frase.find(",",inicio); dado=frase.substr(inicio,posicao); inicio=posicao+1; strcpy(retorno[retorno->size()],dado); //retorno[retorno->size()]=string(dado); for(int i=1;i<count;i++){ posicao = frase.find(",",inicio); dado=frase.substr(inicio,posicao-inicio); retorno[i]=string(dado); inicio=posicao+1; } dado=frase.substr(inicio,posicao); inicio=posicao+1; retorno[retorno->size()] = string(dado); return retorno; } mas não esta a funcionar... podem ajudar
camoes Posted October 20, 2012 at 11:59 PM Author Report #479898 Posted October 20, 2012 at 11:59 PM deixem la isso.... vou fazer o slit distinto para cada ficheiro.. agora o meu problema e outro. #include <iostream> #include <fstream> #include <string> #include "Robot.h" #include "LeitorFicheiros.h" using namespace std; LeitorFicheiros::LeitorFicheiros(){ ptcFlRobot = "Fx3.txt"; ptcFlArmazem = "Fx1.txt"; ptcFlPProd = "Fx2.txt"; ptcFlCaminhos = "Fx4.txt"; } const string LeitorFicheiros::leRobots(){ ifstream f; string frase; Robot r; float rTara, rCarga; f.open("Fx3.txt"); if(!f){ cout << "\n! ! ! ! ! ! ! ! ! ! ! !\nERRO NO FICHEIRO DE ROBOTS\n! ! ! ! ! ! ! ! ! ! ! !\n"; return false; } while(!f.eof()){ getline(f,frase,','); int rkey; int rkey=atoi(frase); getline(f,frase,','); float rTara=atof(frase); getline(f,frase,','); float rCarga=atof(frase); //precisamos de um metodo que retorne um apontador para o posto apartir de um int correspondente a key //para podermos criar um construtor no robot. getline(f,frase,','); int rCarga=atoi(frase); //aqui vai invocar esse contrutor para criar o robot e acrescenta-lo a lista. } //aqui vai returnar a lista } esta-me a dar erro nas conversões
camoes Posted October 21, 2012 at 01:18 PM Author Report #479918 Posted October 21, 2012 at 01:18 PM resolvido ex: float rCarga=atof(frase.c_str());
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now