Dev - C++ - programacion c++

 
Vista:

programacion c++

Publicado por thv (1 intervención) el 12/04/2023 04:45:30
programa que solicite como datos de entrada cuatro numeros y devuelva como resultado la diferencia del producto de los dos primeros y la suma de los ultimos c++
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.440
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

programacion c++

Publicado por dario (718 intervenciones) el 12/04/2023 05:11:55
Coloca un ejemplo de lo que quieres.
Salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.440
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

programacion c++

Publicado por dario (718 intervenciones) el 12/04/2023 06:14:49
Espero esto te sirva
Salu2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main() {
    int a,b,c,d;
    int resultado;
 
    cout << "Primer numero: "; cin >> a;
    cout << "Segundo numero: "; cin >> b;
    cout << "Tercer numero: "; cin >> c;
    cout << "Cuarto numero: "; cin >> d;
 
    resultado = a * b - c + d;
    cout << "\nEl resultado es: " << resultado << endl;
 
  return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programacion c++

Publicado por ferchiu (1 intervención) el 18/05/2023 20:55:28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
//Compresor y Descompresor de Archivos utilizando el algoritmo de Huffman
 
#include <stdio.h>
#include <stdlib.h>
#include "iostream"
#include "string"
 
using namespace std;
 
typedef struct _nodo
{
    unsigned char letra;
    int frecuencia;
    struct _nodo* sig;
    struct _nodo* cero;
    struct _nodo* uno;
} tipoNodo;
 
typedef struct _tabla
{
    unsigned char letra;
    unsigned long int bits;
    unsigned char nbits;
    struct _tabla* sig;
} tipoTabla;
 
typedef struct _nodo_D
{
    char letra;
    unsigned long int bits;
    char nbits;
    _nodo_D* cero;
    _nodo_D* uno;
} tipoNodo_D;
 
tipoTabla* Tabla;
 
void Cuenta(tipoNodo** Lista, unsigned char c);
void Ordenar(tipoNodo** Lista);
void InsertarOrden(tipoNodo** Cabeza, tipoNodo* e);
void BorrarArbol(tipoNodo* n);
void CrearTabla(tipoNodo* n, int l, int v);
void InsertarTabla(unsigned char c, int l, int v);
 
void BorrarArbol_D(tipoNodo_D* n);
tipoTabla* BuscaCaracter(tipoTabla* Tabla, unsigned char c);
 
// Funcion principal para descomprimir archivos
int Descomprimir(int argc, char* argv[]) // Descomprimir
{
    tipoNodo_D* Arbol;        // Arbol de codificación
    long int Longitud;      // Longitud del archivo
    int nElementos;         // Elementos de árbol
    unsigned long int bits; //  bits que se van a usar en la decodificación
    FILE* fe, * fs;          // archivos (ficheros) de entrada y salida
 
    tipoNodo_D* p, * q;// arboles
    unsigned char a;
    int i, j; // enteros que sirven como ramas
 
    if (argc < 4)
    {
        printf("Usar:\n%s <fichero_entrada> <fichero_salida>\n", argv[0]);
        return 1;
    }
 
    // se crea un arbol con la información de la tabla
    Arbol = (tipoNodo_D*)malloc(sizeof(tipoNodo_D));
    Arbol->letra = 0;
    Arbol->uno = Arbol->cero = NULL;
    fopen_s(&fe, argv[2], "rb");//se abre el archivo
    fread(&Longitud, sizeof(long int), 1, fe); // se lee el número de caracteres
    fread(&nElementos, sizeof(int), 1, fe); // se lee el número de elementos
 
    for (i = 0; i < nElementos; i++)
    {
        p = (tipoNodo_D*)malloc(sizeof(tipoNodo_D));
        fread(&p->letra, sizeof(char), 1, fe);
        fread(&p->bits, sizeof(unsigned long int), 1, fe);
        fread(&p->nbits, sizeof(char), 1, fe);
        p->cero = p->uno = NULL;
 
        j = 1 << (p->nbits - 1);
        q = Arbol;
 
        while (j > 1)
        {
            if (p->bits & j)
                if (q->uno) {
                    q = q->uno;
                }
 
                else
                {
                    q->uno = (tipoNodo_D*)malloc(sizeof(tipoNodo_D));
                    q = q->uno;
                    q->letra = 0;
                    q->uno = q->cero = NULL;
                }
 
            else //si hay 0 nodos
                if (q->cero) {
                    q = q->cero; //si existe se mueve a este
                }
                else //sino se crea
                {
                    q->cero = (tipoNodo_D*)malloc(sizeof(tipoNodo_D));
                    q = q->cero;
                    q->letra = 0;
                    q->uno = q->cero = NULL;
                }
            j >>= 1;  //se mueve al siguiente bit
        }
 
        if (p->bits & 1)
            q->uno = p;
        else
            q->cero = p;//al final se evalúa si hay uno o cero arboles
    }
 
    //lee los bits del archivo
    bits = 0;
    fopen_s(&fs, argv[3], "w");
 
    fread(&a, sizeof(char), 1, fe);
    bits |= a;
    bits <<= 8;
    fread(&a, sizeof(char), 1, fe);
    bits |= a;
    bits <<= 8;
    fread(&a, sizeof(char), 1, fe);
    bits |= a;
    bits <<= 8;
    fread(&a, sizeof(char), 1, fe);
    bits |= a;
    j = 0;
    q = Arbol;
 
 
    do {//se hace hasta que se termine el archivo
        if (bits & 0x80000000) q = q->uno; else q = q->cero;
        bits <<= 1;
        j++;
        if (8 == j)
        {
            i = fread(&a, sizeof(char), 1, fe);
            bits |= a;
            j = 0;
        }
 
        if (!q->uno && !q->cero)
        {
            putc(q->letra, fs);
            Longitud--;
            q = Arbol;
        }
    } while (Longitud);
 
    fclose(fs);
    fclose(fe);//se cierran los archivos
 
    BorrarArbol_D(Arbol);
    return 0;
}
 
int Comprimir(int argc, char* argv[]) // Compresion
{
    tipoNodo* Lista;
    tipoNodo* Arbol;
 
    FILE* fe, * fs;
    unsigned char c;
    tipoNodo* p;
    tipoTabla* t;
    int nElementos;
    long int Longitud = 0;
 
    unsigned long int dWORD;
    int nBits;
 
    if (argc < 4)
    {
        printf("Usar:\n%s <fichero_entrada> <fichero_salida>\n", argv[0]);
        return 1;
    }
 
    Lista = NULL;
 
    fopen_s(&fe, argv[2], "r");//se abre el archivo
    do {
        c = fgetc(fe);
        if (feof(fe))
        {
            break;
        }
        Longitud++;
        Cuenta(&Lista, c); //establece la frecuencia con la que aparece un caracter
    } while (1);
    fclose(fe);
 
    Ordenar(&Lista);
 
    Arbol = Lista; //se crea el arbol
    while (Arbol && Arbol->sig)
    {
        p = (tipoNodo*)malloc(sizeof(tipoNodo)); //se crea otro arbol
        p->letra = 0;
        p->uno = Arbol;
        Arbol = Arbol->sig;
        p->cero = Arbol;
        Arbol = Arbol->sig;
        p->frecuencia = p->uno->frecuencia +
            p->cero->frecuencia;
        InsertarOrden(&Arbol, p); //un nuevo nodo se inserta
    }
 
    Tabla = NULL;
    CrearTabla(Arbol, 0, 0);
 
    fopen_s(&fs, argv[3], "wb");
    //se abre el archivo comprimido
    fwrite(&Longitud, sizeof(long int), 1, fs);
    nElementos = 0;
    t = Tabla;
 
    while (t)
    {
        nElementos++;
        t = t->sig;
    }
 
    fwrite(&nElementos, sizeof(int), 1, fs);//se escriben el numero de elementos y la tabla en el archivo
    t = Tabla;
 
    while (t) // para que t dibuje
    {
        fwrite(&t->letra, sizeof(char), 1, fs);
        fwrite(&t->bits, sizeof(unsigned long int), 1, fs);
        fwrite(&t->nbits, sizeof(char), 1, fs);
        t = t->sig;
    }
 
    fopen_s(&fe, argv[2], "r");//se abre el archivo a comprimir
    dWORD = 0;
    nBits = 0;//valores iniciales
    do {
        c = fgetc(fe);
        if (feof(fe))
        {
            break;
        }
 
        t = BuscaCaracter(Tabla, c); //se busca en la tabla
 
        while (nBits + t->nbits > 32)
        {
            c = dWORD >> (nBits - 8); //saca los 8 bits mas pesados
            fwrite(&c, sizeof(char), 1, fs);
            nBits -= 8;  //se eliminan para tener más espacio
        }
        dWORD <<= t->nbits;
        dWORD |= t->bits;
        nBits += t->nbits;
    } while (1);
 
    while (nBits > 0)
    {
        if (nBits >= 8) c = dWORD >> (nBits - 8);
        else c = dWORD << (8 - nBits);
        fwrite(&c, sizeof(char), 1, fs);
        nBits -= 8;
    }
    fclose(fe);
    fclose(fs); //se cierran los archivos
    BorrarArbol(Arbol);
    while (Tabla)
    {
        t = Tabla;
        Tabla = t->sig;
        free(t);
    }
 
    return 0;
}
 
//Funciones extra para comprimir
void Cuenta(tipoNodo** Lista, unsigned char c)
{
    tipoNodo* p, * a, * q;
 
    if (!*Lista)
    {
        *Lista = (tipoNodo*)malloc(sizeof(tipoNodo));
        (*Lista)->letra = c;
        (*Lista)->frecuencia = 1;
        (*Lista)->sig = (*Lista)->cero = (*Lista)->uno = NULL;
    }
 
    else
    {
        p = *Lista;//el nodo apunta a lista
        a = NULL;
        while (p && p->letra < c)
        {
            a = p;      //se guardan los elementos
            p = p->sig; //se va al siguiente elemento
        }
 
        if (p && p->letra == c) p->frecuencia++;
        else
        {
            // Insertar un elemento nuevo
            q = (tipoNodo*)malloc(sizeof(tipoNodo)); //se inserta el nuevo elemento
            q->letra = c;
            q->frecuencia = 1;
            q->cero = q->uno = NULL;
            q->sig = p;
            if (a) a->sig = q;
            else *Lista = q;
        }
    }
}
 
 
void Ordenar(tipoNodo** Lista)
{
    tipoNodo* Lista2, * a;
 
    if (!*Lista) return; // si la lista esta vacía
    Lista2 = *Lista;
    *Lista = NULL;
    while (Lista2)
    {
        a = Lista2;
        Lista2 = a->sig;
        InsertarOrden(Lista, a); //inserta los elementos en orden
    }
}
 
void InsertarOrden(tipoNodo** Cabeza, tipoNodo* e) //funcion para insertar caracteres en ordden
{
    tipoNodo* p, * a;
 
    if (!*Cabeza)
    {
        *Cabeza = e;
        (*Cabeza)->sig = NULL;
    }
    else
    {
 
        p = *Cabeza;
        a = NULL;
        while (p && p->frecuencia < e->frecuencia)
        {
            a = p;  //se guarda el elemento
            p = p->sig;  //se avanza
        }
 
        e->sig = p;
        if (a) a->sig = e;
        else *Cabeza = e;
    }
}
 
void CrearTabla(tipoNodo* n, int l, int v)//funcion para crear la tabla
{
    if (n->uno)  CrearTabla(n->uno, l + 1, (v << 1) | 1);
    if (n->cero) CrearTabla(n->cero, l + 1, v << 1);
    if (!n->uno && !n->cero) InsertarTabla(n->letra, l, v);
}
 
void InsertarTabla(unsigned char c, int l, int v) //para insertar la tabla
{
    tipoTabla* t, * p, * a;
 
    t = (tipoTabla*)malloc(sizeof(tipoTabla)); //se crea el elemento
    t->letra = c;
    t->bits = v;
    t->nbits = l;
 
    if (!Tabla) //si tabla es NULL
    {
        Tabla = t;
        Tabla->sig = NULL;
    }
    else
        p = Tabla;
        a = NULL;
        while (p && p->letra < t->letra)
        {
            a = p;
            p = p->sig;
        }
 
        t->sig = p;
        if (a) a->sig = t;
        else Tabla = t;
    }
}
 
tipoTabla* BuscaCaracter(tipoTabla* Tabla, unsigned char c) //se busca el caraccter hasta que se encuentra y este es retornado
{
    tipoTabla* t;
 
    t = Tabla;
    while (t && t->letra != c) t = t->sig;
    return t;
}
 
void BorrarArbol(tipoNodo* n)
{
    if (n->cero) BorrarArbol(n->cero);
    if (n->uno)  BorrarArbol(n->uno);
    free(n);
}
 
void BorrarArbol_D(tipoNodo_D* n)//misma lógica usada anteriormente pero para el descomprimir
{
    if (n->cero) BorrarArbol_D(n->cero);
    if (n->uno)  BorrarArbol_D(n->uno);
    free(n);
}
 
 
void main(int argc, char* argv[])
 
{ //en el main se mandan a llamar las funciones
    char opcion = argv[1][0];
 
    if (opcion == 'e')
    { //si se introduce e entonces se debe comprimir
        Comprimir(argc, argv);
        printf("Proceso de compresion finalizado");
    }
    else {//sino se descomprime
        Descomprimir(argc, argv);
        printf("Proceso de descompresion finalizado");
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar