• Viernes 3 de Mayo de 2024, 09:23

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 - carmamezo

Páginas: 1 ... 7 8 [9] 10
201
C/C++ / Re: Presione Cualquier Tecla Para Continuar....
« en: Martes 23 de Marzo de 2004, 20:55 »
Buenas a todos!!!
en cuanto a lo de pulsa una tecla para salir existe una función muy simpática:
kbhit() //conio.h
keyboard hit (indica si se ha presionado alguna tecla, se puede recoger lo pulsado mediante un getch o getchar).
No detiene la ejecución del programa a la espera de que se introduzca un dato.
En cuanto a la función de limpieza de pantalla en ANSI C está la funcion clrscr() en la librería conio.h.
También están dentro de la misma librería:
clreol() //borra la línea actual desde la posición del cursor
delline() //borra la línea completa donde está el cursor y pone el cursor en la esquina superior izq.
gotoxy() //situa el cursor en unas coordenadas definidas
insline() //inserta una línea en blanco en la posición del cursor desplazando el resto de las lineas situadas debajo.
wherex() y wherey() //dan la posición actual del cursor.
En fin todas estas funciones son parte de la biblioteca de funciones de ANSI C, teoricamente debieran ser portables a cualquier SO.

202
C/C++ / Re: Imprimir En Tu Prog. El Contenido De Un Fichero
« en: Viernes 27 de Febrero de 2004, 14:28 »
perdon... hay un fallo en el último fprintf, debería ser printf. Para mostrar texto en pantalla. SORRY :whistling:

203
C/C++ / Re: Imprimir En Tu Prog. El Contenido De Un Fichero
« en: Viernes 27 de Febrero de 2004, 14:26 »
Bueno... aki te mando un ejemplo en C:
Código: Text
  1.  
  2. Void main()
  3. {
  4. FILE *pf;
  5. int a;
  6.  
  7. if((pf=fopen("archivo","r"))==NULL)  //abrir archivo para leer (r)
  8. {        
  9. //si no se puede abrir es porque no existe. (si fuera apertura para
  10. //escritura: fopen("archivo","w") si no existiera el archivo se crearía)
  11. printf("\n\t\aERROR: no se ha encontrado el archivo");//mostrar error por pantalla
  12. exit(1);//finalizar
  13. }
  14.  
  15. while(!feof(pf))//mientras no se llegue al final del fichero
  16. {
  17. fscanf(pf,"%d\n",&a); //leer del fichero
  18. fprintf("%d\n",a);//mostrar por pantalla lo leido
  19. }
  20. }
  21.  
  22.  
Espero qu esté bien (no lo he comprobado) y que te sirva de ayuda...
Hay muchas formas de acceder a un archivo:
lectura: r (si el archivo no existe no se crea)
lectura/escritura: r+
escritura: w (si el archivo existe borra lo que tenía y si no existe lo crea)
escritura/lectura: w+
añadir datos: a (si el archivo no existe lo crea y si existe añade informacion al final)
añadir/leer: a+

Además existen varias maneras de acceder al texto:
fprintf y fscanf: escriben y leen informacion de un archivo con formato (modo texto).
fputs y fgets: escriben y leen cadenas de caracteres de un archivo (modo texto)
fputc y fgetc: escriben y leen caracter a caracter de un archivo (modo texto)
putw y getw: escriben y leen palabra a palabra (modo binario)
fread y fwrite: escriben y leen en ficheros a partir de estructuras (modo binario)

Bueno con esto yo creo que podrás empezar a hacer algo más...
Suerte!

204
C/C++ / Re: ¿cómo Se Introducen Funciones Dentro De Otras?
« en: Martes 3 de Febrero de 2004, 23:16 »
Hola, aki tienes un ejemplo de como hacerlo:

