Este programa muito simples pretende demonstrar como é possível fazer uma utilização da memória do computador de forma estática ou dinâmica.
Seguem-se quatro exemplos de versões de um programa que apenas lê dois números inteiros e calcula sua soma.
No primeiro exemplo, as variáveis a e b são criadas de forma estática(stack), e nos três exemplos seguintes a sua gestão é feita de forma dinâmica (heap).
Exemplo 1
#include <iostream>
using namespace std;
int main(){
int a, b;
cout << "a = ";
cin >> a;
cout << "b = ";
cin >> b;
cout << "a + b = " << a + b << endl;
}
Gestão estática da memória.
Exemplo 2
#include <iostream>
using namespace std;
int main(){
int *a, *b;
a = new int;
b = new int;
cout << "a = ";
cin >> *a;
cout << "b = ";
cin >> *b;
cout << "a + b = " << *a + *b << endl;
}
Gestão dinâmica da memória.
Exemplo 3
#include <iostream>
using namespace std;
int main(){
int *a = new int;
int *b = new int;
cout << "a = ";
cin >> *a;
cout << "b = ";
cin >> *b;
cout << "a + b = " << *a + *b << endl;
}
A declaração do apontador e a alocação da memória podem ser feitas na mesma linha.
Exemplo 4
#include <iostream>
using namespace std;
int main(){
int *a = new int;
int *b = new int;
cout << "a = ";
cin >> *a;
cout << "b = ";
cin >> *b;
cout << "a + b = " << *a + *b << endl;
delete a;
delete b;
}
É boa prática libertar a memória que já não é utilizada, embora isto acabe por acontecer quanto o programa termina.
Exemplo 5
#include <iostream>
using namespace std;
int main(){
int *a = new int(2);
int *b = new int(3);
//cout << "a = ";
//cin >> *a;
//cout << "b = ";
//cin >> *b;
cout << "a + b = " << *a + *b << endl;
delete a;
delete b;
Programa em Pascal que soma dois numeros inteiros!
RESOLVENDO:
· Algoritmo
algoritmo
n1, n2, soma: inteiro
inicio
Escreva("Digite o primeiro número: ");
leia(n1);
Escreva("Digite o segundo número: ");
leia(n2);
soma <- n1+n2;
Escreva("A soma dos números é: ",soma);
Fimalgoritmo
· Pascal
{Programa soma dois numeros inteiros}
{Programa escrito por Carlos Eduardo Martins Santos}
{acesse: www.tecnosolution.blogspot.com}
program somar;
var n1, n2, soma :integer;
begin
writeln('Digite o primeiro numero.');
readln(n1);
writeln('Digite o segundo numero');
readln(n2);
soma := n1+n2;
writeln(‘A soma dos numeros e:’,soma);
readln;
end.
· Explicação
program somar; {Declaração do nome do programa}
var n1, n2, soma :integer; {Declaração de variáveis todas são do tipo inteiro}
Begin {Inicio do programa}
writeln('Digite o primeiro numero.'); {E pedido que o usuário entre com o primeiro numero}
readln(n1); {Ler a primeira instrução que foi dada ao programa}
writeln('Digite o segundo numero'); {E pedido que o usuário entre com o segundo numero}
readln(n2); {Ler a segunda instrução que foi dada ao programa}
soma := n1+n2; {E feita a soma dos dois resultados}
writeln(‘A soma dos numeros e:’,soma); {Mostra o resultado entre a soma dos dois numeros}
readln; {Ler a instrução do resultado que foi dada ao programa}
end.{Fim do programa}
Assembly
TITLE Numero
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 'Digite:','$'
MSG2 DB ' Digite:','$'
MSG3 DB ' A soma e:','$'
NUMERO1 Dw ?
Dw ?
NUMERO2 Dw ?
Dw ?
.CODE
MOV AX,@DATA
MOV DS,AX
;numero 1
LEA DX,MSG1
MOV AH,9
INT 21H
XOR BX,BX
XOR SI,SI
MOV CX,1
M1: MOV AH,1
INT 21H
MOV NUMERO1,Ax
MOV AH,2
MOV DL,''
INT 21H
ADD SI,2
DEC CX
JNZ M1
MOV CX,1
ADD BX,1
MOV AX,1
CMP BX,AX
;numero 2
LEA DX,MSG2
MOV AH,9
INT 21H
XOR BX,BX
XOR SI,SI
MOV CX,1
M2: MOV AH,1
INT 21H
MOV NUMERO2,Ax
MOV AH,2
MOV DL,''
INT 21H
ADD SI,2
DEC CX
JNZ M2
MOV CX,1
ADD BX,1
MOV AX,1
CMP BX,AX
;somando
LEA DX,MSG3
MOV AH,9
INT 21H
XOR BX,BX
XOR SI,SI
MOV CX,1
SOMA: XOR DX,DX
XOR AX,AX
MOV DX,NUMERO1
MOV AX,NUMERO2
ADD AX,DX
SUB AX,30H
MOV DX,AX
MOV AH,2
INT 21H
MOV DL,''
INT 21H
ADD SI,2
DEC CX
JNZ SOMA
MOV CX,1
ADD BX,1
MOV AX,1
CMP BX,AX
MOV AH,4CH
INT 21H
end