Jump to content

C ou C++ para computação cientifica


edumad

Recommended Posts

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.

Link to comment
Share on other 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).

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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.

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

Este fórum serve para aprender! 😁

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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.

Link to comment
Share on other 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 😄

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

Link to comment
Share on other 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:

Link to comment
Share on other 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 😄 .

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.

Link to comment
Share on other 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 😄 .

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

Desaparecido.

Link to comment
Share on other 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 😉

Link to comment
Share on other 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á...

Link to comment
Share on other 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. ?

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

Link to comment
Share on other 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!

Link to comment
Share on other sites

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.