Código: Text
  1.  
  2. void menu (int *op)
  3. {
  4. do
  5. {
  6. clrscr(); //borrar pantalla
  7. printf ("************* M E N U ****************\n\n");
  8. printf (" 1.- Sumar matrices \n");
  9. printf (" 2.- Traspuesta de A \n");
  10. printf (" 3.- Visualizar A por filas \n");
  11. printf (" 4.- Visualizar B por filas \n");
  12. printf (" 5.- Elemento mayor de A \n");
  13. printf (" 6.- Posición del elemento mayor de A \n");
  14. printf (" 7.- Salir \n\n");
  15. printf (" Introduzca una opción: ");
  16. scanf ("%d",op);
  17. printf ("\n");
  18. if(*op<1 || *op>7)
  19. {
  20. printf ("Ha introducido una opción no valida\n");
  21. printf("Vuelva a introducir la respuesta");
  22. Sleep(1000); //temporizador de espera 1seg
  23. }
  24. }while(*op<1 || *op>7);
  25.  
  26. }
  27.  
  28.  

Espero que esté bien....  Si no quieres hacer el "switch" dentro de la main la puedes hacer dentro de la función opcion... los prototipos de las funciones los has creado de tipo global, por tanto podrás llamar a las distintas funciones desde donde quieras (no sé si es lo que querías...).
Sobre lo de repetir el programa hasta que el usuario quiera salir puedes hacer lo siguiente:

Código: Text
  1.  
  2. void main()
  3. {
  4. int op;
  5. ....
  6. do
  7. {
  8.  menu(&op);
  9.  ....
  10.  ....
  11. }while(op!=7);
  12. ....
  13. ....
  14. }
  15.  
  16.  

De esta manera sencilla el programa se estará realizando hasta que el usuario pulse un 7.
O también puedes hacerlo con un mensaje:

Código: Text
  1.  
  2. void main()
  3. {
  4. char opc;
  5. ...
  6. do{
  7. ...
  8.  do{
  9.   clrscr();//limpiar pantalla
  10.   printf("Desea realizar otra operacion? (s-n): ");
  11.   scanf("%c",&opc);
  12.   opc=tolower(opc);//pone en minúsculas las letras
  13.  }while(opc!='s' && opc!='n');
  14.  
  15. }while(opc=='s');
  16. ....
  17. }
  18.  
  19.  
  20.  
En fin... espero ke te sea de ayuda.
Un saludo :kicking:

205
C/C++ / Re: Strings
« en: Domingo 18 de Enero de 2004, 00:09 »
El lio no es la comparación, ya mencioné que se puede usar la función strcmp, lo complicado es la ordenación en si.  Imagina que en vez de mostrarlos debieras recoger 100 strings de un fichero, ordenarlos y volver a guardarlos ordenados, sin el manejo de listas, pilas y colas la cosa es complicada, la verdad, incluso con manejo de listas es complicado.
PLAF Tienes razón, no leí el código con la suficiente atención SORRY  :whistling:
Un saludo.

206
C/C++ / Re: Strings
« en: Viernes 16 de Enero de 2004, 17:26 »
PLAF: sigues cometiendo el mismo error que habeis cometido todos excepto Ghostgirl.
Para comprobar la largura de las palabras se utiliza la fución int strlen(char *) de la librería string.h.  Como vereis recibe un apuntador a char (la primera posición del string, el propio nombre del string al fin y al cabo).
Como ejemplo os pongo lo siguiente:
Código: Text
  1. char a={"hola"};
  2. int longitud;
  3.  
  4. longitud=strlen(a); //devuelve un 4 (h-o-l-a)
  5. longitud=strlen(a[1]); //devuelve 3 (o-l-a)
  6. longitud=strlen(a[3]); //devuelve 1 (a)
  7.  
Si lo que se busca es ordenar en orden alfabético la cosa puede complicarse un montón, de verdad... Habría que ir mirando letra a letra cada palabra y comparla con el resto, si hay dos palabras que empiezan igual habría que comparar sus dos segundas letras...  Un lio.   También se puede utilizar la función strcmp(char *) que compara cadena de caracteres, CADENAS ENTERAS, igual que antes habrá que pasarle la primera posición del string.
Creo que hay una serie de algoritmos que permiten la ordenación alfabética de una manera mecánica... Creo que uno es el método de la burbuja, el método quick short...
Pero ya os adelanto que la tarea es complicada.
Un saludo

