|
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.
Temas - tomario
Páginas: [1]
1
« en: Viernes 31 de Diciembre de 2010, 11:56 »
hola en clase me han dado este codigo y tengo que meterlo en una funcion, cualquier ayuda que me puedan dar o como debo empezar, llevo dos dias y no he conseguido nada, gracias #include <stdio.h> #ifndef _LINKEDLIST_H_ #define _LINKEDLIST_H_ #ifndef _POLYGONSTRUCT_H_ #define _POLYGONSTRUCT_H_ #include <GL/gl.h> #define MAXVERTS 32 typedef struct poly_struct { int type; /* E.g., 0=SQUARE, 1=POLY, 2=RECT, ... */ GLint numVerts; /* # of vertices in polygon */ GLdouble v[MAXVERTS][2]; /* Polygon's vertex array: */ /* v[i][0] = vertex i's x-coord; */ /* v[i][1] = vertex i's y-coord */ GLdouble center[2]; /* Polygon's "center" point, for use in */ /* rotating polygon */ GLdouble rot_angle; /* Rotation angle for polygon (degrees) */ GLdouble rgb[3]; /* Polygon's color: 0.0=off, 1.0=max; */ /* rgb[0]=red, [1]=green, [2]=blue */ } Polygon; #endif typedef struct polygon_list_struct { Polygon p; struct polygon_list_struct *next, /* Pointers to next, prev polygons */ *prev; /* in the doubly-linked list */ } Polygon_list_node; #endif /* * Global pointers for the linked list: */ Polygon_list_node *head = NULL, /* Pointer to the head of the list */ *curr = NULL, /* Pointer to the currently selected node */ *tail = NULL; /* Pointer to the tail of the list */ void InsertAfter(Polygon_list_node *item, Polygon_list_node *afterMe) { /* * Inserts *item after *afterMe in the linked list: */ if (afterMe == NULL) { if (head == NULL && tail == NULL) { /* empty list */ head = tail = item; item->prev = item->next = NULL; } else fprintf(stderr ,"InsertAfter: cannot insert after a NULL ptrn"); return; } item->prev = afterMe; if (afterMe == tail) { tail = item; item->next = NULL; } else { item->next = afterMe->next; item->next->prev = item; } afterMe->next = item; } void InsertBefore(Polygon_list_node *item, Polygon_list_node *beforeMe) { /* * Inserts *item before *beforeMe in the linked list: */ if (beforeMe == NULL) { if (head == NULL && tail == NULL) { /* empty list */ head = tail = item; item->prev = item->next = NULL; } else fprintf(stderr ,"InsertBefore: cannot insert before a NULL ptrn"); return; } item->next = beforeMe; if (beforeMe == head) { head = item; item->prev = NULL; } else { item->prev = beforeMe->prev; item->prev->next = item; } beforeMe->prev = item; } void RemoveItem(Polygon_list_node *item) { /* * Removes *item from the linked list (but doesn't free() it): */ if (item == NULL) /* Should print out an error message */ return; if (item == head && item == tail) { /* Only one element in the list */ head = tail = NULL; } else if (item == head) { item->next->prev = NULL; head = item->next; } else if (item == tail) { item->prev->next = NULL; tail = item->prev; } else { item->prev->next = item->next; item->next->prev = item->prev; } item->prev = item->next = NULL; }
2
« en: Jueves 30 de Diciembre de 2010, 19:22 »
hola tengo 2archivos con extension c( a.c y b.c) y tambien tengo dos archivos con extension h (c.h y d.h) como hago para compilarlos todos, estan escritos en c y compilo en linux, gracias
3
« en: Martes 14 de Diciembre de 2010, 21:05 »
hola como hago para enviar un vector de un cliente a un servidor y del servidor al cliente?? programar en c bajo linux gracias
4
« en: Viernes 10 de Diciembre de 2010, 23:24 »
hola he hecho el siguiente codigo de socket, en el que el cliente envia un archivo al servidor con unos numeros y este se los devuelve ordenados en otro archivo. he hecho la comuncicacion y el cliente le envia el archivo por lineas. lo que no se hacer es como coger los numeros de las lineas que va enviando y pasarlas a un vector. ordenarlos si que se, y luego como se los devuelvo?? archivo a ordenar: 312;243;344; 625;166;577;88;4; 634;99;111;
servidor: /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- S E R V I D O R -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/wait.h> #include <signal.h> #include<ctype.h> #define MYPORT 3490 // Puerto al que conectarán los usuarios #define MAXBUFLEN 200 // Maximo de caracteres para el buffer #define BACKLOG 10 // Conexiones pendientes en cola #define MAX 100 int longitud;//LONGITUD DE LA CADENA ENTRADA char salida[MAX];//SALIDA YA CONVERTIDA A LETRAS char actual[MAX];//VALOR DEL NUMERO ACTUAL char actualposterior[MAX];//VALOR DEL NUMERO POSTERIOR char revisada[MAX]; //LA ENTRADA UNA VEZ REVISADA PARA Q EL USUARIO NO ENTRE LETRAS void num_letra(char revisada[]); //FUNCION Q "TRADUCE" AL CASTELLANO int sockfd; // El servidor escuchara por sockfd int newfd; // las transferencias de datos se realizar mediante newfd char buf[MAXBUFLEN];// buffer para recivir o enviar datos struct sockaddr_in my_addr; // contendra la direccion IP y el numero de puerto local struct sockaddr_in their_addr;//Contendra la direccion IP y numero de puerto del cliente socklen_t sin_size;//Contendra el tamaño de la escructura sockaddr_in char *token = NULL; char vector [MAX]; int cont,loop,a; void crear_socket(); void atributos(); void socket_name(); void escuchar(); void aceptar(); void recibir(); void enviar(char cadena[]); void crear_socket()//se crea el medio por el cual se va a realizar la comunicación: { //AF_INET = Dominio donde se realiza la conexión.( unidos mediante una red TCP/IP). //SOCK_STREAM = Uso del protocolo TCP //0 = selecciona el protocolo más apropiado if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)//Crea el socket y verifica si hubo algun error { } } void atributos() // Asignamos valores a la estructura my_addr para luego poder llamar a la funcion bind() { my_addr.sin_family = AF_INET; //Se sa un servidor Stream (Protocolo TCP) my_addr.sin_port = htons(MYPORT); //se asigna el puerto por el que se va a escuchar (3490) my_addr.sin_addr.s_addr = INADDR_ANY; // se usa la IP local bzero(&(my_addr.sin_zero), 8); // rellena con ceros el resto de la estructura } void socket_name()//Le asignamos un nombre al socket, para recivir conexiones { if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { } } void escuchar()// Habilitamos el socket para recibir conexiones, con una cola de 10 conexiones en espera como maximo (BACKLOG) { if (listen(sockfd, BACKLOG) == -1) { } } void aceptar()//accept = Se utiliza en el servidor, con un socket habilitado para recibir conexiones { sin_size = sizeof(struct sockaddr_in); //Se espera por conexiones if ((newfd = accept(sockfd, (struct sockaddr *)&their_addr,&sin_size)) == -1) { exit(1); // Si se produce un error se finaliza el programa } printf("server: conexion desde: %sn", inet_ntoa (their_addr. sin_addr)); } void recibir() { if ((recv(newfd, buf, MAXBUFLEN, 0)) == -1)// buf = tipo de funcion a realizar { } } void enviar(char cadena[]) { if (send(newfd, cadena, MAXBUFLEN, 0) == -1)//envia el resultado de la conversion de numero a letras } int main()//metodo principal { crear_socket(); atributos(); socket_name(); escuchar(); while(1) // ciclo para llamar accept { cont=0; // Llamamos a fork() para crear un proceso hijo que atendera a la conexion recien establecida aceptar(); if (!fork()) { //comienza el proceso hijo y enviamos los datos mediante newfd recibir();//el servidor recive que tipo de funcion tiene que realizar int a; if (strcmp (buf ,"1") == 0)//1 = InitCap { cont=0;//cuenta las lineas que va recibiendo el servidor send(newfd, "", 1, 0);//+++++++++ recibir();// se recibe la cantidad de lineas que tiene el archivo que abrió el cliente printf("lineas a procesar: %sn",buf ); loop = atoi(buf );//loop tiene la cantidad de lineas que tiene el archivo que abrió el clientesend(newfd, "", 1, 0);//+++++++++ while(cont < loop)//el ciclo se repite el numero de lineas que tenga el archivo enviado por el cliente { cont++;//aumenta el contador de lineas recibir();//se reciben las lineas /* AQUI NECESITO COGER LOS NUMEROS PASARLOS A UN VECTOR CUANDO HAYA PASADO TODAS LAS LINEAS Y TENGA TODOS LOS NUMEROS ORDENAR EL VECTOR*/ } /*ESTO ORDENA EL VECTOR*/ int temp; int j; for(i=0; i<(a-1); i++) { for (j=i+1; j<a; j++) { if(vector[j]<vector[i]) { temp=vector[j]; vector[j]=vector[i]; vector[i]=temp; } } } /* AQUI DEBO ENVIAR EL VECTOR AL CLIENTE SEPARANDO LOS NUMEROS POR ;*/ close(newfd); } close(newfd); } }
cliente: /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- C L I E N T E -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <iostream> #define PORT 3490 // puerto al que vamos a conectar #define MAXBUFLEN 100 // Maximo de caracteres para el buffer #define MAX 100 using namespace std; char num[10],opcn[1]; int sockfd, numbytes; char buf[MAXBUFLEN]; struct hostent *he; struct sockaddr_in their_addr; // información de la dirección de destino size_t len; FILE *archivo; FILE *archivo2; char name[MAX],name2[MAX];; char linea[MAX]; int cont_line; char loop[100]; void crear_socket(); void menu(); void conectar(); void atributos(); void host_name(char *argv[]); void enviar_opcion(); void enviar(char cadena[]); void recibir(); void enviar_lineas(); void enviar_lineas()//enviar lineas del archivo, para que el servidor las procese { cont_line=-1;//contador de lineas del archivo while(!feof(archivo ))//recorro el archivo, hasta llegar al final de este { fgets(linea ,1000,archivo );//agarro cada linea del archivo cont_line++;//contador de lineas del archivo } sprintf(loop ,"%d",cont_line );//paso el valor entero de cont_line a loop, que es de tipo char[10] enviar(loop);//envío la cantidad de lineas al servidor, osea: tamaño que va a durar la conversación entre el servidor y el cliente recibir();//++++++++++ archivo =fopen(name ,"r");//vuelvo a abrir el archivo pq el puntero quedó al final de este archivo2 =fopen(name2 ,"w+");//abro el archivo donde voy a guardar el resultado while(!feof(archivo ))//recorre todo el contenido del archivo { fgets(linea ,1000,archivo );//agarra toda una linea del txt con un maximo de 1000 caracteres { enviar(linea);//envio las lineas al servidor recibir();//recibo las lineas ya modificadas por el servidor fprintf(archivo2 ,"%s",buf );//guardo en el archivo2 las lineas modificadas } } //se cierran los archivos } void menu() { int opc; switch(opc) { case 1://archivos printf ("n Escriba el nombre del archivo que desea abrir: "); scanf("%s", &name );//se guarda en name el nombre del archivo de texto strcat(name ,".txt");//se añade ".txt" en la última línea de name, para establecer la extensión strcat(name2 ,".txt");//se añade ".txt" en la última línea de name, para establecer la extensión archivo =fopen(name ,"r");//se abre el archivo con el modo "r"(solo lectura y debe existir previamente)recibir();//+++++++++++ enviar_lineas(); case 2://salir break; } } void host_name(char *argv[])//Se utiliza para convertir un nombre de un host a su dirección IP { if ((he=gethostbyname(argv[1])) == NULL) { } } void crear_socket()//se crea el socket para comunicarse con el servidor { if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { } } void conectar()// nos conectamos con el servidor { if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1) { } } void atributos()//definimos el tipo de transferencia,puerto y la ip con la que nos vamos a comunicar { len = sizeof(struct sockaddr_in); their_addr.sin_family = AF_INET; // Ordenación de bytes de la máquina their_addr.sin_port = htons(PORT); // short, Ordenación de bytes de la red their_addr.sin_addr = *((struct in_addr *)he->h_addr);// se pasa la direccion ip al socket memset(&(their_addr. sin_zero), 8, len ); // poner a cero el resto de la estructura } void enviar(char cadena[])//envio de datos { if ((send (sockfd , cadena , strlen(cadena ), 0)) == -1) { } } void recibir()//resibir datos { if ((numbytes=recv(sockfd, buf, MAXBUFLEN, 0)) == -1) { } } int main(int argc, char *argv[])//metodo principal del programa { if (argc != 2) { fprintf(stderr ,"usaste solo: %d argumento, escribe también el nombre del servidorn",argc ); } host_name(argv); crear_socket(); atributos(); conectar(); menu(); close(sockfd); return 0; }
5
« en: Viernes 10 de Diciembre de 2010, 19:52 »
hola vi un programa en c++ y lo quiero pasar a c y esto es lo que no se a que equivale:
Código:
cout << "Escriba el nombre del archivo que desea abrir: "; cin >> name;//se guarda en name el nombre del archivo de texto
Código:
printf ("n Escriba el nombre del archivo que desea abrir: "); scanf("%c",name);//se guarda en name el nombre del archivo de texto
6
« en: Miércoles 8 de Diciembre de 2010, 13:09 »
hola. haber si en este caso me pueden ayudar tengo un programa en c, bajo linux cojo un archivo en el que hay unos numeros separados por ; y los quiero ordenar, como lo hago?? en el archivo por ejemplo viene asi: 4;65;67; 54;3;988;676; 23;986;
y los quiero ordenar, como lo hago?? AYUDAAA!!!! gracias
7
« en: Viernes 3 de Diciembre de 2010, 17:57 »
hola, me gustaria hacer un programa en el que un servidor atiende a 3 clientes(atencion por semaforos), cuand atiende a un cliente, el servidor le pide una serie de numeros y el cliente se los da o por teclado o por medio de un archivo, lueg el servidor los coloca por orden y le devuelve al cliente un fichero con los numeros colocados, hora y el tiempo que tardo en hacerlo.luego puede seguir con este cliente o atender a otro para hacer la misma operacion.
nunca he programado este tipo de cosas, cualquier idea o ejemplillo que me puedan dar para ir empezando, seria de gran ayuda. muchas gracias
8
« en: Martes 9 de Noviembre de 2010, 20:12 »
hola hice un programa normal que calcula escanos y lo quiero simplificar usando funciones, punteros,etc, pero no se hacerlo he intentado lo siguiente, es la primera vez que uso funciones, espero q m puedan ayudar, gracias codigo original, sin funciones: [list] #include<stdio.h> #include <stdlib.h> #include <math.h> main() { int partidos=0; printf("nn Bienvenido al sistema de calculo de escanos.n por favor siga las instrucciones, graciasn"); while ( partidos <2 || partidos>16){ printf("n eliga el numero de partidos politicos que desea (numero entre 2 y 16)t"); } /*system('clear');*/ int mpartidos[17][50]; float votos; int i; int f; int c; for (f=0;f<partidos;f++){ for (c=0;c<50;c++){ mpartidos[f][c]=0; } } int escanos=0; while (escanos<7 || escanos>100){ printf("n numero de escanos:(numero entre 7 y 100)t"); } /*system('clear');*/ int a=0; printf("n A continuacion meta los votos recibidos por cada partido:n"); for (i=0;i<partidos;i++){ a=i+1; mpartidos[i][0]=votos; } printf("nn Ahora el programa calculara los escanos segun estos 4 metodos:n n HAMILTON n n D'HONT n n LAGUE n n HILL-HUNTINGTON n n"); int TAM=100; /*METODO DHONT*/ float mdhont[17][1000]; float aq; int fil; int col; float cl; for (fil=0;fil<partidos;fil++){ cl=0; for (col=0;col<TAM;col++){ aq=(mpartidos[fil][0])/(cl+1); mdhont[fil][col]=(aq); cl++; } } float mx=0; int aa,bb; for(i=0;i<escanos;i++){ for (fil=0;fil<partidos;fil++){ for (col=0;col<TAM;col++){ if (mdhont[fil][col]>mx){ mx=mdhont[fil][col]; aa=fil; bb=col; } } } mdhont[aa][bb]=0; mx=0; mpartidos[aa][1]=mpartidos[aa][1]+1; } /*system("clear");*/ /*fin metodo DHONT*/ int z; for (i=0; i<partidos; i++) { z=i+1; printf("n partido%d %d",z ,mpartidos [i ][1]); } } [/list]
------------------------------------------------------------------------------------------------------------------------------- y este es con funciones, q estara fatal hecho:---------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------- [list] #include<stdio.h> #include <stdlib.h> #include <math.h> void traspaso(float *metodo1,float aux,int p,int T){ int fil; int col; float cl=0; for (fil=0;fil<p;fil++){ cl=0; for (col=0;col<T;col++){ *metodo1=(aux); cl++; } } return ; } void max_escans(float *metodo2,float mpart,int esca,int p,int T){ int fil; int col; int i; float mx=0; int aa,bb; for(i=0;i<esca;i++){ for (fil=0;fil<p;fil++){ for (col=0;col<T;col++){ if (*metodo2>mx){ mx=*metodo2; aa=fil; bb=col; } } } metodo2=0; mx=0; mpart=mpart+1; } } main() { int partidos=0; printf("nn Bienvenido al sistema de calculo de escanos.n por favor siga las instrucciones, graciasn"); while ( partidos <2 || partidos>16){ printf("n eliga el numero de partidos politicos que desea (numero entre 2 y 16)t"); } /*system('clear');*/ int mpartidos[17][50]; float votos; int i; int f; int c; for (f=0;f<partidos;f++){ for (c=0;c<50;c++){ mpartidos[f][c]=0; } } int escanos=0; while (escanos<7 || escanos>100){ printf("n numero de escanos:(numero entre 7 y 100)t"); } /*system('clear');*/ int a=0; printf("n A continuacion meta los votos recibidos por cada partido:n"); for (i=0;i<partidos;i++){ a=i+1; mpartidos[i][0]=votos; } printf("nn Ahora el programa calculara los escanos segun este metodo:n n D'HONT n "); int TAM=100; /*METODO DHONT*/ float mdhont[17][1000]; float cl; float aux1; int fil; int col; int aa; int cc; cc=1; aux1=(mpartidos[fil][0])/(cl+1); traspaso(*mdhont,aux1,partidos,TAM); max_escans(*mdhont,mpartidos[aa][cc],escanos,partidos,TAM); /*system("clear");*/ /*fin metodo DHONT*/ /*system("clear");*/ int z; for (i=0; i<partidos; i++) { z=i+1; printf("n partido%d %d",z ,mpartidos [i ][1]); } } [/list]
9
« en: Sábado 6 de Noviembre de 2010, 22:49 »
hola, tengo un pequeño problema en c, es que no se como sacar la posicion de los valores maximos en una matriz. un programilla que me diga los valores maximos estan en la posicion m[2][3],m[5][1],etc. si pueden ayudarme muchas gracias
Páginas: [1]
|
|
|