How can I join these programs in a menu with \"C\" programming (NOT C ++)? //MEN
ID: 3891118 • Letter: H
Question
How can I join these programs in a menu with "C" programming (NOT C ++)?
//MENU
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
struct datos {
float numero;
}metodo[4];
void basedeNumeros () {
system("cls");
printf(" BASE DE NUMEROS");
}
void sumayRestadeNumerosBin (){
system("cls");
printf(" SUMA Y RESTA DE NUMEROS BINARIOS");
}
void sumadeNumHexadecimales (){
system("cls");
printf(" SEMA DE NUMERO HEXADECIMALES");
}
void algoritmodeBooth () {
system("cls");
printf(" ALGORITMO DE BOOTH ");
}
void estandarIEE () {
system("cls");
printf(" ESTANDAR IEE");
}
void salir (){
system("cls");
printf(" Programa Finalizado ");
}
void menu (){
system("cls");
int opcion;
do {
printf(" _______________________________________________________________ ");
printf(" Menu de opciones ");
printf("1. Conversion entre numeros de cualquier base. ");
printf("2. Suma y Resta de numeros binarios positivos y negativos. ");
printf("3. Suma de números hexadecimales. ");
printf("4. Algoritmo de Booth. ");
printf("5. Estandar IEEE-754. ");
printf("6. Salir. ");
printf("Selecciona una opcion: ");
scanf("%d",&opcion);
switch(opcion){
case 1:
basedeNumeros();
break;
case 2:
sumayRestadeNumerosBin();
break;
case 3:
sumadeNumHexadecimales();
break;
case 4:
algoritmodeBooth ();
break;
case 5:
estandarIEE();
break;
case 6:
salir();
break;
default:
printf("opcion incorrecta ");
}
}while(opcion!=6);
}
int main (){
menu();
system("PAUSE");
return 0;
}
--------------------------------------------------------------
//BOOTH ALGORITHM.
#include <stdio.h>
#include <math.h>
int a = 0,b = 0, c = 0, a1 = 0, b1 = 0, com[5] = { 1, 0, 0, 0, 0};
int anum[5] = {0}, anumcp[5] = {0}, bnum[5] = {0};
int acomp[5] = {0}, bcomp[5] = {0}, pro[5] = {0}, res[5] = {0};
void binary(){
a1 = fabs(a);
b1 = fabs(b);
int r, r2, i, temp;
for (i = 0; i < 5; i++){
r = a1 % 2;
a1 = a1 / 2;
r2 = b1 % 2;
b1 = b1 / 2;
anum[i] = r;
anumcp[i] = r;
bnum[i] = r2;
if(r2 == 0){
bcomp[i] = 1;
}
if(r == 0){
acomp[i] =1;
}
}
//part for two's complementing
c = 0;
for ( i = 0; i < 5; i++){
res[i] = com[i]+ bcomp[i] + c;
if(res[i] >= 2){
c = 1;
}
else
c = 0;
res[i] = res[i] % 2;
}
for (i = 4; i >= 0; i--){
bcomp[i] = res[i];
}
//in case of negative inputs
if (a < 0){
c = 0;
for (i = 4; i >= 0; i--){
res[i] = 0;
}
for ( i = 0; i < 5; i++){
res[i] = com[i] + acomp[i] + c;
if (res[i] >= 2){
c = 1;
}
else
c = 0;
res[i] = res[i]%2;
}
for (i = 4; i >= 0; i--){
anum[i] = res[i];
anumcp[i] = res[i];
}
}
if(b < 0){
for (i = 0; i < 5; i++){
temp = bnum[i];
bnum[i] = bcomp[i];
bcomp[i] = temp;
}
}
}
void add(int num[]){
int i;
c = 0;
for ( i = 0; i < 5; i++){
res[i] = pro[i] + num[i] + c;
if (res[i] >= 2){
c = 1;
}
else{
c = 0;
}
res[i] = res[i]%2;
}
for (i = 4; i >= 0; i--){
pro[i] = res[i];
printf("%d",pro[i]);
}
printf(":");
for (i = 4; i >= 0; i--){
printf("%d", anumcp[i]);
}
}
void arshift(){//for arithmetic shift right
int temp = pro[4], temp2 = pro[0], i;
for (i = 1; i < 5 ; i++){//shift the MSB of product
pro[i-1] = pro[i];
}
pro[4] = temp;
for (i = 1; i < 5 ; i++){//shift the LSB of product
anumcp[i-1] = anumcp[i];
}
anumcp[4] = temp2;
printf(" AR-SHIFT: ");//display together
for (i = 4; i >= 0; i--){
printf("%d",pro[i]);
}
printf(":");
for(i = 4; i >= 0; i--){
printf("%d", anumcp[i]);
}
}
void yo(){
int i, q = 0;
printf(" BOOTH'S MULTIPLICATION ALGORITHM");
printf(" Enter two numbers to multiply: ");
printf(" Both must be less than 16");
//simulating for two numbers each below 16
do{
printf(" Enter A: ");
scanf("%d",&a);
printf("Enter B: ");
scanf("%d", &b);
}while(a >=16 || b >=16);
printf(" Expected product = %d", a * b);
binary();
printf(" Binary Equivalents are: ");
printf(" A = ");
for (i = 4; i >= 0; i--){
printf("%d", anum[i]);
}
printf(" B = ");
for (i = 4; i >= 0; i--){
printf("%d", bnum[i]);
}
printf(" B'+ 1 = ");
for (i = 4; i >= 0; i--){
printf("%d", bcomp[i]);
}
printf(" ");
for (i = 0;i < 5; i++){
if (anum[i] == q){//just shift for 00 or 11
printf(" -->");
arshift();
q = anum[i];
}
else if(anum[i] == 1 && q == 0){//subtract and shift for 10
printf(" -->");
printf(" SUB B: ");
add(bcomp);//add two's complement to implement subtraction
arshift();
q = anum[i];
}
else{//add ans shift for 01
printf(" -->");
printf(" ADD B: ");
add(bnum);
arshift();
q = anum[i];
}
}
printf(" Product is = ");
for (i = 4; i >= 0; i--){
printf("%d", pro[i]);
}
for (i = 4; i >= 0; i--){
printf("%d", anumcp[i]);
}
}
-------------------------------------------------------------------------------
//ESTANDAR IEEE-754
#include<stdio.h>
int binary(int n, int i)
{
int k;
for (i--; i >= 0; i--)
{
k = n >> i;
if (k & 1)
printf("1");
else
printf("0");
}
}
typedef union
{
float f;
struct
{
unsigned int mantissa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} field;
} myfloat;
int main()
{
myfloat var;
printf("Ingrese cualquier numero decimal: ");
scanf("%f",&var.f);
printf("%d ",var.field.sign);
binary(var.field.exponent, 8);
printf(" ");
binary(var.field.mantissa, 23);
printf(" ");
return 0;
}
--------------------------------------------------------------------------------
//HEXADECIMAL SUM
//#include<stdafx.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int _tmain(int argc, _TCHAR* argv[])
{
/*declaramos variables*/
char i,j,longitud1,numero1[300],temporal,numero2[300],numerohexadecimal[300];
int longitud2 = 0, sumatoria1 = 0, sumatoria2 = 0;
int operaciones, resultado, dividendo, divisor = 16, residuo;
/*con el printf imprimimos un mensaje que pedirá el primer número hexadecimal ( = salto de línea)*/
printf("Ingrese el primer numero hexadecimal ");
gets_s(numero1);
/*strlen=longitud de la caden*/
longitud1=strlen(numero1);
for(i=0,j=longitud1-1; i<longitud1/2; i++,j--)
/*Se inicia un ciclo ejecutivo temporal*/
{
temporal = numero1[i];
numero1[i] = numero1[j];
numero1[j] = temporal;
}
/*inicializamos i=0*/
i=0;
while (i<longitud1)
{
if (numero[i]== 'A')
{
sumatoria1 += (pow(16.0,i)*10);
}
else
{
if (numero[i]== 'B')
{
sumatoria1 += (pow(16.0,i)*11);
}
else
{
if (numero[i]== 'C')
{
sumatoria1 += (pow(16.0,i)*12);
}
else
{
if (numero[i]== 'D')
{
sumatoria1 += (pow(16.0,i)*13);
}
else
{
if (numero[i]== 'E')
{
sumatoria1 += (pow(16.0,i)*14);
}
else
{
if (numero[i]== 'F')
{
sumatoria1 += (pow(16.0,i)*15);
}
else
{
sumatoria1 +=(pow(16.0,i)*(numero1[i] - 48));
}
}
}
}
}
}
}
i=i+1;
}
printf(" Ingrese el segundo número hexadecimal ");
gets_s(numero2);
/*strlen=longitud de la caden*/
longitud2=strlen(numero2);
for(i=0,j=longitud2-1; i<longitud2/2; i++,j--)
/*Se inicia un ciclo ejecutivo temporal*/
{
temporal = numero2[i];
numero2[i] = numero2[j];
numero2[j] = temporal;
}
j=0;
while (j<longitud1)
{
if (numero[j]== 'A')
{
sumatoria2 += (pow(16.0,j)*10);
}
else
{
if (numero[j]== 'B')
{
sumatoria2 += (pow(16.0,j)*11);
}
else
{
if (numero[j]== 'C')
{
sumatoria2 += (pow(16.0,j)*12);
}
else
{
if (numero[j]== 'D')
{
sumatoria2 += (pow(16.0,j)*13);
}
else
{
if (numero[j]== 'E')
{
sumatoria2 += (pow(16.0,j)*14);
}
else
{
if (numero[j]== 'F')
{
sumatoria2 += (pow(16.0,j)*15);
}
sumatoria2 +=(pow(16.0,j)*(numero2[j] - 48));
}
}
}
}
}
}
j=j+1;
{
printf("Operaciones: 1. suma 2. Resta 3. Multiplicación 4. División 5.Salir ");
scanf_s("%d", &Operaciones);
while(Operaciones !=5)
{
switch (operaciones)
{
case 1:
resultado = sumatoria1 + sumatoria2;
break;
case 2:
resultado = sumatoria1 - sumatoria2;
case 3:
resultado = sumatoria1 * sumatoria2;
case 4:
if (sumatoria2 == 0)
{
resultado = 99999;
}
else
{
resultado = (sumatoria1/sumatoria2);
}
break;
{
if (resultado < 0)
{
printf ("No existen los números hexadecimales negativos");
}
else
{
if (resultado == 99999)
{
printf("La división para cero no existe")
}
else
{
printf("El resultado de la operación que usted eligio en decimal es %d" , resultado);
dividendo = resultado;
i=1;
while (dividendo ! =0 )
{
residuo=dividendo % divisor ;
if (residuo<10)
{
residuo = residuo + 48;
}
else
{
residuo = residuo + 55;
}
numerohexadecimal[i++] = residuo;
dividendo = dividendo/divisor;
}
printf(" El resultado de la operación %d en hexadecimal es:", operaciones);
for (j=i-1; j>0; j--)
{
printf("%c", numerohexadecimal[j]);
}
}
}
printf(" Operaciones : 1. Suma 2. Resta 3.Multiplicación 4.División 5. Salir ");
sacnf_s ("%d" , &Operaciones);
}
eystem ("PAUSE");
return 0;
}
}
}
---------------------------------------------------------------------------------------------------------------------
//BASE CONVERTER
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
void llenaArreglo (int num [], int digitos, int base1);
int convertirAdecimal (int num [], int digitos, int base1, int base2);
void convertirAbase (int decimal, int base2);
int checabase ();
int checabase2 ();
int main()
{
int digitos = 0;
int base1, base2;
int decimal;
printf ("Este programa convierte numeros de cierta"
"base a una distinta. ");
printf ("La base maxima de conversion es Hexadecimal (16). ");
base1 = checabase ();
printf (" De cuantos digitos es el numero a convertir? => ");
scanf ("%d", &digitos);
int num [digitos];
printf (" Introduce el numero entero a convertir, digito a"
"digito comenzando con la cifra más significativa ");
llenaArreglo (num, digitos, base1);
decimal = convertirAdecimal (num, digitos, base1, base2);
base2 = checabase2();
printf (" ");
convertirAbase (decimal, base2);
system ("PAUSE");
return 0;
}
int checabase ()
{
int x;
printf ("De que base es el numero a convertir? => ");
scanf ("%d", &x);
if(x >=17)
{
printf(" **El numero insertado excede la capacidad de"
"por favor ingrese una base menor a 16** ");
printf ("De que base es el numero a convertir? ");
scanf ("%d", &x);
}
if(x <=-1)
{
printf(" **El numero insertado excede la capacidad,"
"por favor ingrese una base mayor a cero** ");
printf ("De que base es el numero a convertir? ");
scanf ("%d", &x);
}
return x;
}
int checabase2 ()
{
int x;
printf (" A que base desea convertirlo? ");
scanf ("%d", &x);
if(x >=17)
{
printf(" **El numero insertado excede la capacidad,"
" por favor ingrese una base menor a 16** ");
printf (" A que base desea convertirlo? ");
scanf ("%d", &x);
}
if(x <=-1)
{
printf(" **El numero insertado excede la capacidad "
" por favor ingrese una base mayor a cero** ");
printf (" A que base desea convertirlo? ");
scanf ("%d", &x);
}
return x;
}
void llenaArreglo (int num [], int digitos, int base1)
{
int i,x, a;
for (i=0; i<digitos; i++)
{
printf (" Introduce el digito numero %d ", i+1);
scanf("%x", &num[i]);
if (num[i]>=base1 || num[i]<0)
{
printf (" **Numero no valido para esta base** ");
printf (" Introduce el digito numero %d ", i+1);
scanf("%x", &num[i]);
}
}
printf (" El numero que deseas convertir es: ");
for (i=0; i<digitos; i++)
printf ("%x", num [i]);
}
int convertirAdecimal (int num [], int digitos, int base1, int base2)
{
int i, pot;
int x=0;
for (i=digitos-1, pot=0; i>=0, pot<digitos; i--, pot++)
{
x+= (pow(base1, pot)* num[i]);
}
return x;
}
void convertirAbase (int decimal, int base2)
{
int cociente,residuo,cont, i,j;
int conv [50];
i=0;
do{
cociente = decimal/base2;
residuo = decimal%base2;
conv[i] = residuo;
decimal = cociente;
i+=1;
}while (cociente>0);
printf("La conversion es: ");
for (cont=i-1; cont>=0; cont--)
{
printf("%x", conv [cont]);
}
printf(" ");
}
Explanation / Answer
Hello,
I can understand from your question that you want to invoke multiple functions to your main program.
This can be easily done just by calling the funcion.you should initially declare the funtion in C.
For example : int BaseConvertor(); [return_type Function_Name;]
Declare all those functions and you can call them at your desired place.
For example: // Algorithm to know how to invoke a function
int main{
int sum();
int a,b;
printf(sum(a,b));
return 0;
}
int sum(x,y){
print('Enter the first number a:');
scanf(&a);
print('Enter the seconde number b');
scanf(&b);
return a+b;
}
Please note that above program is just an algorithm not an Finite C code.
I hope I have solved your problem :)
Thank you :)
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.