207
C/C++ / Re: Cronometrar Una Aplicación
« en: Jueves 8 de Enero de 2004, 20:23 »
Existe una librería que se llama time.h donde podrás encontrar una función llamada clock(), que hace exactamente lo que buscas. Un saludo.

208
C/C++ / Re: Problema Con C++
« en: Miércoles 7 de Enero de 2004, 19:53 »
Prueba a ver este código si te funciona, he realizado algún que otro cambio sin importancia... Si funciona sigue a partir de él realizando cada vez cosas más complejas. Un saludo
Código: Text
  1.  
  2. #include <iostream>
  3. #include <C:\Projecto1\Funciones.h>
  4. #include <stdlib.h> //funcion tolower
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.  
  11. float a, b, resul;
  12. char formulas;
  13.  
  14. do
  15. {
  16.  
  17. cout << "Ingrese un numero(-999 para salir): ";
  18. cin >> a;
  19.  
  20. if (a != -999);
  21. {
  22.     cout << "Ingrese otro numero: ";
  23.     cin >> b;
  24.  
  25.     cout << "Que operacion quiere realizar: ";
  26.     cin >> formulas;
  27.     formulas=tolower(formulas); //convierte el texto a minusculas
  28.  
  29.     switch(formulas)
  30.     {
  31.     case 's':
  32.   resul = a+b;
  33.   break;
  34.  
  35.     case 'r':
  36.   resul = a-b;
  37.   break;
  38.  
  39.     case 'd':
  40.   resul = a/b;
  41.   break;
  42.  
  43.     case 'm':
  44.   resul = a*b;
  45.   break;
  46.     }
  47.  
  48.     cout << "La formula dio: "<< resul << endl;
  49. }
  50.  
  51. }while ( a != -999);
  52.  
  53.  
  54. return 0;
  55. }
  56.  
  57.  

209
C/C++ / Re: Problema Con C++
« en: Lunes 5 de Enero de 2004, 18:58 »
Si el código que has presentado en la página es el correcto hay un fallo en la sentencia if (a == -999);
El punto y coma del final lo tienes que eliminar, si aun así no funciona en vez de hacer break haz un return.
Un saludo.

210
C/C++ / Re: Tamaño De Una Matriz
« en: Jueves 25 de Diciembre de 2003, 12:16 »
Creo que el problema está en la declaración typedef, en la librería has creado una matriz de dos dimensiones y de tipo Casilla, pero al hacer typedef Casilla Tablero[Max][Max] estás llamando a ese nuevo elemento de una forma concreta: Tablero.  Por tanto en tu programa deberás hacer lo siguiente:
Tablero un_tablero;
de tal manera que un_tablero es un array de Max posiciones y de tipo Casilla.  Creo que ese es el problema, no puedes usar un tipo de variable como nombre de una vble, al hacer typedef Tablero has creado Tablero como si fuera un tipo de vble (como int, char, float...) por eso no te deja usarla como nombre de una vble.  Un saludo.

211
C/C++ / Re: Tengo Un Problema
« en: Lunes 15 de Diciembre de 2003, 13:27 »
Si no existe la función pause o Sleep, puedes hacerte tú mismo una función que lo haga.
Por ejemplo puedes llamar a una función que hace un par de bucles encadenados y que tan sólo cuenta números. Por ejemplo:

Código: Text
  1.  
  2. void pausar()
  3. {
  4. int i,j;
  5. for (i=0;i<10000;i++){
  6.  
  7.      for(j=0;j<10000;j++)
  8.      {}
  9.  
  10. }
  11. }
  12.  
  13.  

Luego puedes regularlo con el valor que quieras. Es una mierda pero al menos podrás mostrar lo que quieres poco a poco (Ten en cuenta que el proceso tardará más o menos dependiendo del procesador).
De todas formas el mejor sistema es utilizar los temporizadores del sistema: librería time.h, función clock(), que te dice el tiempo que ha pasado desde que comenzó el programa.  Mira a ver si la encuentras. Suerte y un saludo.

