Jump to content
M2G

RSTA 1/1 Intebari - Raspunsuri

Recommended Posts

Posted (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 Manager

Daca 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 :

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 by Matt
  • Upvote 1
Posted (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 by Matt
Posted

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.

Posted

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:

Snapshot_2013_07_29_200411.png

Nota: Folositi tagul [ Cpp] [ /Cpp] (fara spatii) pentru a posta cod.

Posted (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 by StoNe-
Posted
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().

Posted
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 file

poti citi EOF cu getchar sau alte functii daca pui Ctrl+Z

Posted

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

d - decimal

http://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

Posted

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

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: test

Putem 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

Posted

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 utilizator

Citeste aici, ca e stufos: http://www.cis.syr.edu/~wedu/Teaching/cis643/LectureNotes_New/Format_String.pdf

Posted

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?

Posted
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 C

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

Posted (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:

@nedo

Codeblocks-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 by seboo00111
Posted

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.

Posted (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 by Erase
Posted (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.pdf

cititi sectiunea 5.1.2.2.1 Program startup

The function called at program startup is named main. The implementation declares no

prototype for this function. It shall be defined with a return type of int and with no

parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be

used, 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 following

constraints:

— 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] through

argv[argc-1] inclusive shall contain pointers to strings, which are given

implementation-defined values by the host environment prior to program startup. The

intent is to supply to the program information determined prior to program startup

from elsewhere in the hosted environment. If the host environment is not capable of

supplying strings with letters in both uppercase and lowercase, the implementation

shall 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 the

program name is not available from the host environment. If the value of argc is

greater 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 shall

be modifiable by the program, and retain their last-stored values between program

startup and program termination.

+ sectiunea 5.1.2.2.3 Program termination

If the return type of the main function is a type compatible with int, a return from the

initial call to the main function is equivalent to calling the exit function with the value

returned by the main function as its argument;10) reaching the } that terminates the

main function returns a value of 0. If the return type is not compatible with int, the

termination status returned to the host environment is unspecified.

Forward references: definition of terms (7.1.1), the exit function (7.20.4.3).

Edited by M2G
Posted (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 by Erase
Posted (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 by Erase

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...