M2G Posted July 27, 2013 Report Posted July 27, 2013 Intrebari si raspunsuri pentru prima iteratie.Chapter 1 - A Tutorial IntroductionChapter 2 - Types, Operators and ExpressionsChapter 3 - Control FlowDetalii aici: https://rstforums.com/forum/72988-rsta-1-c-programming-language.rstOfftopic = Warn Quote
Matt Posted July 27, 2013 Report Posted July 27, 2013 (edited) In cadrul acestui proiect la care voi lua si eu parte pot oferi cateva licente de Microsoft Visual studio 2012 respectiv 2010.Intai de toate trebuie sa va descarcati urmatoarea aplicatie : Secure Download ManagerDaca nu stiti ce este dati o cautare pe google.Acum licentele puse la dispozitie sunt pentru urmatoarele versiuni :Microsoft Visual Studio 2010 - Versiunea PRO / Premium / Ultimate : Data lui Rubaka .Microsoft Visual Studio 2012 - Versiunea PRO / Premium / : Data lui seboo00111 si xx - Aici sunt licente diferite pentru ambele variante. // PRO a fost data.Cerinte pentru a primi aceste licente : Nu prea as gasi vreuna.Eventual ma voi uita prin posturile celui care le cere si la vechimea lui.Doar atat va zic : nu va bateti joc de ele.Pentru cei ce nu prind licentele aveti mai jos cateva link-uri de unde puteti face rost de soft : Visual Studio Express 2012 : De aici puteti descarca aceasta versiune care este free. Visual Studio 2010 Professional : De aici puteti descarca aceasta versiune care este sub forma de torrent. Microsoft Visual Studio 2012 : Sub forma de torrent dar dupa un tracker romanesc. Visual Studio 2008 Express Editions : Sub forma de torrent dupa un tracker romanesc.Si acum mica recapitulare : Sunt 3 licente, care le doriti imi scrieti un mesaj privat si eu va dau ce sa descarcati apoi si licenta.Intai de toate instalati-va SDM ( Secure download Manager ) Edited August 5, 2013 by Matt 1 Quote
Matt Posted July 29, 2013 Report Posted July 29, 2013 (edited) Se pare ca tot eu incep cu intrebarile. Bun am urmatoarele nedumeriri.Am deschis visual studio iar dupa ce am citit inceputul cartii am scris codul de acolo cu Hello World in C++ .#include <stdio.h>main(){printf("hello, world\n");}Problema este ca nu stiu ce trebuie facut mai departe.Apoi am deschis C# am adaugat un "Button" in Form1 - click dreapta pe el - redenumit in " Hello RST " . Dupa aceea am intrat in "Code" si am adaugat urmatorul cod : MessageBox.Show ("Hello M2G"); . Acum cand dau RUN si apast pe Hello RST se deschide un pop-up unde scrie Hello M2G. Asta cu C# seamana cat de cat cu Visual Basic cu care am mai cochetat foarte putin acum ceva ani.Problema mea este la C++ . Scriu codul insa nu este si partea grafica ? Sau cum ? Edited August 8, 2013 by Matt Quote
nedo Posted July 29, 2013 Report Posted July 29, 2013 parte grafica vine mai tarziu, ceea ce se face la inceput se face doar in consola.Daca folositi visual studio, dupa ce creati proiectul si scrieti codul, aveti in meniul de sus, optiunea build, iar pentru a rula programul aveto la meniul debug ori start debuging, ori start without debuging. Este de preferat sa folositi a doua optune, decat in cazul in care doriti sa faceti debuging pe aplicatia nou scrisa.Momentan nu o sa prea aveti treaba cu debuging. Quote
M2G Posted July 29, 2013 Author Report Posted July 29, 2013 Faci un empty C++ console application. Nu ne batem capul cu interfete grafice aici. Deocamdata se invata chestiile de baza. Din visual studio dai new project -> C++ -> empty project. Dupa dai click dreapta pe folderul source file din proiect -> Add -> new Item. Alegi cpp file, ii dai un nume si ok.Dupa, pui codul.#include <stdio.h>int main(){ printf("hello, world\n"); getchar(); return 0;}Ca sa rulezi dai un ctrl+f5 sau un f5. Alternative (meniul debug -> start debuging sau meniul debug -> start without debuging).Aplicatiile tip consola deschid un cmd in care se ruleaza codul, aceea reprezinta "interfata".Cateva modificari la codul tau.Functia main trebuie sa fie de tip int.Daca o funtie e de tip int, inseamna ca trebuie neaparat sa returneze o valoare intreaga. De asta am pus la sfarsit "return 0;". De ce 0? Pentru ca 0 inseamna ca programul s-a executat cu succes si ca se inchide.O sa fie cazuri in care vrei sa tratezi o eroare si in momentul in care programul ajunge la eroare sa pui un return 1; Astfel stii ca a fost executata o instructiune care produce o eroare si astfel programul s-a inchis cu un cod de eroare si nu a ajuns pana la return 0;Astea se invata pe la capitolul functii, deocamdata e in regula sa nu aveti treaba cu funtii si valori de return.Inca o chestie, fereastra unei aplicatii consola se inchide automat daca nu mai sunt instructiuni de executat si se ajunge la finalul programului. Se va inchide inainte ca tu sa vezi rezultatul programului.Din cauza asta am pus un getchar(); care nu face altceva decat sa astepte citirea unui caracter de la tastatura. Am pus asta inainte de return 0; , adica inainte ca programul sa isi termine executia.Acum programul va rula si la sfarsit va astepta sa introduci un caracter inainte sa se inchida consola. Astfel poti sa vezi outputul programului. Poti sa apesi apoi un enter si aplicatia se va inchide.Exemplu: Nota: Folositi tagul [ Cpp] [ /Cpp] (fara spatii) pentru a posta cod. Quote
Matt Posted July 29, 2013 Report Posted July 29, 2013 Am inteles. Pai toata buba era ca lipsea getchar(); programul se executa dar disparea imediat.Acum am priceput.O sa trec mai departe. Quote
StoNe- Posted July 29, 2013 Report Posted July 29, 2013 (edited) Ce semnifica "EOF"?Am cautat si am inteles ca este un macro de tip integer, de obicei -1, am vazut si eu asta prin printf("%d",EOF);, insa daca se citeste alta valoare integer prin getchar(); se afiseaza cu totul altceva.// Ah, da.Este vreo diferenta intre int main() si main() ?@bubu2005: Da, eu CodeBlocks folosesc si merge perfect. Edited July 29, 2013 by StoNe- Quote
passfig Posted July 29, 2013 Report Posted July 29, 2013 Este vreo diferenta intre int main() si main() Depinde, in general este normal sa aibe int pentru ca toate subprogramele sau functiile trebuie sa aibe un tip, sa fie practic declarate. Totusi in unele IDE-uri merge si fara int. Oricum in general ai <tip> "nume functie" : int divizori(); float multipli(), iar main() nu face exceptie, deci in mod normal ar trebui sa scri int main(). Quote
Byte-ul Posted July 29, 2013 Report Posted July 29, 2013 Ce semnifica "EOF"?Am cautat si am inteles ca este un macro de tip integer, de obicei -1, am vazut si eu asta prin printf("%d",EOF);, insa daca se citeste alta valoare integer prin getchar(); se afiseaza cu totul altceva.EOF = End of filepoti citi EOF cu getchar sau alte functii daca pui Ctrl+Z Quote
M2G Posted July 29, 2013 Author Report Posted July 29, 2013 Despre EOF scrie la pagina 18.Este definit in stdio.h ca #define EOF (-1)deci -1.#define este un macro si se va discuta in capitolele viitoare.getchar returneaza intotdeauna valoarea ASCII a ultimului caracter introdus. http://www.asciitable.com/Dupa cum vedeti, valorile sunt de la 0 la 127. Acum poate va e mai clar din ce cauza EOF este definit ca si -1. (pentru ca nu poate sa fie confundat cu un caracter).Cand nu mai este nimic de citit, getchar va returna EOF (end of file), adica -1.Exemplu: Daca citesti 5 prin getchar se va afisa valoarea lui ascii, adica 53.Daca vrei sa afisezi reprezentarea ascii al numarului, in loc de int f = getchar();printf("%d",f);poti sa pui:int f = getchar();printf("%c",f);%c inseamna ca iti afiseaza un caracter si nu o valoare numerica.c - characterd - decimalhttp://www.cplusplus.com/reference/cstdio/printf/int main() este codul valid conform standardului.daca scrii doar main() asta inseamna ca valoarea de return este void si este un cod invalid. (Este ok pe unele sisteme embeded care nu au un sistem de operare. Pentru un sistem care detine un OS este bine sa puneti int main pentru ca sistemul va stii ca main s-a terminat si progamul a terminat de rulat.)Mai multe despre ce inseamna void aici: https://en.wikipedia.org/wiki/Void_type Quote
lutulik Posted July 30, 2013 Report Posted July 30, 2013 Nu prea am inteles cum lucreaza printf.De ce se pun acele % ?printf("%d\t%d\n", fahr, celsius);printf("%3.0f %6.1f\n", fahr, celsius);Nu pot sa afisez mai multe variabile simplu fara toate acele argumente?printf ( fahr, celsius, grade); Quote
Nytro Posted July 30, 2013 Report Posted July 30, 2013 Functia printf trebuie sa stie cate variabile vrei sa afisezi. Tu ii indici practic asta, ca si tipul datelor pe care vrei sa le afisezi, prin acel "%".Exemplu:#include <stdio.h>int main(){ int n = 5; float f = 1.2; char sir[] = "test"; printf("Vom afisa un numar intreg: %d, un numar cu virgula: %f si un sir de caractere: %s", n, f, sir); return 0;}Dupa cum vezi, ai 3 variabile si ai de 3 ori acel "%":- %n - va fi INLOCUIT cu valoarea variabilei n (cu prima variabila de dupa acest sir, deoarece e primul "%")- %f - va fi INLOCUIT cu valoarea celei de-a doua variabile, f- %s - fiind a III-a aparitie, va fi inlocuit cu a 3-a variabila, "sir"Rezultat:Vom afisa un numar intreg: 5, un numar cu virgula: [B]1.200000[/B] si un sir de caractere: testPutem afisa doar 2 zecimale folosind "%.2f" in loc de "%f":Vom afisa un numar intreg: 5, un numar cu virgula: [B]1.20[/B] si un sir de caractere: test Quote
malsploit Posted July 30, 2013 Report Posted July 30, 2013 // Daca doreste M2G, cel care progreseaza cel mai mult, adica cel mai bun "elev", va primi cartea "Totul despre C si C++" Quote
totti93 Posted July 30, 2013 Report Posted July 30, 2013 Functia `printf` asa cum zice numele, este un print cu format. Functia are parametri infinite, primul argument fiind un sir de caractere in care se plaseaza descriptorii de format, iar urmatorele parametri sunt variabilele ce trebuiesc afisate.int printf(const char *format, ...)Fiind un form de securitate, trebuie stiut ca afisarea incorecta poate fi vulnerabila. Multi fac greseala ca paseaza un sir de caractere la parametrul de format:printf(str); // str este un sir de caractere introdus de utilizatorCiteste aici, ca e stufos: http://www.cis.syr.edu/~wedu/Teaching/cis643/LectureNotes_New/Format_String.pdf Quote
Sweby Posted July 30, 2013 Report Posted July 30, 2013 Am observat ca pentru afisare folositi printf. M-am lovit si eu de multe ori de acest printf cand citeam tutoriale pe net, insa am ales sa raman la cout<< pentru ca asa m-am obisnuit de la scoala. Din cate am citit pe net, diferenta ar fi ca cout e mai sigur insa se misca putin mai greu ca printf. Voi ce folositi de obicei? De ce? De ce nu folositi cealalta metoda? Quote
Nytro Posted July 30, 2013 Report Posted July 30, 2013 Am observat ca pentru afisare folositi printf. M-am lovit si eu de multe ori de acest printf cand citeam tutoriale pe net, insa am ales sa raman la cout<< pentru ca asa m-am obisnuit de la scoala. Din cate am citit pe net, diferenta ar fi ca cout e mai sigur insa se misca putin mai greu ca printf. Voi ce folositi de obicei? De ce? De ce nu folositi cealalta metoda?cout e in C++printf e in CCartea curenta este pentru C. Parerea mea e sa nu intram in detalii legate de "cout", sa continuam cu C, apoi, dupa ce lumea progreseaza, putem trece la C++ si putem lamuri orice problema. Quote
DaNy. Posted July 30, 2013 Report Posted July 30, 2013 Ce program se foloseste la C ? Folosesc Codeblocks dar nu ma lasa sa fac nimic pe el decat cu C++. Quote
seboo00111 Posted July 30, 2013 Report Posted July 30, 2013 (edited) @DaNy.Poti folosi si Code:: Blocks si Qt ( Digia ) pentru C pe toate platformele;Cand faci proiectul in IDE selectezi C in loc de C++;Si acum problema mea:Copiez codul in IDE, build+ run , degeaba, nimic nu se intampla ( Am luat fiecare cod pana la cap 1.7)Le-am testat si pe CB si pe Qt.Edit:@nedoCodeblocks-u l-am instalat din software-manager-u al linux mint-ului.Am dat build + run , nimic;Am dat debug; urmatoarele erori: (in terminal)Codeblocks(warning: GDB: Failed to set controlling terminal: Operation not permitted)Am facut niste "research" si am vazut ca e o problema legata de Ubuntu dupa versiunea 10.10, si ca nu are fix, doar ceva temporar;Multumesc anyways, o sa reinstalez CBlocks si o sa vad daca rezolv ceva, daca nu, aia e Edited July 30, 2013 by seboo00111 Quote
nedo Posted July 30, 2013 Report Posted July 30, 2013 iti da vreo eroare la build? Vezi ca in partea de jos ai mai multe ferestre, pentru build, pentru debug. Iti afiseaza ceva pe acolo?Tind sa cred ca nu ai instalat bine code-blocks si nu gaseste compilatorul, sau cand l-ai pornit prima oara nu ai setat ce compilator sa fie default. Incearca sa descarci compilatorul postat de catre M2G, parca, aici sau pe celalalt topic deschis tot de el. Quote
Erase Posted July 31, 2013 Report Posted July 31, 2013 (edited) Functia main trebuie sa fie de tip int.Daca o funtie e de tip int, inseamna ca trebuie neaparat sa returneze o valoare intreaga. De asta am pus la sfarsit "return 0;". Corect, insa se poate folosi un tip care nu returneaza nici un rezultat.Nu vad la ce ar trebui sa declar un tip (in cazul nostru 'int') daca nu ma folosesc de el.void Main(void){ //Instructiuni} Edited July 31, 2013 by Erase Quote
M2G Posted July 31, 2013 Author Report Posted July 31, 2013 (edited) Corect, insa se poate folosi un tip care nu returneaza nici un rezultat.Nu vad la ce ar trebui sa declar un tip (in cazul nostru 'int') daca nu ma folosesc de el.void Main(void){ //Instructiuni}Pentru ca nu e standard. Standardul C spune ca functia main trebuie sa fie de tip int.Astfel la return 0, sistemul de operare stie ca programul s-a incheiat.Pentru un sistem embeded care nu are un sistem de operare este ok sa pui si void.Deci folositi int ca si valoare de return la functia main.Standardul aici: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdfcititi sectiunea 5.1.2.2.1 Program startupThe function called at program startup is named main. The implementation declares noprototype for this function. It shall be defined with a return type of int and with noparameters:int main(void) { /* ... */ }or with two parameters (referred to here as argc and argv, though any names may beused, as they are local to the function in which they are declared):int main(int argc, char *argv[]) { /* ... */ }or equivalent;9) or in some other implementation-defined manner.2 If they are declared, the parameters to the main function shall obey the followingconstraints:— The value of argc shall be nonnegative.— argv[argc] shall be a null pointer.— If the value of argc is greater than zero, the array members argv[0] throughargv[argc-1] inclusive shall contain pointers to strings, which are givenimplementation-defined values by the host environment prior to program startup. Theintent is to supply to the program information determined prior to program startupfrom elsewhere in the hosted environment. If the host environment is not capable ofsupplying strings with letters in both uppercase and lowercase, the implementationshall ensure that the strings are received in lowercase.— If the value of argc is greater than zero, the string pointed to by argv[0]represents the program name; argv[0][0] shall be the null character if theprogram name is not available from the host environment. If the value of argc isgreater than one, the strings pointed to by argv[1] through argv[argc-1]represent the program parameters.— The parameters argc and argv and the strings pointed to by the argv array shallbe modifiable by the program, and retain their last-stored values between programstartup and program termination.+ sectiunea 5.1.2.2.3 Program terminationIf the return type of the main function is a type compatible with int, a return from theinitial call to the main function is equivalent to calling the exit function with the valuereturned by the main function as its argument;10) reaching the } that terminates themain function returns a value of 0. If the return type is not compatible with int, thetermination status returned to the host environment is unspecified.Forward references: definition of terms (7.1.1), the exit function (7.20.4.3). Edited July 31, 2013 by M2G Quote
Erase Posted July 31, 2013 Report Posted July 31, 2013 (edited) Ok, stiam acest lucru insa.. daca vei avea ocazia sa citesti 'Jamsa's C/C++ Programming Bibble' in romana este exact cartea pe care vroia careva sa o ofere (Totul despre C si C++) vei avea surpriza sa vezi ca este folosita functia 'main' in felul in care am scris-o eu mai sus.In orice caz este indiferent cum vei folosi functia de incepere a programului pentru ca functioneaza in ambele cazuri si pe orice SO.Se foloseste 'int' doar daca functia main va fii cu parametrii, daca nu este indiferent.Adica ceva in genul:#include <stdio.h>int main(int argc, char argv[]){ //Whatever ... } Edited July 31, 2013 by Erase Quote
nedo Posted July 31, 2013 Report Posted July 31, 2013 Limbajul C permite utilizarea main ca si functie void, standardul C++ este cel care solicita ca functia main sa fie de tip int. Quote
Erase Posted July 31, 2013 Report Posted July 31, 2013 (edited) Ceea ce a postat m2g este corect, acela este standardul C11(cel actual).Dupa cum vad autorii cartii 'Totul despre C si C++' explica limbajul C dupa standardul 90. Edited July 31, 2013 by Erase Quote