212
C/C++ / Re: Tengo Un Problema
« en: Lunes 15 de Diciembre de 2003, 00:27 »
has probado la función sleep???
Un saludo

213
C/C++ / Re: Visualización De Temperatura De La Bios
« en: Miércoles 10 de Diciembre de 2003, 23:33 »
Bueno amigo Jonathan me alegra que te unas a mí en esta labor, dos mentes piensan y buscan mejor que una, además tal vez terminemos por realizar ambos proyectos, el tuyo y el mio, y una vez hechos liberar esa información para el resto de mortales.
He hecho unas averiguaciones en las últimas horas... he encontrado un programa que accede a las bios de las distintas placas y muestra temperaturas, velocidad de ventiladores... Nada raro de momento salvo que es software libre y corre en windows (parece que aún queda gente con el espiritu de soft libre aparte de en Linux), ha realizado el programa de tal forma que se puede acceder a las vbles que usa.  He encontrado unos documentos en castellano donde un tio accede a las variables que usa ese programa, de tal manera que se podría correr en windows el programa de medición y al mismo tiempo una aplicación hecha por nosotros mismos que acceda a esas vbles sin necesidad de acceder a memoria, interrupciones...  Todo viene explicado en la página web.
Batante interesante, el programa es el sigte:
motherboard monitor.

http://mbm.livewiredev.com/

Sobre la prisa que tengo... tranquilo es un proyecto que debo hacer para final de curso (Abril-Mayo), así que no hay prisa.

Desde aki animo a todo aquel que se quiera unir al "proyecto".

Por cierto Jonathan mi dirección de correo es la sigte, pues no siempre accedo al foro, pero si que chequeo el mail: carmamezo@hotmail.com
 :lightsabre: a la ataqueeeeeeee!!!!!!!!

214
C/C++ / Re: Visualización De Temperatura De La Bios
« en: Miércoles 10 de Diciembre de 2003, 15:58 »
Vamos a ver... Ante todo gracias por responder.
A Jonathan:
a lo que quiero accerder es a la Tª del procesador... Como veo eres el moderador de ensamblador lo que te voy a contar no te va a sonar raro:
Soy estudiante de Ingeniería, y debo hacer un proyecto con un PIC16F87x, la idea que había tenido es conectar el PIC a través de RS-232 al ordenador para pasarle información que luego se visualizaría en una LCD también conectada al PIC, aparte conectaría los 4 ventiladores (pins de r.p.m) externos del ordenador a las entradas del PIC para visualizar las revoluciones a las que giran, el control de éstos está regulado externamente a través de un rheobus que he hecho  :smartass: .
La idea es hacer un programa en C para comunicarme con el PIC e indicarle lo que quiero que muestre por la pantalla LCD, entre otras cosas la temperatura (que es lo más importante para este caso).
En el mercado hay dispositivos de control de éste tipo... pero lo bonito es hacerlo por uno mismo gastándose además menos pasta.  :D
Como último recurso podría conectar una PT100, una RTD o un termopar al CAD del PIC pero la medicicón no sería exacta...
Lo de desensamblar el programa de lectura ya lo he hecho... pero sinceramente no me siento con ganas de seguir "millones" de instrucciones de ensamblador, además que no conozco la mayor parte de ellas...
Sé que tiene que haber alguna interrupción que permita la lectura de datos de Tª.
En fin si surje alguna idea o algo no dudeis en contestarme.

215
C/C++ / Visualización De Temperatura De La Bios
« en: Martes 9 de Diciembre de 2003, 23:58 »
Por lo que he visto ya se inició en su día una discusión sobre este tema....  Pero las respuestas no me sirven.
Lo que quiero es acceder a la memoria donde la bios guarda toda la información que tiene.  Entre esa información debe estar la Tª del sensor del micro (que es precisamente lo que busco).  La pregunta que expongo es... ¿como coño accedo yo a esos valores?.
La verdad es que la pregunta es complicada entre otras cosas porque los fabricantes de placas base no te dan ningún tipo de información, aunque les preguntes directamente (ya lo he intentado y me han dicho que es informacion restringida), en fin si nadie es capaz de ayudarme... me gustaría saber si alguien conoce alguna página donde aparezca mappeada la memoria RAM.  Un saludo para todos y gracias de antemano.

