Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

edumad

C ou C++ para computação cientifica

Mensagens Recomendadas

edumad    0
edumad

Eu tenho interesse em computação cientifica. E segundo as minhas pesquisas, as linguagens mais fortes usadas em computação cientifica, quantidade brutal de dados - "number crushing", são o velhinho e fiável Fortran, que já conheço, depois foi-se fazendo coisas em C, e depois em C++.

Não tenho muita certeza quanto a qual (C ou C++) é preferido para o serviço... Nem conheço nenhuma das duas Mas C++ é mais eficiente em certos aspectos, se bem que deve perder nas fiabilidade. ?

Sabem-me dizer qual destas duas é que normalmente é escolhia?

E já agora: Será mais fácil aprender c e depois c++, ou qq livro de c++ torna facil a aprendizagem mm para quem nao sabe nada de c.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
theproject    0
theproject

Boas,

C++ nao é mais eficiente que C.. C++ é o mesmo que C mas com o paradigma de programação com objectos, o que faz com que seja na melhor das hipóteses tão eficiente quanto C, se consegues fazer eficiente em C++, tb fazes eficiente em C.

O que entendes por fiabilidade?? Uma linguagem de programacao nao é um carro que deixa de funcionar por desgaste..

Do pouco que conheco de fortran não existe programacao com objectos em fortran, portanto optas por C++ se a aplicacao que queres fazer se aplica melhor a uma solução orientada a objectos, cc optas por C ou outra linguagem imperativa qq (como fortran).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    75
M6

O C e o C++ são distintos no paradigma que abordam. O C é uma linguagem procedimental e o C++ é uma linguagem object oriented.

Não compreendo o que queres dizer com "o C++ perde fiabilidade"...

Podes usar qualquer linguagem para abordar o teu interesse/necessidade, se bem que o C e o C++, normalmente o que acontece em casos como este, é que por razões históricas uma determinada linguagem é mais usada numa determinada área.

O C e o C++ possuem um conjunto de características que permite uma performance e escalabilidade que é impossível, ou extremamente dificil, de obter com outras linguagens.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
edumad    0
edumad

Deu para perceber que mandei grandes bacoradas... é de quem nao conhece.

Pelo que eu percebi, C e Fortran serão preferiveis para mastigar numeros, e c++ tem a vantagem das classes que para certas manipulações com vectores serao uteis, pelo menos ao programador.

O facto de complicar a estrutura da linguagem, leva-me a crer que torna o processo de simulação numérica mais "complicado" do que com linguagens mais directas.

A única coisa que sei de programação é do curso (eng quimica), onde não se aprende praticamente nada de como funciona e o que é uma linguagem de programação, simplesmente aprende-se a programar.

C deve ser das linguagens masi utilizadas no mundo, para montes de aplicações...

Eu estou a falar da sua aplicação para fazer simulação atmosférica, dinâmica de fluidos computacional, e coisas do género.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

Epa... fortran??? esquece isso pa. Bebe antes um copo de água :cheesygrin:

C ou C++ pa. Eu aconselho C, pois sou dos maiores guerreiros anti POO. Mas anyway... podes pegar num compilador de C++ e compilar uma apliação sem nenhuma classe experimenta... na verdade se incluires as bibliotecas certas o código muitas vezes tanto compila em C ocmo em C++.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    75
M6

Deu para perceber que mandei grandes bacoradas... é de quem nao conhece.

Este fórum serve para aprender! :cheesygrin:

Pelo que eu percebi, C e Fortran serão preferiveis para mastigar numeros, e c++ tem a vantagem das classes que para certas manipulações com vectores serao uteis, pelo menos ao programador.

O facto de complicar a estrutura da linguagem, leva-me a crer que torna o processo de simulação numérica mais "complicado" do que com linguagens mais directas.

A única coisa que sei de programação é do curso (eng quimica), onde não se aprende praticamente nada de como funciona e o que é uma linguagem de programação, simplesmente aprende-se a programar.

C deve ser das linguagens masi utilizadas no mundo, para montes de aplicações...

Eu estou a falar da sua aplicação para fazer simulação atmosférica, dinâmica de fluidos computacional, e coisas do género.

Aconselho-te o C++ ou o Java por serem linguagens que trabalham no paradigma OO, disponibilizando ao programador algumas vantagens que são uma mais valia como por exemplo, a herança.

