Sábado 9 de Noviembre de 2024, 03:45
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Rotar un arreglo arriba o abajo y hallar la moda.
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Rotar un arreglo arriba o abajo y hallar la moda. (Leído 5665 veces)
Eriol
Nuevo Miembro
Mensajes: 7
Nacionalidad:
Rotar un arreglo arriba o abajo y hallar la moda.
«
en:
Miércoles 9 de Mayo de 2012, 16:41 »
0
Buen día, mi duda es la siguiente, tengo 2 ejercicios con vectores, arrarys o arreglos como mejor los conozcan y funciones en C++, es decir que tengo que hacer funciones para ello:
1. Debía crear un Vector que leyera N números, y en un menú colocar las opciones de rotar arriba o abajo de la siguiente forma:
Si el usuario ingresa un vector de caracteres:
1 2 3 4
Y elige rotar arriba, debo imprimir el vector original y las nuevas posiciones así:
2 3 4 1
Pero el usuario puede seguir eligiendo bien sea arriba o abajo, que si elige abajo en éste momento el vector vuelve a su posición original y eso, pero si elige arriba, debería mostrar:
3 4 1 2
De éste primer ejercicio, luego de tener una idea me perdí completamente y no he sido capaz de plantearlo como código
2. Y por otro lado, tengo que hallar la moda en otro ejercicio estadístico, partiendo de la base de que la moda es el número que más se repite y que es único.
1 4 4 3 //En éste vector se supone que la moda es 4, pues es el único que se repite
1 1 44 // En éste se supone no hay moda pues hay 2 números que se repiten igual número de veces.
En éste si tengo la idea, pero no sé cómo hacer para que mi código vea que cambio si el contador es igual no hay moda. Lo coloco acá:
Código: C++
float
moda
(
float
v
[
]
,
int
t
)
{
int
c
=
1
, a
=
1
;
float
n
=
0
;
for
(
int
i
=
0
;
i
<
t
;
i
++
)
{
for
(
int
j
=
i
+
1
;
j
<
t
;
j
++
)
{
if
(
v
[
i
]
==
v
[
j
]
)
{
c
++
;
}
else
{
if
(
c
>
a
)
{
n
=
v
[
i
]
;
a
=
c
;
c
=
1
;
}
}
}
}
if
(
a
>
-
1
)
return
n
;
else
return
-
1
;
}
Si sólo ingreso un número que se repita por decir algo 2 veces, pues normal, el programa me devuelve ese número como moda, el problema está en si ingreso 2 términos que se repitan igual número de veces, ahí me devuelve el primero que se repitió como moda.
De ante mano, agradezco cualquier ayuda y más aún cualquier cosa que me ayude a aclarar las dudas.
Tweet
«
última modificación: Viernes 11 de Mayo de 2012, 16:37 por Eriol
»
david_lomber
Miembro activo
Mensajes: 34
Nacionalidad:
Impossible is nothing, just do it!!
Re:Rotar un arregle arriba o abajo y hallar la moda.
«
Respuesta #1 en:
Miércoles 9 de Mayo de 2012, 17:25 »
0
Aqui te dejo las funciones para rotar,
n
es el tamaño del vector:
void rotarArriba
(
int n
){
int aux
=
vec
[
0
];
for (
int i
=
1
;
i
<
n
;
i
++)
vec
[
i
-
1
] =
vec
[
i
];
vec
[
n
-
1
] =
aux
;
}
//---------------------------------------------------------------------------
void rotarAbajo
(
int n
){
int aux
=
vec
[
n
-
1
];
for (
int i
=
n
-
2
;
i
>=
0
;
i
--)
vec
[
i
+
1
] =
vec
[
i
];
vec
[
0
] =
aux
;
}
Para acomodarlo a tu codigo ya te las arreglas tu solo
y con lo de la moda.
Saludos!!
Eriol
Nuevo Miembro
Mensajes: 7
Nacionalidad:
Re:Rotar un arregle arriba o abajo y hallar la moda.
«
Respuesta #2 en:
Viernes 11 de Mayo de 2012, 16:34 »
0
Hola David, muchas gracias por ayudar; he modificado un poco ambas funciones y me han quedado así:
Código: C++
void
rotarArriba
(
int
v
[
]
,
int
n
)
{
int
aux
=
v
[
0
]
, i
=
0
;
for
(
int
i
=
1
;
i
<
n
;
i
++
)
{
v
[
i
-
1
]
=
v
[
i
]
;
v
[
n
-
1
]
=
aux
;
}
}
//---------------------------------------------------------------------------
void
rotarAbajo
(
int
v
[
]
,
int
n
)
{
int
aux
=
v
[
n
-
1
]
, i
=
0
;
for
(
int
i
=
n
-
2
;
i
>=
0
;
i
--
)
{
v
[
i
+
1
]
=
v
[
i
]
;
v
[
0
]
=
aux
;
}
}
Básicamente lo que hice fue agregar un segundo parámetro que sería el vector que va a intercambiar, ahora el problema es que al ser éstas funciones tipo
Código: C++
void
, deben imprimir el resultado dentro de la misma función, la cosa es que no he podido hacer que imprima los valores correctos, no sé bien dónde poner el
Código: C++
printf
herzdark
Miembro activo
Mensajes: 38
Nacionalidad:
Re:Rotar un arregle arriba o abajo y hallar la moda.
«
Respuesta #3 en:
Viernes 11 de Mayo de 2012, 16:59 »
0
mm, tu codigo es un poco inentendible, yo lo pondría así, con el printf incluido:
Código: C++
void
rotarArriba
(
int
v
[
]
,
int
n
)
{
int
aux
=
v
[
0
]
, i
;
for
(
int
i
=
0
;
i
<
n
-
1
;
i
++
)
{
v
[
i
]
=
v
[
i
+
1
]
;
// en la posición i estoy poniendo el valor de la posición siguiente
printf
(
"%d"
,v
[
i
]
;
}
v
[
n
-
1
]
=
aux
;
}
//---------------------------------------------------------------------------
void
rotarAbajo
(
int
v
[
]
,
int
n
)
{
int
aux
=
v
[
n
-
1
]
, i
;
for
(
int
i
=
n
-
1
;
i
>
0
;
i
--
)
{
v
[
i
]
=
v
[
i
-
1
]
;
// en la posición i estoy poniendo el valor de la posición anterior
printf
(
"%d"
;
v
[
i
]
;
}
v
[
0
]
=
aux
;
}
Eriol
Nuevo Miembro
Mensajes: 7
Nacionalidad:
Re:Rotar un arreglo arriba o abajo y hallar la moda.
«
Respuesta #4 en:
Viernes 11 de Mayo de 2012, 17:59 »
0
Bueno, Herzdark, tu código funciona, pero no está imprimiendo uno de lo términos
david_lomber
Miembro activo
Mensajes: 34
Nacionalidad:
Impossible is nothing, just do it!!
Re:Rotar un arreglo arriba o abajo y hallar la moda.
«
Respuesta #5 en:
Viernes 11 de Mayo de 2012, 19:40 »
0
La verdad no se para que agregaste estas lineas a las funciones :S :
v
[
n
-
1
]=
aux
;
v
[
0
] =
aux
;
Ya que como estaba no necesitaba que le agragaras nada, ya lo acomodaba (a como entendi que lo qerias xD).
Y yo solo le habia puesto como parametro el tamaño ya que el vector lo habia hecho como global, bueno aqui te lo dejo como lo puse en c++, si tu lo ocupas en c lo conviertes
(puede que encuentres raras algunas cabeceras
esas se las pone el Builder c++):
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#define tam 5
void rotarArriba
(
int
,
int vec
[]);
void rotarAbajo
(
int
,
int vec
[]);
void mostrar
(
int
,
int vec
[]);
//vec[5] = {1,2,3,4,5};
//---------------------------------------------------------------------------
int main
(
int argc
,
char
*
argv
[])
{
char opc
;
int vec
[
tam
] = {
1
,
2
,
3
,
4
,
5
};
do{
clrscr
();
cout
<<
"1.- Rotar Arriba"
<<
endl
<<
"2.- Rotar Abajo"
<<
endl
<<
"3.- Mostrar"
<<
endl
<<
"4.- Salir"
<<
endl
;
cin
>>
opc
;
if (
opc
<
'1'
||
opc
>
'4'
){
cout
<<
"opcion no valida..."
<<
endl
;
getch
();
}else{
switch (
opc
){
case
'1'
:
rotarArriba
(
tam
,
vec
);
break;
case
'2'
:
rotarAbajo
(
tam
,
vec
);
break;
case
'3'
:
mostrar
(
tam
,
vec
);
getch
();
break;
}
}
}while(
opc
!=
'4'
);
return
0
;
}
//---------------------------------------------------------------------------
void mostrar
(
int n
,
int vec
[]){
for (
int i
=
0
;
i
<
n
;
i
++)
cout
<<
vec
[
i
]<<
"\t"
;
}
//---------------------------------------------------------------------------
void rotarArriba
(
int n
,
int vec
[]){
int aux
=
vec
[
0
];
for (
int i
=
1
;
i
<
n
;
i
++)
vec
[
i
-
1
] =
vec
[
i
];
vec
[
n
-
1
] =
aux
;
}
//---------------------------------------------------------------------------
void rotarAbajo
(
int n
,
int vec
[]){
int aux
=
vec
[
n
-
1
];
for (
int i
=
n
-
2
;
i
>=
0
;
i
--)
vec
[
i
+
1
] =
vec
[
i
];
vec
[
0
] =
aux
;
}
Saludos!!
EDITO: Ahora me di cuenta que las lineas son las mismas que puse yo xDDD, nada más que tu las metiste dentro de los
for
y yo las tenia fuera
v
[
n
-
1
]=
aux
;
v
[
0
] =
aux
;
«
última modificación: Viernes 11 de Mayo de 2012, 21:18 por david_lomber
»
Eriol
Nuevo Miembro
Mensajes: 7
Nacionalidad:
Re:Rotar un arreglo arriba o abajo y hallar la moda.
«
Respuesta #6 en:
Sábado 12 de Mayo de 2012, 00:16 »
0
David, muchas gracias por ayudar.
Mira, el programa en C Borland corre normalmente aunque no reconoce la librería #include <vcl.h> en el Visual C++ que es el que utilizo normalmente no me reconoce además de esa, la iostream.h
Sin embargo, es perfectamente adaptable, pero la cosa es que mi menú solo debe tener 3 opciones.
Rotar Arriba, Rotar Abajo y Salir.
Una cosa que no comenté antes, es que además de eso, al momento de hacer la rotación, apenas seleccione una de las 2 opciones, el programa debe mostrar en pantalla la rotación sin que el usuario tenga que escoger verla.
david_lomber
Miembro activo
Mensajes: 34
Nacionalidad:
Impossible is nothing, just do it!!
Re:Rotar un arreglo arriba o abajo y hallar la moda.
«
Respuesta #7 en:
Sábado 12 de Mayo de 2012, 00:21 »
0
Solo borra la opcion
Mostrar
del menu y del
switch
su correspondienta opcion (case '3') y en los
case
de
rotarArriba
y
rotarAbajo
despues de llamar esas funciones, abajo haz una llamada a la funcion
mostrar
.
Saludos!!
Eriol
Nuevo Miembro
Mensajes: 7
Nacionalidad:
Re:Rotar un arreglo arriba o abajo y hallar la moda.
«
Respuesta #8 en:
Domingo 13 de Mayo de 2012, 19:37 »
0
David,
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Rotar un arreglo arriba o abajo y hallar la moda.