Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - 85

#91
Programación C/C++ / Re: Problemas con ELSE
1 Abril 2013, 13:55 PM
Si un bucle que permita realizar más compras.

El array 'nom' era muy peque, sólo 10 podés usar uno más grande XD

Código (cpp) [Seleccionar]

int main()
{
       char nom[128];
float Compra, Desc, Total;
       int a, opc;
for(a=0;; a++)
       {
   if(a>0){
printf("\n\tDesea Realizar una nueva compra?\n");
fflush(stdin);
               scanf("%d",&opc);
if(opc==0) break;
           }

           // Declaración para introducir el nombre del cliente
   printf("Ingrese el nombre del cliente: \n",nom);
fflush(stdin);
   scanf("%9s", nom);
   printf("El nombre del cliente es %s \n", nom );

   // Declaración para introducir total de la compra
   printf ("Ingrese el total de su compra: \n", Compra);
fflush(stdin);
   scanf ("%f", &Compra);

   // Operaciones para aplicar descuento
   if(Compra >= 8000)
           {
Total = Compra-(Compra*0.12);
printf("El total a  pagar es de: %6.2f \n", Total);
   }
           else if(Compra == 7999 && Compra >=5500)
           {
Total = Compra-(Compra*.10);
printf("El total a pagar es de: %5.2f \n", Total);
           }
           else if(Compra ==5499 && Compra >=3100)
           {
Total = Compra-(Compra*.07);
printf("El total a pagar es de:%6.2f \n", Total);
           }
           else if(Compra == 3099 && Compra >=1500)
           {
Total = Compra-(Compra*.05);
printf("El total a pagar es de: %6.2f \n", Total);
           }

   if (Compra !=1500)
   {
if (Compra < 1500)
   printf("Su compra no aplica descuento \n");


printf("El total a pagar es de: %5.2f \n",Compra);
   }
       }

return 0;
}


cuando pongas las etiquetas de código, tenés que poner code=cpp
hasta luego

#93
Programación C/C++ / Re: Problemas con ELSE
31 Marzo 2013, 18:52 PM
faltaban cosas, el tipo int en la función MAIN y el return 0.
y las etiquetas de c++ XD. Y las globales hacelas locales preferentemente.
y el bucle
y usar else-if


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
char nom[10];
float Compra, Desc, Total;

/*Declaración para introducir el nombre del cliente */
printf("Ingrese el nombre del cliente: \n",nom);
scanf("%9s", nom);
printf("El nombre del cliente es %s \n", nom );

/*Declaración para introducir total de la compra */
printf ("Ingrese el total de su compra: \n", Compra);
scanf ("%6.2f", &Compra);

/* Operaciones para aplicar descuento */
if(Compra >= 8000){

Total = Compra-(Compra*0.12);
printf("El total a  pagar es de: %6.2f \n", Total);
}
       else if(Compra == 7999 && Compra >=5500)
       {
Total = Compra-(Compra*.10);
printf("El total a pagar es de: %5.2f \n", Total);
       }
       else if(Compra ==5499 && Compra >=3100)
       {
Total = Compra-(Compra*.07);
printf("El total a pagar es de:%6.2f \n", Total);
       }
       else if(Compra == 3099 && Compra >=1500)
       {
Total = Compra-(Compra*.05);
printf("El total a pagar es de: %6.2f \n", Total);
       }

if (Compra !=1500)
{
if (Compra < 1500)
   printf("Su compra no aplica descuento \n");

printf("El total a pagar es de: %5.2f \n",Compra);
}

return 0;
}
#94
Él ingresa en este orden:


push('H');//1
push('o');//2
push('l');//3
push('a');//4


por lo que en una pila uno espera que estos elementos salgan así:

Citar-> 4, 3, 2, 1


Entonces al llamar a printf que recibe los parámetros a la inversa (derecha a izquierda), entonces quedaría así:

Citar
                                   //1(h)   2(o)   3(l)    4(a)
printf("%c%c%c%c\n",pop(),pop(),pop(),pop());//right to left (1,2,3,4 <-)

El primer parámetro recibido sería el marcado cómo 4, luego el 3 y así.

En visual C++ 6 y 2010 imprime "Hola".
más datos, WINXP SP3 32BITS XD.
Sería raro un compilador que no respetara esto ya que es parte de la convención de llamada de C.


