C/Visual C - ayuda con programa

 
Vista:

ayuda con programa

Publicado por victor (1 intervención) el 03/10/2006 20:37:41
necesito que me ayuden a realizar este programa que un profesro me ha dado y a dicho que nadie lo puede hacer a exepcion de el. el es un tipo muy engreido, dice que es el mejor en C, espero que este equivocado. por favo ayudenme a darle su merecido.

el programa dice asi:

Escriba un programa C que lea un vector o arreglo de números enteros positivos de longitud MAX elementos, imprima el menor, mayor elemento del arreglo y sus posiciones, así también decir si el arreglo es simétrico, antisimétrico o mayoritario. Realice una función para cada caso.

Simétrico: es un vector de n-elementos donde la posición i_ésima coincide con el elemento que ocupa la posición n-i_ésima.

Antisimétrico: es un vector de n-elementos donde la posición i_ésima coincide con el elemento que ocupa la posición n-i_ésima cambiado de signo.

Mayoritario: es un vector de n-elementos donde existe un elemento almacenado en el vector que se repite más de n/2 veces.

Si me pueden ayudar, envienmelo a mi correo que seria de buena ayuda acabar con ese tipo. gracias
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

RE:ayuda con programa

Publicado por Eduardo Negrete (76 intervenciones) el 03/10/2006 22:17:33
Te pongo este codigo haber si es lo que quieres. Y sirve que heber si alguien quiere aportar alguna idea.

Lo de simetrico y antisimetrico la verdad no me quedo claro. Si Puedes Explicarlo con manzanitas.

Espero Te siva!!!

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

typedef unsigned int UINT;


UINT *NuevoVector( UINT Max );
int LlenarVector( UINT Vector[], UINT Max );
int ImprimirMayorMenor( const UINT Vector[], UINT Max );
int ValorMayor( const UINT Vector[], UINT Max, UINT *ValorMaximo, UINT *Posicion );
int ValorMenor( const UINT Vector[], UINT Max, UINT *ValorMinimo, UINT *Posicion );
bool Mayoritario( const UINT Vector[], UINT Max, UINT *Valor );

void main()
{

UINT *Vector, Max = 15, Valor;

// Reserva Memoria Al Vector
Vector = NuevoVector( Max );
Vector[0] = 1;
Vector[1] = 2;
Vector[2] = 4;
Vector[3] = 0;
Vector[4] = 4;
Vector[5] = 4;
Vector[6] = 4;
Vector[7] = 5;
Vector[8] = 3;
Vector[9] = 2;
Vector[10] = 6;
Vector[11] = 4;
Vector[12] = 4;
Vector[13] = 7;
Vector[14] = 4;

// Llenado Del Vector Aleatorio
// LlenarVector( Vector, Max );
// Imprime El Valor Mayor Y Menor Del Vector
ImprimirMayorMenor( Vector, Max );
// Verifica Si El Vector Es Mayoritario
if ( Mayoritario( Vector, Max, &Valor ) == 1 )
printf("\n\n\n\tEl Vector Es Mayoritario\n\tY Su Valor Con Mayor Repeticion Es %d", Valor);

getche();
}

UINT *NuevoVector( UINT Max )
{

UINT *Nuevo;

Nuevo = ( UINT * ) calloc( Max, sizeof( UINT ) );
if ( Nuevo == NULL )
{
printf("\n\n\n\tError: Al Intentar Asignar Memoria");
getche();

exit( -1 );
}

return Nuevo;
}

int LlenarVector( UINT Vector[], UINT Max )
{

UINT i;

srand( ( unsigned )time( NULL ) );

for ( i = 0; i < Max; i++ )
Vector[i] = rand() % Max; // Numeros Aleatorios de 0 a Max - 1

return 0;
}

int ImprimirMayorMenor( const UINT Vector[], UINT Max )
{

UINT Mayor, Menor;
UINT PosMenor, PosMayor;

ValorMayor( Vector, Max, &Mayor, &PosMayor );
ValorMenor( Vector, Max, &Menor, &PosMenor );

printf("\n\n\n\tEl Mayor Valor Es %d Y Esta En La Posicion %d", Mayor, PosMayor );
printf("\n\n\tEl Menor Valor Es %d Y Esta En La Posicion %d", Menor, PosMenor );

return 0;
}

int ValorMayor( const UINT Vector[], UINT Max, UINT *ValorMaximo, UINT *Posicion )
{

UINT i;

*ValorMaximo = Vector[0];
*Posicion = 0;
for ( i = 1; i < Max; i++ )
{
if ( *ValorMaximo < Vector[i] )
{
*ValorMaximo = Vector[i];
// Guarda La Posicion Donde Se Encuentra
*Posicion = i;
}
}

return 0;
}

int ValorMenor( const UINT Vector[], UINT Max, UINT *ValorMinimo, UINT *Posicion )
{

UINT i;

*ValorMinimo = Vector[0];
*Posicion = 0;
for ( i = 1; i < Max; i++ )
{
if ( *ValorMinimo > Vector[i] )
{
*ValorMinimo = Vector[i];
// Guarda La Posicion Donde Se Encuentra
*Posicion = i;
}
}

return 0;
}

bool Mayoritario( const UINT Vector[], UINT Max, UINT *Valor )
{

UINT ValueMax, Position, *Histogram, i;

ValorMayor( Vector, Max, &ValueMax, &Position );

Histogram = NuevoVector( ValueMax + 1 );

// Se Crea Un Histograma Del Vector
for ( i = 0; i < Max; i++ )
Histogram[Vector[i]]++;

// Verifica La Condicion n/2
for ( i = 0; i <= ValueMax; i++ )
{
if ( Histogram[i] >= Max / 2 )
{
*Valor = i;
return 1;
}
}

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

RE:ayuda con programa

Publicado por fernando.gomez (1603 intervenciones) el 03/10/2006 22:42:01
Dadas tus definiciones, y dado tu conjunto universo, el conjunto de todos los posibles vectores antisimétricos es el vacío. Digo, si tu conjunto universo son los naturales -enteros positivos-, entonces no puede haber números negativos, ¿no?
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