que algien me ayude porfavo

sergioskull
24 de Febrero del 2005
hola soy de cd juarez y nesesito un programa en turbo c para hoy es muy sensillo solo que contenga un arreglo y una funcion


keni
24 de Febrero del 2005
disculpe la molestia necesito saber el nombre de la instruccion o sentencia que se utiliza para obtener el largo de una cadena de caracteres en un programa elaborado en borlan c, por favor me urge su respuesta

Pasante
24 de Febrero del 2005
#include <string.h>

int a= strlen("Hola");

jose
24 de Febrero del 2005
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <io.h>
#include <dos.h>
#include <string.h>

typedef struct datosAlumno
{
int legajo;
int dni;
char apellido [20];
char nombre [20];
char calle [30];
int numero;
char localidad [20];
int telefono;
}datosAlumno;

typedef struct nodoindice *punt;

typedef struct nodoindice
{
int legajo;
int direccion;
punt sig;
}nodoindice;


void ingreseEleccion ();
int buscaDireccion (int, char, int, punt*);
void imprimeArchivo(FILE*);
void actualizaRegistro (FILE*, punt*);
void agregaRegistro (FILE*, punt*);
void eliminaRegistro (FILE*, punt*);
void consultaRegistro (FILE*, punt*);
void cargarTablaIndices (punt* );
void guardarTablaIndices (punt* );
void listarArchivo(FILE *, punt*);
void limpiaArchivo(FILE *);
void top();
int cuentaAlumnos(punt*);




void main (void) // ----> main
{
textmode(64); // ---> EGA 43 filas o VGA 50 fialas
textbackground (1);
FILE *fdAlu;
char eleccion;
punt tablaIndices[100]; //DECLARACION DEL VECTOR PARA LA TABLA
for(int i=0; i<100; i++)
tablaIndices[i]= NULL; //INICIALIZAMOS LA TABLA EN NULL

if (access("alumnos.dat", 0)==0)//VERIFICA LA EXISTENCIA DEL ARCHIVO
fdAlu = fopen("alumnos.dat", "r+"); //SI EXISTE LO ABRE
else
fdAlu = fopen("alumnos.dat", "w+"); //SI NO EXISTE LO CREA

if (fdAlu == NULL) //VERIFICAMOS QUE EL ARCHIVO ABRE BIEN
{
textbackground (12);
cprintf ("No se puede abrir el archivo Alumnos.dat");
getch();
}
else
{
cargarTablaIndices(tablaIndices);//CARGAMOS LA TABLA
clrscr();
top();
textcolor(3);
gotoxy(5, 16); cprintf ("INTEGRANTES:");
gotoxy(8, 19); cprintf ("Gallardo Jorge");
gotoxy(8, 22); cprintf ("Sosa Victor");
gotoxy(5, 48); cprintf ("Presione una tecla para continuar...");
getch();
ingreseEleccion();
while ((eleccion= getche()) != '7')
{
switch (eleccion)
{

case '1': agregaRegistro (fdAlu, tablaIndices); break;
case '2': listarArchivo(fdAlu, tablaIndices);break;

case '3': actualizaRegistro (fdAlu, tablaIndices); break;

case '4': eliminaRegistro(fdAlu, tablaIndices); break;
case '5': consultaRegistro(fdAlu, tablaIndices); break;
case '6': imprimeArchivo (fdAlu); break;
default: {
gotoxy(5, 32);
cprintf ("Ingrese correctamente la opcion");
getch();
}
}
ingreseEleccion();
}

}
limpiaArchivo(fdAlu);
guardarTablaIndices(tablaIndices);

if((fclose(fdAlu))==0)
{
textcolor(6);
gotoxy(5, 48);
cprintf ("El archivo de alumnos cerro OK aaa");
getch();
}

if(cuentaAlumnos(tablaIndices) == 0)
{
unlink("alumnos.dat");
unlink("indice.dat");
}
}









void cargarTablaIndices(punt tablaIndices[100]) // ---> carga tabla
{
FILE *fdTabla;
nodoindice ni;
int leg=0;

if (access("indice.dat", 0)==0) //VERIFACAMOS SI EXISTE EL ARCHIVO PARA:
{

fdTabla = fopen("indice.dat", "r+"); //ABRIRLO
fseek(fdTabla, 0, 0); //NOS POSICIONAMOS AL COMIENZO DEL ARCHIVO INDICES
while(! feof(fdTabla))
{
fread(&ni, sizeof(nodoindice), 1, fdTabla);

if((ni.legajo>0)&(ni.legajo != leg))
{
buscaDireccion(ni.legajo,'a',ni.direccion, tablaIndices);
//LE DAMOS UNA ENTRADA EN LA TABLA
leg=ni.legajo;
}
}
fclose(fdTabla);
}
}