#95
Operadores de PRE-Incremento y POST-Incremento.

La diferencia es que en el PRE-Incremento primero se incrementa y luego se opera, son dos pasos.

En el POST-Incremento primero se opera y luego se incrementa.

Es según la comodidad o tus necesidades, para con el objeto en cuestión, que puede ser una variable, un puntero, y básicamente esos.
#96
Programación C/C++ / Mensaje scroll
31 Marzo 2013, 14:03 PM
Hola, estaba probando un código para mensaje scroll, me pareció buena la idea de postearlo. Ya lo había usado mucho antes pero no para un programa de consola.

El programa va a mostrar todas las cadenas que hay en un array de cadenas o matríz de caracteres, son 13 cadenas en total, pero originalmente lo usaba con 4.
La modificación que le hice fue la necesidad de crear un hilo aparte para mostrar las cadenas en scroll, y suspender el hilo principal.

El hilo principal nunca se resume y para salir del programa se sale con ExitProcess desde el hilo secundario.

El intervalo de tiempo entre las cadenas se hace con 'Sleep'.

Como ustedes ya saben, cuando se crea un hilo con CreateThread se le debe pasar un argumento que es la rutina con la cual empieza a ejecutarse el hilo. Esta rutina lleva un parámetro, que lo recibe al crearse el hilo porque dicho parámetro se pasa a CreateThread como argumento.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

El tamaño del vector de cadenas se puede sacar con sizeof, pero en este caso se hace restando las direcciones de memoria del último elemento menos el primero.

Para iniciar el 'scrolling' se presiona 1,  y para salir del programa se presiona 2.

Aclarado todo eso, muestro el código
Código (cpp) [Seleccionar]


//
// By 85
// Credits: LTFX
// elhacker.net
// etalking.com.ar
// boyscout_arg@hotmail.com
// 2013
//

////////////////////////////////////////////////////////////////////////////////////////////////

#include<windows.h>
#include<stdio.h>
#include<stdlib.h>

////////////////////////////////////////////////////////////////////////////////////////////////

#define MAX_MESSAGES 13
#define STRINGSIZE 0x40
#define INTERVAL 500
bool activar=false;
char* resetMessage = "setinfo \"xxxxx\" \"\"";
char* blankMessage = "setinfo \"xxxxx\" \"%s\"";
//allow up to 13 messages
char gHudMessage5[MAX_MESSAGES][256] = { "","","","","","","","","","","","","" };
// a "hack" way to scroll list without copying strings
int indexRedirect[MAX_MESSAGES] = { 0,1,2,3,4,5,6,7,8,9,10,11,12 };

HANDLE hThread;

////////////////////////////////////////////////////////////////////////////////////////////////

void gSetHudMessage5(const char* message)
{
int dest = indexRedirect[0];
indexRedirect[0] = indexRedirect[1];
indexRedirect[1] = indexRedirect[2];
indexRedirect[2] = indexRedirect[3];
indexRedirect[3] = indexRedirect[4];
indexRedirect[4] = indexRedirect[5];
indexRedirect[5] = indexRedirect[6];
indexRedirect[6] = indexRedirect[7];
indexRedirect[7] = indexRedirect[8];
indexRedirect[8] = indexRedirect[9];
indexRedirect[9] = indexRedirect[10];
indexRedirect[10] = indexRedirect[11];
indexRedirect[11] = indexRedirect[12];
indexRedirect[12] = dest;
strcpy(gHudMessage5[dest],message);
}

////////////////////////////////////////////////////////////////////////////////////////////////

