C/Visual C - urgente lista enlazada

 
Vista:

urgente lista enlazada

Publicado por javi (1 intervención) el 31/08/2008 00:44:32
Necesito realizar estos ejercicios pero no se resolver el último ¿alguien me podria decir como resolverlo? gracias por adelantado los dos primeros los pongo resueltos aqui abajo despues del enunciado

Ejercicio 1
Se desea crear un programa que genere contraseñas de forma aleatoria. Crear una función que
tenga dos parámetros. El primero será la longitud (número de caracteres) de la contraseña a
generar. El segundo será la cadena de caracteres generada.
Los caracteres que se pueden emplear para formar parte de la palabra de contraseña son las
letras mayúsculas, las minúsculas y las cifras numéricas. No se emplearán ni el carácter espacio,
ni las ñ’s, ni las letras con tilde.
Crear un programa conductor cuya única misión sea probar la ejecución de la función, para lo
que deberá pedir un número entero (4 ≤ n ≥ 20), llamar a la función con ese valor n y presentar
la contraseña generada. Utilice la función rand() para generar números aleatorios.
Ejercicio 2
Crear un programa que utilice la función anterior para crear un listado de usuarios, cada uno con
su correspondiente contraseña. El programa pedirá los siguientes datos:
Un número entero que representa el número de usuarios a crear
Un prefijo que se utilizará para crear los nombres de usuario.
Un número entero (4 ≤ n ≥ 20) que representa la longitud de la contraseña.
Un nombre de fichero para almacenar los datos.
Los datos se almacenarán en un fichero de texto a razón de uno por línea. Cada línea tendrá el
nombre de usuario, una coma y a continuación la contraseña generada.
Los nombres de usuario se crearán empleando el prefijo introducido por teclado, una barra de
subrayado, y un número de varias cifras. El número de cifras dependerá de la cantidad de
usuarios a crear de manera que todos tengan el mismo número de caracteres. Es decir, si se
piden 7 sólo se empleará una cifra, pero si se piden 36 se emplearán dos cifras y si se piden 124
se emplearán 3 y así sucesivamente. Veamos un ejemplo, piden (supongamos que como prefijo
se ha introducido la cadena “Cursoc_”, como número de usuarios a crear 124 y como número
de caracteres para la contraseña 6). El fichero resultante tendrá el siguiente contenido:
Cursoc_001,s6GRya
Cursoc_002,x8k2tv
...
Cursoc_003,BkTQ52
Como puede verse, para que todos los nombres de usuario tengan el mismo número de cifras se
han añadido ceros para aquellos que tienen un número de cifras menor que el máximo de ellos
(124).
Ejercicio 3
Crear una lista enlazada con asignación dinámica de memoria para almacenar los datos de
usuarios y contraseñas del ejercicio anterior. El programa creará la lista enlazada y
posteriormente la ordenará mediante una función que recibirá la lista desordenada y la
devolverá ordenada. La ordenación se realizará según el campo de contraseña, no el número de
usuario.

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

void funcion_contrasenya(int a, char *cad1);
int crear_usuario(int u, int tam, char *cad2, char *prefijo);
void escribir(char *cad1, char *cad2, FILE *lista);
int main(){
int a, u=1, tam, total;
char str_tam[10], cad1[21], cad2[21], prefijo[21], cad3[50], aux;
srand ( time(NULL) );
printf("Programa que genera lista de usuarios con contrasenyas. ");
printf("Introduce el numero de usuarios: ");
scanf("%d",&total);
printf("Introduce el prefijo para los usuarios: ");
scanf("%s", prefijo);
aux=strlen(prefijo);
prefijo[aux]='_';
prefijo[aux+1]='';
printf("Introduce el tamanyo de la contrasenya para generar (puede tener de 4 a 20 caracteres): ");
scanf("%d",&a);
while (a<4 || a>20) {
printf(" El tamanyo de contrasenya no es valido, vuelve a introducir otro (4-20) ");
scanf("%d",&a);
}
itoa(total,str_tam,10);
tam=strlen(str_tam);
FILE *lista;
lista=fopen("lista.txt", "wt");
while (u<=total) {
u=crear_usuario(u, tam, cad2, prefijo);
funcion_contrasenya(a, cad1);
escribir(cad1, cad2, lista);
}
fclose(lista);
printf(" Archivo generado");
getch();

}

void funcion_contrasenya(int a, char *cad1){
int b=0,x;
while(b<a){
x=(rand()%123);
if(x>=48&&x<=57||x>=65&&x<=90||x>=97&&x<=122){
cad1[b]=x;
b++;}
}
cad1[b]='';
}
int crear_usuario(int u, int tam, char *cad2, char *prefijo) {
char str_u[10];
int u_tam, i;
itoa(u, str_u, 10);
u_tam=strlen(str_u);
strcpy(cad2, prefijo);
i=strlen(cad2);
while (tam > u_tam) {
cad2[i]='0';
i++;
u_tam++;
if (tam == u_tam)
cad2[i]='';
}
strcat(cad2,str_u);
u++;
return u;
}
void escribir(char *cad1, char *cad2, FILE *lista) {
fputs(cad2,lista);
fputs(",",lista);
fputs(cad1,lista);
fputs(" ",lista);
}
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