void ingreseEleccion (void) // -->> Funcion ingrese eleccion
{

clrscr();
top();
textcolor (6);
gotoxy(5, 14); cprintf ("Opciones:");
gotoxy(7, 18); cprintf ("1- Agregar un nuevo registro");
gotoxy(7, 20); cprintf ("2- Listar el Archivo");
gotoxy(7, 22); cprintf ("3- actualizaRegistro");
gotoxy(7, 24); cprintf ("4- Eliminar un registro");
gotoxy(7, 26); cprintf ("5- Consulta un registro");
gotoxy(7, 28); cprintf ("6- imprimeArchivo");
gotoxy(7, 30); cprintf ("7- Fin del programa");
gotoxy(5, 34); cprintf ("Ingrese opcion: ");

}


void top (void) // -->> Funcion top
{
textcolor(15);
gotoxy(22,5);
cprintf ("*************************************");
gotoxy(22,6);
cprintf ("FINAL DE PROGRAMACION ESTRUCTURADA II");
gotoxy(22,7);
cprintf ("*************************************");
}







void agregaRegistro (FILE *fdAlu, punt tablaIndices[100]) //---->>> agrega Registro
{
datosAlumno alumno;
int dir;
int pos;
int leg;
clrscr();
gotoxy(5, 14); cprintf ("Completar los siguientes datos del alumno:");
gotoxy(7, 17); cprintf ("Ingrese un nuevo numero de legajo(0001 0001-9999 9999): ");
cin>>leg;
if (buscaDireccion(leg, 'c', -1, tablaIndices) >= 0) //verifica
// que el registro no exista
{cout<<"El legajo numero: "<<leg<<" ya contiene informacion.n";
getch();
}
else
{
//SE CARGAN TODOS LOS DATOS DEL NUEVO ALUMNO
alumno.legajo=leg;
textcolor (8);

gotoxy(7, 19); cprintf ("Apellido: ");
cin>>alumno.apellido;
gotoxy(35, 19); cprintf ("Nombre: ");
cin>>alumno.nombre;
gotoxy(7, 23); cprintf ("DNI: ");
cin>>alumno.dni;
gotoxy(7, 25); cprintf ("Domicilio");
gotoxy(9, 27); cprintf ("Calle: ");
cin>>alumno.calle;
gotoxy(35, 27); cprintf ("Numero: ");
cin>>alumno.numero;
gotoxy(50, 27); cprintf ("Localidad: ");
cin>>alumno.localidad;
gotoxy(7, 28); cprintf ("Telefono: ");
cin>>alumno.telefono;








if(fseek(fdAlu, 0, 2)== 0) //BUSCAMOS EL FINAL DEL ARCHIVO ALUMNOS
{
pos = ftell(fdAlu); //GUARDAMOS LA DIRECCION EN QUE VAMOS A GRABAR
dir=pos/sizeof(datosAlumno);
if(fwrite(&alumno,sizeof(datosAlumno),1,fdAlu)>0)
buscaDireccion(alumno.legajo,'a',dir, tablaIndices);
//LE DAMOS UNA ENTRADA EN LA TABLA
else
cout<<"ERROR DE ESCRITURAn";
}
else
cout<<"ERROR DE BUSQUEDAn";
}
}


int buscaDireccion( int leg, char tipo, int dir, punt tablaIndices[100]) // ---> busca direccion
{
punt n, ant, aux;
int clave = leg % 100;
n= tablaIndices[clave];
if (tipo=='a') //PARA ALTAS CREAMOS UN NUEVO NODO Y LO CARGAMOS
{
aux=n;
punt r = new nodoindice;
r->legajo= leg;
r->direccion= dir;
tablaIndices[clave]=r;
r->sig =aux;
}
else //PARA EL RESTO DE LOS CASOS COMENZAMOS CON UNA RUTINA DE BUSQUEDA
//DEL NUMERO DE LEGAJO
{
while ((n!= NULL) && (n->legajo!=leg))
{
ant=n;
n=n->sig;
}
if (n!= NULL) //EN CASO DE HABER ENCONTRADO EL LEGAJO
{
if (tipo=='b') //PARA BAJAS DESENGANCHAMOS y ELIMINAMOS EL NODO
{
dir=n->direccion;
if (tablaIndices[clave] == n)
tablaIndices[clave] = n->sig;
else
ant->sig = n->sig;
delete n;

}
else
{
if (tipo=='o') //PARA ORDENAMIENTO EN CASO DE BAJAS LE CAMBIAMOS
//LA DIRECCION
n->direccion=dir;
else
{
if ((tipo =='c') || (tipo=='m')) //PARA CONSULTAS O MODIFICACION
dir=n->direccion;
}
}
}
else //PARA EL CASO EN QUE NO SE ENCUENTRE EL LEGAJO
dir=-1;
}
return(dir);
}