void Thread(const char* value){

DWORD* ptrValue = (DWORD*)value;
DWORD OFFS = 0x0;//0x00000000;
DWORD BLOCK = ((ptrValue+(STRINGSIZE*(MAX_MESSAGES-1)))-ptrValue);
//sizeof(messagelist);

while(1){
system("cls");
SYSTEMTIME SysTime;
GetLocalTime(&SysTime);
char* formatstring   =   (SysTime.wMinute<10) ?  "%d:0%d\n" :  "%d:%d\n";
printf(formatstring, SysTime.wHour, SysTime.wMinute);
printf("Presione 1 para activar/desactivar el scroll! (Salir=2)\n");

if(GetAsyncKeyState(0x31)>0) {

activar=!activar;
}

if(activar)
{
char* val = (char*)(ptrValue+(OFFS/sizeof(DWORD)));
if(val && val[0]!=0)
{
char message[STRINGSIZE];
message[0] = 0;// Antes de usar strcat!
strcat( message , "Elhacker.net" );
strcat( message , ": " );
strcat( message , val );
strcat( message , "\n" );
gSetHudMessage5(message);

printf("\nHooK MSN v 1.0\n");
for(int i=0; i<MAX_MESSAGES; i++){
printf(gHudMessage5[indexRedirect[i]]);
}

if(OFFS==BLOCK)
{
OFFS=0x0;//0x00000000;
}
else
{
OFFS+=STRINGSIZE;//0x00000040;
}
}
}

if(GetAsyncKeyState(0x32)>0){

ExitProcess(0);
//ResumeThread(hThread);// Can't from this thread
//break;
}

Sleep(INTERVAL);
}
}

////////////////////////////////////////////////////////////////////////////////////////////////

int main(){

char messagelist[MAX_MESSAGES][STRINGSIZE];
strcpy(messagelist[0],"Hola");
strcpy(messagelist[1],"Mi");
strcpy(messagelist[2],"Nombre");
strcpy(messagelist[3],"Es");
strcpy(messagelist[4],"David");
strcpy(messagelist[5],"Y");
strcpy(messagelist[6],"Esto");
strcpy(messagelist[7],"Es");
strcpy(messagelist[8],"Un");
strcpy(messagelist[9],"Mensaje");
strcpy(messagelist[10],"Scroll");
strcpy(messagelist[11],"XD");
strcpy(messagelist[12],"XD");
char* value = (char*)&messagelist;

// Determinar el tamaño del bloque restando final con inicio
// DWORD add1 = (DWORD)&messagelist[0];
// DWORD add2 = (DWORD)&messagelist[12];
// DWORD diff = (DWORD)(add2-add1);
// printf("%X\n",diff);
// system("pause");

DWORD tID;
//tID = GetCurrentThreadId();
CreateThread(0,1<<24,(unsigned long (__stdcall *)(void *))Thread,value,0,&tID);
//printf("tID: %d\n",tID);

//hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, GetCurrentThreadId());
//Returns a "pseudo handle" that can only be used from the calling thread.
hThread = GetCurrentThread();
SuspendThread(hThread);
//ResumeThread(hThread);

system("pause");
return (0);
}





Esta era su aplicación original


PROJECT:
http://www.mediafire.com/?q6dq36cdd9hxvxb
#97
no tenés una versión en español de ese compilador ? o sino un compilador de C++ en español, así entendés los resultados (LOG) que te muestra el compilador.

