• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

edumad

C ou C++ para computação cientifica

36 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(...) 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...!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

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