Jump to content

[C++.NET] Trabalho


Recommended Posts

Posted

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.

Posted

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."

Posted

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."

Posted

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...

Posted

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".

Posted

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?

Posted

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?

Posted

é 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
Posted

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.

Posted

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
Posted (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 by camoes
Posted (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 by camoes
Posted

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

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.