void listarArchivo(FILE *fdAlu, punt tablaIndices[100]) // ---->> listar archivo
{



if(cuentaAlumnos(tablaIndices)!=0)
{
datosAlumno alumno;
int leg=0;
cout<<"LISTADO DE ALUMNOS"<<endl;
cout<<"-------------------------------------n";

if((fseek( fdAlu, 0, 0))==0)
{
while (!feof(fdAlu))
{

fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo!=0)&&(alumno.legajo !=leg))
{
leg=alumno.legajo;
cout<<"El legajo numero: "<< alumno.legajo<<" contiene la siguiente informacion:n";
cout<<"Apellido: "<< alumno.apellido<<"n";
cout<<"Nombre: "<< alumno.nombre<<"n";
cout<<"DNI: "<< alumno.dni<<"n";
cout<<"Direccion: "<< alumno.calle<<" " << alumno.numero <<"n";
cout<<"Localidad: "<< alumno.localidad<<"n";
cout<<"Telefono: "<< alumno.telefono<<"n";
cout<<"----------------------------------n";

getch();
}
}
}
}
else
{
cout<<"vacio";
getch();
}
}


void actualizaRegistro(FILE *fdAlu, punt tablaIndices[100]) // --->> actualiza registro
{
datosAlumno alumno;
int leg;
int dir;
char resp;

cout<<"Ingrese el numero de legajo a modificar(0001 0001-9999 9999):";
cin>>leg;
if ((dir = buscaDireccion(leg,'m',1, tablaIndices))< 0)
//verifica que el legajo exista
{
cout<<"El legajo numero: "<< leg <<" no contiene informacion.n";
getch();
}
else
{
fseek(fdAlu,dir*sizeof(datosAlumno), 0);
fread(&alumno, sizeof(datosAlumno), 1, fdAlu); //hace una lectura
cout<<"Modifica Apellido (s/n):n";
cin>>resp;
if (resp== 's')
{
cout<<"Ingrese nuevo Apellido:n";
cin>>alumno.apellido;
}
cout<<"Modifica Nombre (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Nombre:n";
cin>>alumno.nombre;
}
cout<<"Modifica DNI (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo DNI:n";
cin>>alumno.dni;
}
cout<<"Modifica Domicilio (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Domicilio:n";
cin>>alumno.calle;
cin>>alumno.numero;
}
cout<<"Modifica Localidad (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Localidad:n";
cin>>alumno.localidad;
}
cout<<"Modifica Telefono (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Telefono:n";
cin >> alumno.telefono;
}
fseek(fdAlu,dir*sizeof(datosAlumno),SEEK_SET);
fwrite(&alumno,sizeof(datosAlumno),1,fdAlu);
}
}



void eliminaRegistro(FILE *fdAlu, punt tablaIndices[100] ) // ----> elimina registro
{
int leg;
int dir;
datosAlumno p;
datosAlumno alumno={0,0,"","","",0,"",0};
cout<<"Ingrese numero de legajo que desea dar de baja(0001 0001-9999 9999): ";
cin>>leg;
// alumno.dni=leg; //conservo el nro de legajo eliminado para la "limpieza"
if((dir=buscaDireccion( leg, 'b', -1, tablaIndices)) !=-1)
{
fseek(fdAlu, dir*sizeof(datosAlumno), SEEK_SET); //busco el registro a eliminar
fread(&p,sizeof(datosAlumno),1,fdAlu);
if(alumno.legajo == leg)
{
cout<<"tabien";
getch();
}
fwrite(&alumno, sizeof(datosAlumno),1,fdAlu); //sobrescribo el registro
cout<<"Legajo Eliminado "<<leg;
getch();
}
else
{
cout<<"Legajo Inexistente "<<leg;
getch();
}
// limpiaArchivo(fdAlu);
// guardarTablaIndices(tablaIndices);
// cargarTablaIndices(tablaIndices);
}