216
C/C++ / Re: Triangulo De Pascal
« en: Lunes 8 de Diciembre de 2003, 15:34 »
Hace relativamente poco contesté a otro algoritmo que proponías y era bastante parecido... No se si esto es lo que buscabas pero aqui te dejo el código de un ejemplo:

#include<windows.h>
#include<stdio.h>


void main()
{
int num,aux,i,j;

do{
   system("Cls");
   printf("\n\tIntroduce numero de filas (40 maximo para visualizar OK): ");
   scanf("%d",&num);
   if(num<=0){
      printf("\nEl numero ha de ser mayor de 0!!!");
      Sleep(2000);}
   if(num>40){
      printf("\nPuede haber problemas en la visualizacion debido al limite de caracteres");
      Sleep(2000);}
}while(num<=0);

   
aux = num;


for(i=1;i<=num;i++){
   for(j=0;j<aux;j++)
      printf(" ");
   for(j=2;j<=i*2;j++)
      printf("*");
   printf("\n");
   aux--;}

getchar();
}

Con la función "gotoxy" de la librería "conio.h" se realizaría de manera más adecuada... pero el compilador de microsoft no tiene esa función implementada en la misma... (maldito Bill).  En fin un saludo

217
C/C++ / Re: Ayuda Urgentísima
« en: Sábado 6 de Diciembre de 2003, 13:54 »
C no creo que te permita usar vbles de tipo bool, en su caso puedes utilizar vbles de tipo int dándoles valores de '1' y '0'.  C++ si que lo permite, tal vez sea lo que estés utilizando en lugar de C.
De todas maneras si lo que buscas es devolver valores desde una función, en vez de hacerla de tipo void hazla de tipo int o bool (en C++) y haz un return("TRUE") or return("FALSE") o return (varbool).  De esta manera evitas el retorno de la vble en forma de apuntador.
Espero que te haya sido de ayuda, un saludo

218
C/C++ / Re: Ayuda!!!!! Urgente!!!! Apuntadores!!!!!!
« en: Viernes 5 de Diciembre de 2003, 21:50 »
Por cierto se me ha olvidado comentar que el warning de diferentes niveles de indireccion, lo dá porque el array no es de una dimensión, por tanto es como varios arrays apuntando cada uno a una posición desplazada la una de la otra 17 enteros... por tanto al hacer la asignación directa el compilador te avisa de que no estás especificando a cuál de las múltiples posiciones a las que apunta te refieres... Por defecto siempre asigna la posición
  • [0], que es en éste caso lo que buscamos... La manera de evitar el warning es hacer lo siguiente:


int map1={...}
int *map;

map=&map1[0][0];

Una vez definida la posición a la que nos referimos el warning desaparece. Un saludo

219
C/C++ / Re: Ayuda!!!!! Urgente!!!! Apuntadores!!!!!!
« en: Viernes 5 de Diciembre de 2003, 21:37 »
vamos a ver... int **map es un apuntador a un apuntaror a int, es cierto que un array es como un puntero, pues map1 contiene la direccion del primer elemento del array.
Una asignación array a puntero funcionará siempre y cuando se trate de un array de una dimensión:
int a[5], *b;
b=a;
Esta asignación será correcta, y b apuntará al primer elemento del array a.  Ahora bien, a la hora de crear un apuntador a un apuntador (**map) no significa que map apunte a un array bidimensional, sino que map apunta a una direccion de memoria donde se encuentra la direccion de un int (puede sonar lioso pero no lo es).  Imagínate si creasomos un array de 10 dimensiones y tuvieramos que crear un puntero con 10 asteriscos.... una pasada.
si por ejemplo mostrásemos map, veríamos que aparece la dirección de memoria del primer elemento del array, y si mostrasemos *map aparecería el valor del primer elemento del array, os muestro un ejemplo para que lo comprobeis:

