• Domingo 13 de Julio de 2025, 05:13

Mostrar Mensajes

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


Mensajes - cybergatita

Páginas: 1 ... 3 4 [5] 6 7
101
C/C++ / ,, Una Cuestion,,,en Rotacion De Bits
« en: Jueves 31 de Agosto de 2006, 20:34 »
que tal chicos,, hay alguna forma o alguna palabra reservada o funcion , que nos pueda servir para la rotacion de un numero porsupuesto binario. obviamente para el desplazamiento si la hay pero para la rotacion circular no encuentra alguna.



Saludos.

102
Hardware / Caracteristicas Procesadores
« en: Sábado 26 de Agosto de 2006, 18:11 »
que tal chicos
eh andando buscando algunas de estas caracteristicas

-tamaño de registro
-conjunto de instrucciones.
 -bus de datos
  -bus de direcciones.
 -memoria direccionable.
 
del 80286 al Pentium IV

Hay varia informacion en la web, pero todos dicen algo diferente:(

103
C/C++ / Re: Ordenacion De Registros
« en: Miércoles 14 de Junio de 2006, 23:10 »
Muchas gracias toni, ya lo implemente

ahora me falta añadirle un par de cosas mas a mi codigo, ya te contare como me fue




gracias de antemano a sus respuestas.

104
C/C++ / Re: Ordenacion De Registros
« en: Miércoles 14 de Junio de 2006, 04:08 »
en el case 4 trate de implementar lo que me comentaste. y me manda un error
:(
delo contrario pues si corre:)

105
C/C++ / Re: Ordenacion De Registros
« en: Miércoles 14 de Junio de 2006, 03:50 »
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <io.h>


struct stRegistro
{
char valido; //campo que indica si el registro es valido S->Valido, N->Invalido
char nombre[34];
int dato[4];
};

struct stRegistro array[5];

int comparar(const void *, const void *);

int Menu();
void Leer(struct stRegistro *reg);
void Mostrar(struct stRegistro *reg);
void Listar(long n,struct stRegistro *reg);
void Listar2(long n,struct stRegistro *reg);

long LeeNumero();
void Empaquetar(FILE **fa);

int main()
{
struct stRegistro reg;
FILE *fa;
int opcion;
long numero;
fa=fopen("alea.dat","r+b"); //este modo permite leer y escribir
if(!fa)fa=fopen("alea.dat","w+b"); //si el fichero no existe, lo crea
do
{
opcion=Menu();


switch(opcion)
{


case'1': //añadir registro
Leer(®);
//insertar al final;
fseek(fa,0,SEEK_END);
fwrite(®,sizeof(struct stRegistro),1,fa);
break;


case'2': //mostrar registro
clrscr();//system("cls");
printf("Mostrar registro:");
numero=LeeNumero();
fseek(fa,numero*sizeof(struct stRegistro),SEEK_SET);
fread(®,sizeof(struct stRegistro),1,fa);
Mostrar(®);
break;


case'3': // eliminar registro
clrscr();//system("cls");
printf("Eliminar registro:");
numero=LeeNumero();
fseek(fa,numero*sizeof(struct stRegistro),SEEK_SET);
fread(®,sizeof(struct stRegistro),1,fa);
reg.valido='N';
fseek(fa,numero*sizeof(struct stRegistro),SEEK_SET);
fwrite(®,sizeof(struct stRegistro),1,fa);
break;


case'4': //mostrar todo
rewind(fa);
   numero = 0;
//system("cls");

   do{
clrscr();
printf("Nombre                             Calificacion\n");

while(fread(®, sizeof(struct stRegistro), 1, fa))
      Listar(numero++, ®);
}while(!eof);
//system("PAUSE");
getch();

int conta=0;

while (fread(&array[conta], 1, sizeof(struct stRegistro), *reg) > 0)

{

conta++;

}


qsort((void*)array, 5, sizeof(struct stRegistro), comparar);
for(conta=0; conta<5; conta++)
printf("\n%s\t%d", array[conta].nombre, array[conta].dato);

getch();

break;

case'5': // eliminar marcados
Empaquetar(&fa);
break;


case'6':
rewind(fa);
numero=0;
clrscr();//system("cls");
printf("Nombre            Datos\n");
while(fread(®,sizeof(struct stRegistro),1,fa));
Listar2(numero++,®);
getch(); //system("PAUSE");
break;
}
}while(opcion!='0');
fclose(fa);
return 0;
}


// Muestra un menu con las opciones disponibles y captura una opcion del usuario


int Menu()

{

char resp[20];
do

{

clrscr();//system("cls");
printf("MENU PRINCIPAL\n");
printf("--------\n\n");
printf("1-Insertar registro\n");
printf("2-Mostrar registro\n");
printf("3-Eliminar registro\n");
printf("4-Mostrar todo\n");
printf("5-Eliminar registro marcados\n");
printf("6-Mostrar lista de disponibles\n");
printf("0-Salir\n");
fgets(resp,20,stdin);
 }  while(resp[0]<'0'&&resp[0]>'6');
  return resp[0];
}


// permite que el usuario introduzca un registro por pantalla
void Leer(struct stRegistro *reg)

{
int i;
char numero[6];
clrscr();// system("cls");
printf("Leer registro:\n\n");
reg->valido='S';
printf("Nombre:");
fgets(reg->nombre,34,stdin);
// la funcion fgets captura el retorno de linea, hay que eliminarlo:
for(i=strlen(reg->nombre)-1;i&®->nombre <' ';i--)
reg->nombre=0;
for(i=0;i<4;i++)
{
printf("Calificacion[%1d]:",i);
fgets(numero,6,stdin);
reg->dato=atoi(numero);
 }
}
// muestra un registro en pantalla, si no esta marcado como borrado
void Mostrar(struct stRegistro *reg)
{
int i;
clrscr();//system("cls");
if(reg->valido=='S')
{
printf("Nombre: %s\n",reg->nombre);
for(i=0;i<4;i++)
printf("Calificacion[%1d]:%d\n",i,reg->dato);
}
i++;
getch();//system("PAUSE");
}
// muestra un registro por pantalla en forma de listado, si no esta marcado como borrado

void Listar2(long n, struct stRegistro *reg)
{
int i;
if(reg->valido!='S')
{
printf("[%6ld]%-34s",n,reg->nombre);
for(i=0;i<4;i++)
printf(",%4d",reg->dato);
printf("\n");
 }
}



void Listar(long n, struct stRegistro *reg)
{
int i;
if(reg->valido=='S')
{
printf("[%6ld]%-34s",n,reg->nombre);
for(i=0;i<4;i++)
printf(",%4d",reg->dato);
printf("\n");
 }
}
// lee un numero suministrado por el usuario
long LeeNumero()
{
char numero[6];
fgets(numero,6,stdin);
return atoi(numero);
}
// elimina los registros marcados como borrados
void Empaquetar(FILE**fa)
{
FILE*ftemp;
struct stRegistro reg;
ftemp=fopen("alea.tmp","wb");
rewind(*fa);
while(fread(®,sizeof(struct stRegistro),1,*fa));
if(reg.valido=='S')
fwrite(®,sizeof(struct stRegistro),1,ftemp);
fclose(ftemp);
fclose(*fa);
remove("alea.bak");
rename("alea.dat","alea.bak");
rename("alea.tmp","alea.dat");
*fa=fopen("alea.dat","r+b");
}



hola


aqui esta mi gran problema

gracias de antemano toni!!!!

106
C/C++ / Re: Ordenacion De Registros
« en: Miércoles 14 de Junio de 2006, 02:18 »
hola tonilope


estoy implementando tu ejemplo a mi codigo, pero tengo algo mal

angie_lozca@hotmail.com

saludos,

107
C/C++ / Re: Ordenacion De Registros
« en: Martes 13 de Junio de 2006, 23:11 »
gracias por su ayuda.


char nombre[50];
int digito[10];



void Listar2(long n, struct stRegistro *reg)
{
int i;
if(reg->valido!='S')
{
printf("[%6ld]%-50s",n,reg->nombre);
for(i=0;i<4;i++)
printf(",%4d",reg->digotp);
printf("\n");




lo que yo quiero ordenar es el nombre del registro no los datos del registro



asi es como lo muestro


printf("Nombre                             digito\n");

while(fread(®, sizeof(struct stRegistro), 1, fa))
      Listar(numero++, ®);
}while(!eof);



no se si me di entender y como veran algo novata, vdd:(

108
C/C++ / Re: Ordenacion De Registros
« en: Martes 13 de Junio de 2006, 21:51 »
Gracias la estoy checando.

109
C/C++ / Ordenacion De Registros
« en: Martes 13 de Junio de 2006, 20:52 »
Que tal compañeros!!!!


Alguien ah utilizado alguna función pre-definida para la ordenacion de registros trabajando con archivos en C++ y obviamente punteros.
en la imagen que anexo esta como estoy visualizando mis registros con los datos
los cuales quisiera ordenar alfabeticamente.



gracias chicos.

110
C/C++ / Re: Explicacion A Este Codigo
« en: Jueves 8 de Junio de 2006, 00:04 »
De antemano gracias chicos.

lo de un numero factorial si lo entiendo, y bueno ya entendi mas de esa función.
aunque lo razonare un poco mas para ver si me surgen dudas, por que ahorita tengo varias pero no se como explicarselas o decirlas :S.


Saludos y gracias por estas dos respuestas

111
C/C++ / Explicacion A Este Codigo
« en: Miércoles 7 de Junio de 2006, 23:32 »
Que tal chicos, me podrian apoyar a interpretar este codigo. en si la funcion de factorial.

como es obvio aun soy algo novata en la logica.


gracias chicos


#include <stdio.h>

float factorial(float N) {

if (N == 0) return 1;

else return N*factorial(N-1);
        }


main () {

float N;
       
                printf("\n CALCULO DE FACTORIALES \n");
                printf("\nIntroduzca un numero entero:\n");
               
                scanf("%f", &N);
       
                        printf("\El Factorial es %f", factorial(N));
                        exit(0);
}

112
Dudas informáticas / Re: Duda En Programación.
« en: Jueves 18 de Mayo de 2006, 00:31 »
Que tal chicos,.

bueno tambien primeramente tengo que definir ¿ que es un lenguaje funcional o programacion funcional?

gracias por su ayuda de antemano.:(

113
Dudas informáticas / Duda En Programación.
« en: Jueves 18 de Mayo de 2006, 00:15 »
!Que tal chicos!

Mi duda es la siguiente.


A que se refieren o que significa cuando se habla de :" ineficiencia en la ejecucion de los lenguajes funcionales o ineficiencia en la ejecucion de un lenguaje funcional."


saludos chicos, ojala puedan sacarme de mi duda

114
C/C++ / Re: Ayuda Y Gran Duda
« en: Sábado 15 de Abril de 2006, 04:41 »
Masiosare

Gracias chico

disculpen la tardanza de mi contestacion a sus respuestas.

pero pondre en practica el codigo y cuando tenga algo te voy a molestar mandandotelo para ver si es posible y me haces el favor de checarmelo:)


gracias chicos por sus respuestas.

115
C/C++ / Re: Ayuda Y Gran Duda
« en: Viernes 7 de Abril de 2006, 06:09 »
Gracias chico,,,,,,,,,

algo asi habia pensado pero no tan adentrado como tu idea.


ojala alguien pueda asesorarme, se que lo apropiado seria que postiera algun codigo, pero gracias por sus respuestas y al menos checar mi duda.

116
C/C++ / Ayuda Y Gran Duda
« en: Viernes 7 de Abril de 2006, 01:17 »
Que tal chicos

Necesito hacer un programa que me acepte cadenas con numeros impar de ceros y numeros par de unos, simulando asi  AFDs.

Aun estoy buscando que funciones utilizar para ir implementando el codigo.


Disculpen chicos si les hago perder el tiempo con esto pero aun soy muy novata:(


gracias

117
Metodologías de Programación / Expresiones Reguladas
« en: Jueves 2 de Marzo de 2006, 01:25 »
Que tal chicos

bueno no estoy segura si esta pregunta vaya en este foro, pero espero que si

ando buscando que es y para que son las expresiones reguladas en programacion o en los lenguajes de programacion.


De antemano les agradezco su atencion niños.

118
C/C++ / Re: Duda Con Estructura De Control
« en: Lunes 27 de Febrero de 2006, 22:39 »
Gracias juan lo tendre en cuenta

y perdonaran mi desconocimiento pero en realidad desconosco como formateo el codigo en tag,,

disculpa:(
soy muy novata


saludos

119
C/C++ / Duda Con Estructura De Control
« en: Lunes 27 de Febrero de 2006, 02:38 »
Que tal chicos
este es un menu, donde llamo a funciones  para mostrar un ejemplo de su funcionamiento de cada una.
El problema lo tengo cuando la quiero llamar a la funcion con el numero 10 en adelante. osea que cuando necesito teclear dos numeros.

gracias chicos por su atencion de antemano:)
p.d ya estoy de regreso en el foro:)

void main()

{

  char opc;
   do

{


 gotoxy(10,2);
 printf("Eligue una opcion\n");
 gotoxy(10,6);
 printf("para checar un ejemplo de lo que hace la funcion\n");

 gotoxy(5,10);                                          
 printf("1.- ISLOWER");    
 gotoxy(5,12);                                      
 printf("2.- ISUPPER");  
 gotoxy(5,14);                                      
 printf("3.- ISALNUM");    
 gotoxy(5,16);                                      
 printf("4.- ISDIGIT");    
 gotoxy(5,18);                                      
 printf("5.- TOUPPER");  
 gotoxy(5,20);                                        
 printf("6.- TOLOWER");    
 gotoxy(5,22);
 printf("7.-  ISXDIGIT");
 gotoxy(20,10);
 printf("8.-  ISCNRTRL");
 gotoxy(20,12);
 printf("9.-  ISGRAPH");
 gotoxy(20,14);
 printf("10.- ISPRINT");
 gotoxy(20,16);
 printf("11.- ISSPACE");
 gotoxy(20,18);
 printf("12.- ISPUNCT");
 gotoxy(20,20);
 printf("13.- STRCPY");
 gotoxy(20,22);
 printf("14.- STRCMP");
 gotoxy(35,10);
 printf("15.- STRCAT");
 gotoxy(35,12);
 printf("16 .-STRNCPY");
 gotoxy(35,14);
 printf("17.- STRLEN");
 gotoxy(35,16);
 printf("18.- STRRCHR");
 gotoxy(35,18);
 printf("19.- STRTOK");
 gotoxy(35,20);
 printf("20.- STRSTR");
 gotoxy(35,22);
 printf("21.- MEMCMP");
 gotoxy(50,10);
 printf("22.- MEMCPY");
 gotoxy(50,12);
 printf("23.- MEMSET");
 gotoxy(50,14);
 printf("24.- SALIR");

opc=getch();
   

 

 switch(opc)

{

      case '1':            
          islowerf();  
          break;      
      case '2':              
          isuper();    
          break;        
      case '3':                
          esnum();        
          break;          
      case '4':              
          esdigito();    
          break;          
      case '5':                
          touper();    
          break;        
      case '6':                                                    
          tololler();  
               break;        
      case '7':
          esxdigito();
          break;
      case '8':
               control();
          break;
      case '9':
          esgrafo();
          break;
      case '10':
          printer();
          break;
      case '11':
          espacio();
          break;
      case '12':
          espun();
          break;
      case '13':
          copiacadena();
          break;
      case '14':
               iguales();
          break;
      case '15':
               concatena();
               break;
      case '16':
               copiacadena2();
               break;
      case '17':
          longitud();
          break;
      case '18':
          buscar();
          break;
      case '19':
          dividir();
          break;
      case '20':
          busqueda2();
          break;
      case '21':
          memc();
          break;
      case '22':
          memcp();
          break;
      case '23':
          mems();
          break;

      case '24':
          printf("\n\nBye.!HASTA PRONTO!. \npresiona cualquier tecla");
                 getch();

         }


    }while(opc!='24');


     }

120
Java / Botones E Imagenes
« en: Viernes 2 de Diciembre de 2005, 05:11 »
que tal chicos

tengo una gran duda, eh andado buscando y me ha dejado mas confusa esta situacion
pero la duda es , como es la forma correcta de declarar una imagen en un boton.

Es decir que esa imagen me la tomoe como boton, para asi ponder utilizar los Mouselisttener y los MousemotionListenner


saludos

gracias de antemano

121
Java / Re: Movimientos Con El Raton
« en: Viernes 25 de Noviembre de 2005, 23:14 »
Gracias por sus respuestas a ambos.

pero bueno yo tenia pensando arrastrar la pieza y soltarla hasta el sitio que le corresponda.

ya mas o menos tengo idea con que metodos


pero la GRAN duda que tengo es que opciones, que parametros, o que tipo de operaciones hay en esos metodos para mover la pieza:

mouseDragged(MouseEvent){

//aquii es la duda
}

gracias y ojala puedan sacarme de esta laguna que tengo como duda.

122
Java / Movimientos Con El Raton
« en: Viernes 25 de Noviembre de 2005, 05:50 »
Que tal chicos

estoy implementando un pequeño ajedrez, ya tengo el tablero y las imagenes insertadas en mi Applet
Solo que tengo dudas, con los escuchas o las interfaces para mover mis imagenes/piezas con el mouse/raton. Encontre las siguientes:

MouseListener
mouseClicked(MouseEvent) Se ha pulsado un botón del ratón.
mousePressed(MouseEvent) Se ha presionado un botón del ratón.
mouseReleased(MouseEvent) Se ha soltado un botón del ratón.
mouseEntered(MouseEvent) El puntero del ratón ha entrado en el componente.
mouseExited(MouseEvent) El puntero del ratón ha salido del componente.

MouseMotionListener
mouseDragged(MouseEvent) El puntero del ratón ha cambiado de posición estando presionado uno de los botones.
mouseMoved(MouseEvent) El puntero del ratón ha cambiado de posición.
¿Cuales son las que necesito realmente y tambien realmente como las voy a implementar, cheque que el extends Adapter se usa en vez del implements para las clases?
como ven estoy algo confusa


saludos
ojala puedan ayudarme.

123
Java / Ajedrez
« en: Viernes 18 de Noviembre de 2005, 20:38 »
Hola chicos

saludos a todos

tengo hecho mi tablero de ajedrez en un applet de java
public class Tablero extends Applet {
   
   public void init() {
   }

   public void paint(Graphics g) {
      g.drawRect(0,0,400,400);
      for(int i=0; i<=350; i+=100)
         for(int j=0; j<=350; j+=100)
            g.fillRect(i,j,50,50);
      for(int i=50; i<=350; i+=100)
         for(int j=50; j<=350; j+=100)
            g.fillRect(i,j,50,50);



Me gustaria saber si alguien podria asesorarme con la insercion de las imagenes y mas que nada con el movimiento de las mismas. es una practica.


saludos chicos

124
Java / Ejemplo Con Funcion Reverse
« en: Miércoles 9 de Noviembre de 2005, 23:59 »
Que tal chicos

Tengo un ejercicio donde tengo que introducir 4 palabras o mas de esta manera

El niño corre lento
y asi ver sus permutaciones como:
el corre lento niño
lento corre el niño.

Buscando encontre esta función "REVERSE ()" que me altera el orden de una cadena segun lo que lei
alguien la eh utilizado?
yo trate de utilizarla en mi codigo

   
   TextField cuadro;
   TextArea resul;
   Button boto=new Button("Permutacion");
     
   
   public void init()
   {
 resul=new TextArea ();
 cuadro=new TextField(30);
 add(resul);
 add(cuadro);
 add(boto);
 boto.addActionListener(this);
       }
   
   public void actionPerformed(ActionEvent e){
   if(e.getSource()==boto){
      StringBuffer palabra= new  StringBuffer("");
      
      palabra=cuadro.getText();
      
      palabra.reverse();
      resul.append(""+palabra+"");
   
  }
}
}

saludos chicos y gracias por la ayuda que me han sabido orientar a mis primeros pasos en java

125
C/C++ / Lista Doble Enlazada
« en: Lunes 7 de Noviembre de 2005, 04:13 »
hola chicos,,
ojala me puedan asesorar..
es una lista enlazada y bueno al llenar los datos todo bien, al mandarlos a pantalla todo bien, pero cuando le doy la opcion que me los manda a pantalla recorriendo la lista hacia atras. ahi es el problema no me manda nada:(
#include <stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <alloc.h>

typedef struct persona
 {
   int numc;         /* Numero de control*/
   char nom[30];          /* Nombre del paciente */
   int  num;            /* Numero de afiliacion */
   int edad;               /* Edad del paciente */
   char enfe[30];         /* Enfermedad */
   struct persona *sig;
   struct persona  *ant;

 }nodo;

/* declaracion de apuntadores a NODO*/
  nodo *cola;
  nodo *cabeza;
  nodo *nuevo;

  /*FUNCIONES A UTILIZAR O HACER LLAMAR*/
void iniciar(void);
void altas();
void recibe (nodo* paciente);
void mostrar();
void mostrar1();
/* FUNCIONA PRINCIPAL */
void main ()
 {
   char opc;

do                                       /* MENU DE OPCION A REALIZAR*/
   {
      clrscr( );
      gotoxy(20,6);
      printf("******Bienvenido al  registro de un nuevo paciente******");
      //textcolor(BLUE);
      gotoxy(10,8);
      printf("**Presiona cualquier tecla para continuar y ver el menu**");
      //textcolor(BLUE);
      //textbackground(WHITE);
      getch();
      clrscr();
      gotoxy(30,8);
      printf("1.- Introduce datos del paciente");
      gotoxy(30,10);
      printf("2.- Visualizar los datos");
      gotoxy(30,12);
      printf("3.- Visualizar los datos hacia atras");
      gotoxy(30,14);
                printf("4.- Salir");
      opc=getch( );

                  /*switch que ejecuta opcion a realizar */
      switch(opc)
      {
         case '1':
            altas( );
            break;
         case '2':
            mostrar();
            break;
         case '3':
             mostrar1();
             break;
                        case '4':
            printf("\n\nBye.!HASTA PRONTO!. \npresiona cualquier tecla");
            getch();
           }
   }while (opc!='4');
}
    flushall(); /*LIMPIA VARIABLES de posible basura*/


 void altas ()
    {                                  /* funcion de altas y una variable*/
     nodo *tm;                         /*   temporal*/

     if (cabeza==NULL)
      {
      cabeza=(nodo*)malloc(sizeof(nodo));

      recibe (cabeza);

      printf ("!!!Dato Recibido!!");
      cabeza->sig=NULL;
      cola=cabeza;
      cabeza->sig =nuevo;
      }

     else
      {
       tm=(nodo*)malloc(sizeof(nodo));

      recibe ™;

      printf ("!!!Dato Recibido!!");

      tm->sig=cabeza->sig;
      cabeza->sig=nuevo;
      }
     }
                                /* funcion que muesrta los datos capturados */

void mostrar1()
   {
   nodo * tm;

   clrscr();
   tm=cabeza;

   while ™
      {
      printf("Nombre del paciente:%s\n",tm->nom);
      printf("Numero de control de expediente:%d\n",tm->numc);
      printf("Numero de afiliacion:%d\n",tm->num);
      printf("%Enfermedad que padece es:\n",tm->enfe);
      printf("Edad del paciente:%d\n",tm->edad);

      tm=tm->sig;
      }
    printf("\n\n\t");
   getch();


   }


 void mostrar()
   {
   nodo * tm;

   clrscr();
   tm=cabeza;

   while ™
      {
      printf("Nombre del paciente:%s\n",tm->nom);
      printf("Numero de control de expediente:%d\n",tm->numc);
      printf("Numero de afiliacion:%d\n",tm->num);
      printf("%Enfermedad que padece es:\n",tm->enfe);
      printf("Edad del paciente:%d\n",tm->edad);

      tm=tm->sig;
      }
    printf("\n\n\t");
   getch();


   }


void recibe (nodo* paciente)
 {
  printf ("\nNumero de expediente:\n ");
  scanf("%d",&(paciente->numc));
  printf ("Nombre del paciente: \n");
  scanf("%s",&(paciente->nom));
  printf ("\nNumero de afiliacion:\n");
  scanf ("%d",&(paciente->num));
  printf("\nEdad del paciente:\n");
  scanf("%d",&(paciente->edad));
  printf("\nPadecimiento o enfermedad del paciente:\n");
  scanf("%s",&(paciente->enfe));


   gotoxy(20,6);
   printf("\n\n\n");

 }


 void iniciar (void)
  {
   cola=cabeza=nuevo=NULL;
  }


presiento que voy a tener un gran ERROR verdad?

saludos chicos

Páginas: 1 ... 3 4 [5] 6 7