void consultaRegistro (FILE *fdAlu, punt tablaIndices[100]) // ----> consulta registro
{
datosAlumno alumno;
int leg;
int dir;
cout<<"Ingrese el numero de legajo a consultar(0001 0001-9999 9999):";
cin>>leg;
if ((dir = buscaDireccion(leg,'c',-1, tablaIndices))<0)
//verifica que el legajo exista
{
cout<<"El legajo numero: "<< leg <<" no contiene informacion.n";
getch();
}
else
{
if((fseek(fdAlu,dir*sizeof(datosAlumno), 0))==0)
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu); //hace una lectura

cout<<"El legajo numero: "<<leg<<" contiene la siguiente informacion:n";
cout<<"Apellido: "<<alumno.apellido<<"n";
cout<<"Nombre: "<<alumno.nombre<<"n";
cout<<"DNI: "<<alumno.dni<<"n";
cout<<"Direccion: "<<alumno.calle<<" "<<alumno.numero<<"n";
cout<<"Localidad: "<<alumno.localidad<<"n";
cout<<"Telefono: "<<alumno.telefono<<"n";
getch();
}
}
}


void limpiaArchivo(FILE *fdAlu) // ----> limpia archivo
{
FILE *fdAuxiliar;
int leg=0;
datosAlumno alumno;

fdAuxiliar = fopen("auxiliar.dat", "w");
fseek( fdAlu, 0, 0);
fseek( fdAuxiliar, 0, 0);

while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo>0)&(alumno.legajo !=leg))
{
leg=alumno.legajo;
fwrite(&alumno,sizeof(datosAlumno), 1, fdAuxiliar);
}
}
fclose(fdAlu);
fclose(fdAuxiliar);
fdAuxiliar = fopen("auxiliar.dat", "r+");
fdAlu = fopen("alumnos.dat", "w"); //REESCRIBIMOS EL ARCHIVO
fseek( fdAlu, 0, 0);
fseek( fdAuxiliar, 0, 0);

while (!feof(fdAuxiliar))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAuxiliar);
fwrite(&alumno,sizeof(datosAlumno), 1, fdAlu);
}
fclose(fdAuxiliar);
unlink ("auxiliar.dat");
/* fdAuxiliar = fopen("auxiliar.dat", "w"); //le ponemos otro fopen w y volvemos a cerrarlo
//para que quede vacio y no ocupe lugar
fclose(fdAuxiliar); */
}




void guardarTablaIndices(punt tablaIndices[100]) //---------->>> guarda tabla indice
{
nodoindice ni; //NODO DEL TIPO QUE COMPONEN LA LISTA
punt r; //DECLARACION DE PUNTERO PARA RECORRER LAS LISTAS
FILE* fdTabla;
fdTabla = fopen("indice.dat", "w+"); //SOBREESCRIBIMOS
fseek(fdTabla, 0, 0); //NOS POSICIONAMOS AL COMIENZO DEL ARCHIVO INDICES
for(int i=0; i<100; i++) //RECORREMOS UNA A UNA LAS ENTRADAS DE LA TABLA
{
if(tablaIndices[i]!=NULL) //RECORREMOS LAS ENTRADAS
{
ni.legajo=tablaIndices[i]->legajo;
ni.direccion=tablaIndices[i]->direccion;
r =tablaIndices[i]->sig;
fwrite(&ni, sizeof(nodoindice), 1, fdTabla);
while (r!=NULL) //RECORREMOS LOS NODOS DE LA LISTA
{
ni.legajo=r->legajo;
ni.direccion=r->direccion;
ni.sig=NULL;
r =r->sig;
fwrite(&ni, sizeof(nodoindice), 1, fdTabla);
}
}
}
if((fclose(fdTabla))== 0)
{
textcolor(6);
gotoxy(5, 47);
cprintf ("El archivo tabla cerro OK");
}

}


void imprimeArchivo(FILE *fdAlu)
{
datosAlumno alumno;
int leg=0;
FILE *impresora;
impresora= fopen("LPT1", "w"); //abrimos el archivo LPT1 (impresora)
if (impresora==NULL)
cout<<"Error de impresión"<<endl;
else
{
fprintf(impresora, "--------------------------------------n"
"FINAL DE PROGRAMACION ESTRUCTURADA IIn"
"MARZO 2002n"
"----------------------------------------n"
"ARCHIVO ALUMNOSn"
"INTEGRANTES:n"
" LEGAJO DNI APELLIDO NOMBRE DIRECCIÓN LOCALIDAD TELEFONOn");
if((fseek( fdAlu, 0, 0))==0)
{
while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo >0)&(alumno.legajo !=leg))
{
fprintf(impresora," %-2d %-2d %-2s %-2s %-2s %-2d %-2s %-2dn",
alumno.legajo, alumno.dni, alumno.apellido, alumno.nombre,
alumno.calle, alumno.numero, alumno.localidad, alumno.telefono);
leg=alumno.legajo;
}
}
}
}}



int cuentaAlumnos(punt tablaIndices[100])
{
int cantalumnos=0;
for(int i=0; i<100; i++)
{ if (tablaIndices[i]!=NULL)
if (tablaIndices[i]->legajo!=0)
cantalumnos++;
}

return(cantalumnos);
}