Não te assustes com o "bicho papão" do C++, tem algumas particularidades como qualquer outra linguagem, embora por vezes tenha algumas coisas que parecem "voo doo"...

Se quizeres evitar certas dores de cabeça, usa Java.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

epa... não acham que o POO por si só exige algum esforço?

Para começar não acham que mais vale uma abordagem procedimental?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    75
M6

epa... não acham que o POO por si só exige algum esforço?

Para começar não acham que mais vale uma abordagem procedimental?

Acho isso totalmente irrelevante. O que é necessário é compreender o paradigma, quer seja em procedimental ou oo.

Qualquer que seja a escolha existe esforço envolvido e não acho que a aprendizagem do paradigma oo seja mais dificl que o procedimental.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Quando se começa a perceber a parte OO do C++, fazem-se coisas complicadas duma forma incrivelmente simples. Falo por experiência própria, não sou ainda muito conhecedor do paradigma, mas ja fiquei de boca aberta por diversas vezes...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

Pa, de todas as vezes que usei POO foi porque era obrigatório fazer essa abordagem. Nunca  usei isso por me facilitar a vida etc etc... é que é muito lindo e é um paradigma que foi satisfeito com o C++ e mais n sei o quê, mas depois um gajo só usa aquilo porque o professor obriga.

Acredito que possa ser util, mas apenas quando se trata de ojectos de grande dimensão. A maior parte das vezes que um gajo desenvle uma aplicação, todas as funcionalidades que cria são para ser usadas ali exlclusivamene... assim sendo não esou a ver paa que deve ser satisfeito o paradigma da POO.

Agora se nos pedirem para desenvolver código que vai servir de base para desenvolvimento futuro em vários àreas diferentes e por vários caminhos... aí já posso concordar... mas acho que não é o caso... e não tem aparecido muito pessoal aqui com projectos de grande dimensão.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Um pouco off topic... POO não tem só a ver com reutilização de código, POO torna o problema mais parecido com a vida real, torna-o mais simples de resolver, seja com 3 seja com 3000 objectos, hum... talvez um pouco exagerado :D

Quanto à questão da computação cientifica... tanto em java como em c++ é necessário compreender o paradigma da programação orientada a objectos, e este talvez seja o maior problema, outra questão será a performance, em java um programa feito por um programador menos experiente tem tendencia a ser muito pesado, em c++ ou em c o problema não se passa tanto, não digo que c e c++ sejam mais rápidos que java...

Se tens alguma familiaridade com programação procedimental e não pretendes aprender um novo paradigma então creio que te podes ficar por C, no entanto neste momento não existe qualquer motivo para não usares c++ ou java.

Qual das linguagens é a escolhida?! isso depende sempre do problema, na realidade, neste momento vai depender de ti a escolha, C, C++ ou Java, as 3 são robustas, a sua rapidez depende em grande parte do programador, as 3 suportam grandes quantidades de dados, existem diferenças no tipo de dados que cada uma suporta, e isso pode ou não ser importante.

Espero ter ajudado alguma coisa ;), até...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

Epa... computação cientifica em java não me parece grande ideia... por um algoritmo pessado a correr numa máquina virtual...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    310
Rui Carlos

a principal desvantagem do C++ é que é muito mais complicado de aprender.

pessoalmente também prefiro o C (não gosto de POO) mas é necessário dizer que o C também tem algumas desvantagens em relação ao C++, mesmo esquecendo os objectos em C++:

- em C++ podemos ter vários métodos/funções com o mesmo nome, em C não;

- em C++ podemos sobrecarregar operadores (+,-,*,/,...), em C não;

- imprimir resultados no ecrã é muito mais simples em C++;

- em C++ temos funções inline que permitem ter programas eficientes sem comprometer a organização dos programas;

- em C++ a passagem de argumentos por referência é mais simples.

podes programar em C++ sem nunca usar objectos, e tendo disponíveis todas as suas vantagens ;)

se bem que não é aquilo que eu faço, porque sou um pouco "fundamentalista" em relação à POO :wallbash:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter
Epa... computação cientifica em java não me parece grande ideia... por um algoritmo pessado a correr numa máquina virtual...

Aqui está um dos grandes erros sobre java ;), sim aquilo corre em máquina virtual, mas também possui uma coisa que C/C++ não possui, um compilador JIT, e é em algoritmos complexos que java até chega a ser mais rápido que C/C++, digamos que existem 10% de casos onde java vence :D.

