|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 476
|
[C] Cosa per permette di fare il linguaggio C?
Buongiorno.
Attualmente mi ritrovo a studiare il linguaggio di programmazione C all'università e vi scrivo perchè vorrei avere delle delucidazioni in merito alle potenzialità di questo linguaggio. Infatti, per quello che stiamo studiando ora, mi sembra che il linguaggio C permetta di fare poche cose. Voglio dire: le funzioni for, if, while, printf, scanf mi sembra che permettano di fare poche cose. Credo sia soltanto una mia impressione, ma volevo sapere lo stesso il vostro parere. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Il C come il C++ o Java o Eiffel o PL/I o COBOL o FORTRAN o Ada o Haskell o Lisp etc... sono linguaggi turing completi. Questo significa che qualsiasi cosa ti possa esprimere in uno di questi linguaggi, lo puoi esprimere altrettanto bene negli altri. Cambiera' la sintassi, magari il programma sara' piu' lungo, sara' piu' astruso etc... ma a livello computazionale non cambia niente. Qualsiasi algoritmo ti possa scrivere in C, lo puoi scrivere negli altri linguaggi. E viceversa ovviamente. Per un caso piu' estremo considera il linguaggio brainfuck : http://en.wikipedia.org/wiki/Brainfuck che ha una sintassi ancora piu' povera di quella del C e nonostante cio' ha lo stesso potere espressivo di qualsiasi altro linguaggio di programmazione turing completo. Detto questo, i programmatori non partono ogni volta da zero, ci sia aiuta con le librerie. E qui ci sono differenze tra i vari linguaggi nel senso che alcuni dispongono di librerie sterminate (come Java) altri no hanno meno scelta. Ma questo dal punto di vista computazione non incide sulla "potenza" del linguaggio.
__________________
MICROSOFT : Violating your privacy is our priority Ultima modifica di goldorak : 25-11-2010 alle 15:35. |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Il linguaggio di programmazione C è un sistema turing-completo, come la stragande maggioranza (forse tutti? non saprei, ad esempio SQL... mi pare sia diventato turing-completo da una certa versione in poi) dei linguaggi di programmazione "main stream".
Detto questo, per un linguaggio di programmazione, il fatto di essere turing-completo non ci dice nulla circa la velocità con cui esegue i calcoli, la sua minore o maggiore espressività (rispetto altri linguaggi), il numero e/o la tipologia di costrutti che mette a disposizione del programmatore, l'ortogonalità degli stessi ecc... Se posso consigliarti una lettura nel forum circa le caratteristiche di diversi linguaggi di programmazione così come percepite da diversi programmatori ti indico questo thread
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Il mio parere
Il C è un linguaggio che di fatto di permette di fare tutto, ma con una certa complessità non essendo orientato agli oggetti.
Cosa differente dal C++, c#, Java ecc Quindi la domanda è, cosa vuoi fare? Devi sviluppare qualcosa? Devi imparare semplicemente a programmare?
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Hai usato una parola problematica: "complessità" E anche la questione dell'orientamento agli oggetti Sarei d'accordo con te se la tua frase fosse differente, ad esempio sostituendo "una certa complessità" con "con minore produttività" e sostituendo "non essendo orientato agli oggetti" con "essendo povero di costrutti/feature di alto livello"
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
__________________
MICROSOFT : Violating your privacy is our priority |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
La programmazione orientata agli oggetti da un vantaggio in termini di tempi di sviluppo notevoli rispetto al realizzare la stessa cosa in C. Quindi la mia complessità è riferita al reale utilizzo del linguaggio (prova a progettare un qualcosa che sia modulare come lo è il C++ in C, ti ritroverai a gestire liste dinamiche di puntatori a funzione con parametri variabili) ovviamente invece, lato puramente dottrinale, è il caso di apprendere prima il C che il C++... ma a quel punto... io farei partire chiunque con il basic per i costrutti iniziale per poi passare la persona al c# o al java per apprendere la programmazione oop
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
|
#8 | |||
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Quote:
![]() Quote:
Se proprio ci vuole un linguaggio imperativo come primo tentativo farei usare il Pascal o una delle sue varianti, Oberon o Modula-2/3. Altrimenti ce' Scheme che funziona benissimo pur essendo un linguaggio funzionale.Infine non ce' proprio bisogno del c# o java per capire i concetti fondamentali della progettazione/programmazione orientata agli oggetti. Tanto che l'Objective-C sarebbe una scelta migliore per chi volesse fare oo e venisse da C (e se sviluppi su ios non hai scelta....).
__________________
MICROSOFT : Violating your privacy is our priority |
|||
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Pascal anche al posto del basic, non cambia.
Il c++ è orientato ad oggetti e quindi ovvio che ti solleva dal dover implementare da te l'OOP. Forse non mi sono spiegato bene nel dire cosa intendevo infatti. Hai mai in C creato qualcosa che funzioni e sia modulare ESATTAMENTE come lo è già il C++? Non so se è chiaro, ti sto chiedendo se hai mai simulato l'uso di classi e oggetti in C.
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
p.s. però il multithreading in C è ancora peggio dell'OOP |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Se uno viene dal C la scelta per me è il puro C++, però è questione di esperienze e opinioni, io la vedo così. Dico c#, java... perché per la mia esperienza sono ottimi per far apprendere l'OOP, senza distrazioni su puntatori e altro (che comunque esistono in questi linguaggi, ma tutto è o dovrebbe essere controllato, compreso l'uso della memoria)
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
__________________
MICROSOFT : Violating your privacy is our priority |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12944
|
Quote:
Per il multi-threading c'è l'ottima libreria pthread (sotto linux, ma so che esiste un porting anche su Win) che non sfigura di certo. Comunque tutto il computabile può essere fatto con il costrutto while ed il costrutto if, per cui con C puoi fare semplicemente tutto. Il punto è COME. Ultima modifica di WarDuck : 26-11-2010 alle 13:26. |
|
|
|
|
|
|
#15 | ||
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21999
|
Quote:
ovviamente programmare in C risulta spesso più problematico e lungo rispetto ad esempio un c# perchè per parecchie cose non hai già la pappa pronta ma questo non pregiudica affatto la qualità del risultato finale. giusto per farti un esempio, la stragrande maggioranza di tutti i dispositivi elettronici vengono programmati in ansi c e in nessun altro linguaggio Quote:
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 Ultima modifica di !fazz : 26-11-2010 alle 14:01. |
||
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
mhmhm...
secondo me il più grosso limite di un linguaggio di programmazione sta nel programmatore. Con ogni linguaggio si può in teoria fare tutto ma alcune cose sono più semplici con alcuni linguaggi che con altri. Dipende dallo scopo finale. Poi sicuramente ci sarà qualche pazzo che prova a fare la programmazione web in assembly ma questo è un altro paio di maniche. Il discorso sulle potenzialità di un linguaggio in ambito di produzione/lavorativo si apprezza solo in azienda, all'università o a livello amatoriale cambia molto poco da un linguaggio all'altro. E comunque per rispondere al thread originale: C è una buona scelta come linguaggio, è molto richiesto in giro e domin ala grande il mondo embedded. Uno dei parametri che prendo di solito per valutare l'"utilià" di studiare o meno un linguaggio e l'indice TIOBE: http://www.tiobe.com/index.php/conte...pci/index.html Come vedi C è secondo in classifica come utilizzo, ha davanti solo il Java. A conclusione di tutto: 1) C è un linguaggio che ti permette di fare di tutto, soprattutto in certi ambiti specifici. 2) Quanto vale il "di tutto" dipende praticamente solo da te Saluti :-) |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
|
Quote:
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:48.












Se proprio ci vuole un linguaggio imperativo come primo tentativo farei usare il Pascal o una delle sue varianti, Oberon o Modula-2/3. Altrimenti ce' Scheme che funziona benissimo pur essendo un linguaggio funzionale.