int map1[5]={0,1,2,3,4};
int **map;

map=map1;
printf("%d",*map); //muestra el valor de la 1a posicion del array '0'
printf("%x",map); //muestra la direccion (en hexadecimal) del 1er elemto del array

He mostrado la dirección en hexadecimal para que la podais comparar con la que aparece en el debugger, para comprobarlo de otra manera podeis hacer "printf("%x",map1)" y os mostrará la dirección de memoria del primer elemento del array.  Como veis es posible utilizar un **map para apuntar a un array simple.
La solución al problema es sencilla, puedes hacer un apuntador simple al array de dos dimensiones y simplemente deberás saber que cada 17 elementos es una fila (los arrays se ordenan de manera lineal en memoria primero los 17 elemtos de la 1a fila, luego los 17 sigtes y así sucesivamente hasta 13).  Por tanto puedes moverte a través de un puntero que apunte a la primera posición del array sabiendo que a partir de esa posición habrá 17x13=221 posiciones.
En fin espero que te haya sido de ayuda... Un saludo

220
C/C++ / Re: Me Falla El Programa
« en: Domingo 30 de Noviembre de 2003, 20:55 »
Sin el código del programa será dificil ayudarte... Un saludo :lightsabre:

221
C/C++ / Re: no hay manera de hacer esto ...
« en: Jueves 27 de Noviembre de 2003, 19:40 »
La verdad es que de imposible tiene poco, es más bien sencillo. Basta con anidar un par de bucles for, ahí tienes el código:

#include<stdio.h>

void main()
{
   int i,j,num;

   do{
      system("Cls");   //limpiar pantalla
      printf("ntIntroduce numero: ");
      scanf("%d",&num);
   }while(num<0 || num>20);
   
   for (i=1;i<=num;i++){
      printf("n");
      for(j=1;j<=i;j++)
         printf("%d",i);
   }
   getchar();
}

Un saludo y la próxima vez inténtalo un poco más.:suerte:

222
C/C++ / Re: comparar variables
« en: Lunes 24 de Noviembre de 2003, 23:40 »
puedes hacerlo con un bucle:

int a[5],mayor,maydos,menor,i;
(...)
printf(...)
scanf(...)
(...)
mayor=a[0];
maydos=a[0];
menor=a[0];
for(i =0;i<5;i++)
{
if(a>mayor)
  {maydos=mayor;
  mayor=a;
  }
if(a<menor)
  menor=a
}

ahora si tienes 1000 numeros lo único que tendrás que cambiar es el array e 'i'.
Un saludo.:suerte:

223
C/C++ / Re: Compiladores ¿Cual es Mejor?
« en: Lunes 24 de Noviembre de 2003, 23:29 »
He utilizado Borland y el visual C de Bill Gates, y sintiendolo mucho he de decir que me quedo con el de Bill (ya me fastidia).  Iterfaz gráfica estupenda pero sobretodo un Debuger impresionante.
:comp:

224
C/C++ / Re: Leer un numero ( scanf )
« en: Viernes 21 de Noviembre de 2003, 17:41 »
Pro cierto no había caido en las mayusculas... estaría perfecto con un:
a= tolower(a);
después del scanf("%c",&num2);
Un saludo.

225
C/C++ / Re: Leer un numero ( scanf )
« en: Viernes 21 de Noviembre de 2003, 17:37 »
Creo que te equivocas o yo no te entiendo, pues a mi me va perfecto... en el momento que se introduce una letra el programa pide que se repita la inserción, se puede mejorar el código haciendo un fflush(stdin) después del scanf último.  Pero si se introduce un 3425asdf pide un nuevo valor, por tanto no deja pasar ninguna letra esté en la posición que esté.

Páginas: 1 ... 7 8 [9] 10