Mas não quero lançar a discução sobre qual a linguagem mais rápida... concordo com o Rui_Carlos, podes usar "bocados" das caracteristicas de uma linguagem OO mas C++ é um puco mais dificil de aprender... No final eu apostava em java, mas talvez seja porque apesar de ter passado por C, e de gostar bastante, quando comecei em POO conheci um mundo novo :)

Mesmo assim, java mal programado consome os recursos de qualquer supercomputador.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

(...) e é em algoritmos complexos que java até chega a ser mais rápido que C/C++, digamos que existem 10% de casos onde java vence :D.

Tens algum caso que possas mostrar? Gostava de ver pra crer! ;)

Em geral não gosto de linguagens interpretadas por serem muito mais lentas que as compiladas (na generalidade). Se me pudessem mostrar o contrário, talvez mudasse de ideias...!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

O tópico está a fugir um pouco do objectivo mas vou deixar apenas mais esta 'achega'.

Grafico http://kano.net/javabench/data, tirado de http://kano.net/javabench/

Algumas das vantagens do java estao no JIT, que analiza o código e que  o optimiza para a máquina onde está a correr o programa, nesse caso o teu programa em java passa a ser nativo e não interpretado.

O problema do java, e do .Net, é que é necessário um maior conhecimento da linguagem para que o codigo possa ser melhor e existem por ai muito exemplos de mau codigo em java, quem não usou o JBuilder10? repararm no salto de performance que existe nas versões 2005 e 2006?

O link foi o primeiro que obtive de uma pesquisa no google, não li tudo e não tenho a certeza dos testes que foram feitos. Há algum tempo atrás li um artigo sobre rapidez da linguagem java e testes com compiladore jit mas não o consigo encontrar, tinha lá um bom exemplo.

Não espero convencer, espero apenas que o pessoal deixe de afirmar categóricamente que java é lento, prefiro que digam que java tem tendência a ser lento mas que pode ser mais rápido ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Aqui a analise é calma fazendo referencia a vários testes. http://www.idiom.com/~zilla/Computer/javaCbenchmark.html

Devo dizer também que testes que usam apenas o calculo do tempo não são muito fiáveis, a maquina virtual provoca resultados muito estranhos quando medimos o tempo usando o para fazer vários cálculos.

Mas uma pesquisa calma na web vai produzir resultados muito interessantes, a evolução das jvm tem sido enorme e espera-se muito da proxima versão do java, 1.6 ou 6.0!

Quando encontrar o artigo que pretendia coloca por aqui o link, até lá...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    310
Rui Carlos

Aqui a analise é calma fazendo referencia a vários testes. http://www.idiom.com/~zilla/Computer/javaCbenchmark.html

Devo dizer também que testes que usam apenas o calculo do tempo não são muito fiáveis, a maquina virtual provoca resultados muito estranhos quando medimos o tempo usando o para fazer vários cálculos.

Mas uma pesquisa calma na web vai produzir resultados muito interessantes, a evolução das jvm tem sido enorme e espera-se muito da proxima versão do java, 1.6 ou 6.0!

Quando encontrar o artigo que pretendia coloca por aqui o link, até lá...

em C++ temos o gcc (ou g++) que é na minha opinião o melhor compilador que existe.

se estivermos em Linux (ou mesmo noutros ambientes Unix) não deve ser fácil superar código C++ gerado com o gcc com todas as optimizações. :hmm:

é claro que depende do SO e da arquitectura que estamos a usar...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brink@ero    0
brink@ero

C deve ser das linguagens masi utilizadas no mundo, para montes de aplicações...

Eu estou a falar da sua aplicação para fazer simulação atmosférica, dinâmica de fluidos computacional, e coisas do género.

Eu vou ser sincero, quando tenho um problema de simulação, estudo da dinâmica de fluidos, coisas mais avançadas e que quero resolver, não me atiro logo para C/C++.

Eu faço tudo primeiro no MatLab/Simulink. A linguagem é simples, intuitiva e matemática conseguindo obter rápidamente os resultados que se podem apresentar muito simplificadamente em gráficos.

As outras grandes vantagens do MatLab é de que as variáveis serem matrízes e de possuir uma enorme biblioteca de funções (integrais/derivadas/t.fourier/t.laplace) na qual tens acesso.