ahí decía
error: `Cout' undeclared (first use this function)

"'Cout' no declarado.."
#98
http://en.wikipedia.org/wiki/X86_calling_conventions

Citar
cdecl
The cdecl (which stands for C declaration) is a calling convention that originates from the C programming language and is used by many C compilers for the x86 architecture.[1] In cdecl, subroutine arguments are passed on the stack. Integer values and memory addresses are returned in the EAX register, floating point values—in the ST0 x87 register. Registers EAX, ECX, and EDX are caller-saved, and the rest are callee-saved.
In context of the C programming language, function arguments are pushed on the stack in the reverse order.

y por supuesto printf es cdecl

http://msdn.microsoft.com/es-AR/library/984x0h58(v=vs.80).aspx
http://www.agner.org/optimize/calling_conventions.pdf

y más información para otra arquitectura
http://msdn.microsoft.com/en-us/library/ms235286(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/7kcdt6fy(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/9b372w95(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/zthk2dkh(v=vs.80).aspx
#99
si otra forma de hacerlo , al procesar cada unidad por separado XD
#100
Programación C/C++ / Descomponer en unidades
30 Marzo 2013, 12:31 PM
Hola,
hice un programita para que muestre un número que se descompone en unidades. Tiene diferentes formas de mostrarlo, inclusive en orden ascendente o descendente.
Si quieren mostrar sus formas de hacerlo, muy bien,  >:D
Código (cpp) [Seleccionar]


//
// By 85
// elhacker.net
// etalking.com.ar
// boyscout_etk@hotmail.com
// 2013

////////////////////////////////////////////////////////////////////////////////////////////////

#pragma warning(disable: 4244)
#pragma comment(lib, "winmm.lib")
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

////////////////////////////////////////////////////////////////////////////////////////////////

#define ASC 0
#define DESC 1
#define ORDER ASC

double ServerTime;
#define VERSION "0.1"

////////////////////////////////////////////////////////////////////////////////////////////////

__forceinline Cifras(int iNm){

int cifras = 0;
for(int copia = abs(iNm), exnum=1;;){

if(exnum <= copia)
{
exnum = exnum*10;
cifras++;
}
else
{
break;
}
}
return cifras;
}

////////////////////////////////////////////////////////////////////////////////////////////////

void ListarUnidades(int iNm, int iModo){

int cifras = Cifras(iNm);
//printf("cifras %d\n", cifras);
//system("pause");

if(iModo!=0) //ASC
{
for(int i=(cifras-1), X=1; i>=0; i--){

printf("%d\n", ((iNm)/X)%10);
X=(X*10);
}
}
else //DESC
{
for(int j=0, Y= (int)pow(10,(cifras-1)); j<cifras; j++){

printf("%d\n", ((iNm)/Y)%10);
Y=(Y/10);
}
}
putchar("\n"[0]);
}

////////////////////////////////////////////////////////////////////////////////////////////////

void ListarRebajados(int iNm, int iModo){

int cifras = Cifras(iNm);
//printf("cifras %d\n", cifras);
//system("pause");

if(iModo!=0) //ASC
{
for(int i=(cifras-1), X=1; i>=0; i--){

printf("%d\n", ((iNm)/X));
X=(X*10);
}
}
else //DESC
{
for(int j=0, Y= (int)pow(10,(cifras-1)); j<cifras; j++){

printf("%d\n", ((iNm)/Y));
Y=(Y/10);
}
}
putchar("\n"[0]);
}

////////////////////////////////////////////////////////////////////////////////////////////////

void sayver(){

char saystr[256];
char key[5];
key[0]=(((int)ServerTime)%10)+0x81;
key[1]=((((int)ServerTime)/10)%10)+0x82;
key[2]=((((int)ServerTime)/100)%10)+0x83;
key[3]=((((int)ServerTime)/1000)%10)+0x84;
key[4]=0;
strcpy(saystr,"say \"");
strcat(saystr,VERSION);
strcat(saystr,key);
strcat(saystr," - Coded By : cs_007 + boy_scout ");
strcat(saystr,"\"\n\n\n");
printf(saystr);
}

////////////////////////////////////////////////////////////////////////////////////////////////

void DescomponerEnUnidades(int num){//2012

int copia= abs(num), m = 1, cifras = 1;
for(;copia>=10;copia/=10) cifras++;
for(int x=0;x<(cifras-1);x++) m*=10;
float v1=num;// Permite guardar decimales para cuando se divida
int v2=0, v3=num;
for(int i=0; i<cifras; i++){

printf("%f\n",v1);
v1/=m;// Esto puede resultar en un número con decimales
//printf("%f\n",v1);// Para ver el proceso XD
v2=((int)v1*m);// Se opera tomando en cuenta sólo la parte entera
v3-=v2;// Al número original le resta una parte del mismo
m/=10;// Se rebaja el multiplicador
v1=v3;// Se obtiene el número de la unidad
}
putchar("\n"[0]);
}

////////////////////////////////////////////////////////////////////////////////////////////////

int main(){

ServerTime = (timeGetTime()/1000);
printf("ServerTime: %f\n\n",ServerTime);
sayver();

ServerTime = -12345;
// ServerTime = -0;
// ServerTime = 0;
// ServerTime = -1;
// ServerTime = 12345;
// ServerTime = 100000;
// ServerTime = -100000;

ListarUnidades(ServerTime,ORDER);
ListarRebajados(ServerTime,ORDER);

DescomponerEnUnidades(ServerTime);

system("pause");
return (0);
}

////////////////////////////////////////////////////////////////////////////////////////////////





PROYECTO
http://www.mediafire.com/?oe3eg88zhyi5lc2