No Simulink, nem tens de programar muito para fazeres uma simulação. Basta teres um bloco para cada sistema, aplicares as respectivas transformações e voíla, tens tudo.

É muito arriscado e complicado fazer estas simulações em C/C++:

1.º tu tens de criar ou encontrar as tuas bibliotecas (por exemplo: manipulação de matrizes);

2.º a dificuldade de teres gráficos (ou poes no file e vez no excel, ou tens de usar o OpenGL ou outra biblioteca);

3.º no MatLab é fácil de detectar erros que tu cometes, em C/C++ é mais complicado, principalmente quem está a dar os primeiros passos (tanto na biblioteca que encontras na net como na biblioteca que crias, pode existir erros/excepções que podem provocar erro no programa ou resultado errado).

Eu conselho experimentares o MatLab, o defeito é não ser free e exigir muito do teu PC. Depois se quiseres algo mais "hard" passas para o C/C++, mas eu sempre passo primeiro pelo MatLab.

Eu por exemplo na construção dum controlo para um motor, crio um simulador Simulink, perco umas horas para a implementação e o resto é só testes e depois de ter todas as contas feitas passo para C/C++ (quando é necessário fazer tal coisa).

Se tiveres outro programa que faça esse estudo/simulações e queiras fazer à tua maneira (por exemplo o PSW), isso já é outra conversa, ai sim -> C/C++ (é a minha escolha).

Esta é a minha opinião.

Cumpr. bk@ero    ;)

PS: Se conseguisses criar um programa identico ao PSW que não "crasha-se" és milionário!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
edumad    0
edumad

MatLab também conheço e é muito usada em engenharia para muita simulação pelas razões que indicaste. Mas não conheço ninguém que faça cfd a sério em matlab. Tamos a falar de esforços computacionais de um supercomputador, não vais por um supercomputador a mastigar números com matlab.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    310
Rui Carlos

MatLab também conheço e é muito usada em engenharia para muita simulação pelas razões que indicaste. Mas não conheço ninguém que faça cfd a sério em matlab. Tamos a falar de esforços computacionais de um supercomputador, não vais por um supercomputador a mastigar números com matlab.

o MatLab tem outro problema, é pago e não têm licenças para estudantes...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    75
M6

Epa... computação cientifica em java não me parece grande ideia... por um algoritmo pessado a correr numa máquina virtual...

E em Fortran, achas rápido? ;)

Mais, sabes que o Java, mesmo sendo interpretado a questão da má performance é cada vez mais um mito?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    75
M6

MatLab também conheço e é muito usada em engenharia para muita simulação pelas razões que indicaste. Mas não conheço ninguém que faça cfd a sério em matlab. Tamos a falar de esforços computacionais de um supercomputador, não vais por um supercomputador a mastigar números com matlab.

o MatLab tem outro problema, é pago e não têm licenças para estudantes...

Por acaso acho que não é verdade. Ainda ontem estava a falar com um colega que me disse ter instalado na máquina dele uma versão educacional.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    75
M6

Tenho visto, com muita pena minha, a opinião recorrente e meio generalizada de que o C++ é difícil...

Além de discordar, o C++ é só mais uma linguagem que suporta o paradigma OO, fico bastante triste por ver que há quem não se atreva a mexer no C++ por este ser dificil e com isso não o usar, optando por tecnologias que podem ser vistas, em certos domínios ou aplicações, como menos indicadas e, consequentemente, piores.

Esse medo, além de infundado, impede a evolução de um programador e limita as escolhas que o mesmo faz, seja no C++ ou em qualquer outra tecnologia. Quando não se sabe sobre algo, estuda-se e aprende-se, mas não há que ter medo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    310
Rui Carlos

MatLab também conheço e é muito usada em engenharia para muita simulação pelas razões que indicaste. Mas não conheço ninguém que faça cfd a sério em matlab. Tamos a falar de esforços computacionais de um supercomputador, não vais por um supercomputador a mastigar números com matlab.

o MatLab tem outro problema, é pago e não têm licenças para estudantes...

Por acaso acho que não é verdade. Ainda ontem estava a falar com um colega que me disse ter instalado na máquina dele uma versão educacional.

para fazer download do trial tive que me registar e indiquei que era estudante, então quando fiz o login apareceu uma mensagem a dizer que não havia licenças para estudantes.

não sei se existe outro método para pedir esse tipo de licenças...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade