|
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 - herzdark
1
« en: Viernes 27 de Septiembre de 2013, 03:17 »
Claro, es mucho mas eficiente trabajar directamente con las variables que con una copia, aunque hay algo que debes tener en cuenta, todo depende de lo que necesites hacer, si no vas a realizar modificaciones en los valores, o si los modificas, pero no te afecta en el resultado que debas obtener, entonces puedes usar directamente apuntadores. Si vas a realizar modificaciones en los valores pero por alguna razon te afecta el resultado que necesitas obtener, o necesitas conservar los valores anteriores, entonces necesitas trabajar con una copia si o si.
tenes bastante razon igualmente ya por habito cualquier struct la paso con apuntadores y si por alguna razon no desea modifarlo uso la palabra const y para lo otro la trato de usar local asi vive dentro de la vida util de la función
Porque tu código utilizas los *(* contiene el valor de la variable y & contiene la dirección de memoria de la misma)sin declarar y asignar los apuntadores y funciona?.-
No entendi bien la pregunta, podrias elaborarla o explicarla mejor?
si no entendi mal el esta hablando sobre esto void suma(int *a, int *b, int *res) { *a = 10; *b = 10; *res = *a + *b; }
el asterisco (*) delante de cualquier variable tipo puntero significa que el contenido de la posición de memoria que tiene para que lo entiendas hagamoslo a lo criollo: suponiendo que en la memoria principal la variable A del main esta en la posición 0x100 y cuando uno llama a una función el compilador crea una porción de memoria para esa invocación y la variable local de la función que se llama A esta en la pos 0x1010 entonces al hacer *a=10 seria decir esto debe asignar 10 al contenido de la variable A pero A es un puntero a una porcion de memoria, entonces toma el contenido de esa variable que es 100 y en esa posición guarda un 10, en otras palabras es una asignación indirecta
2
« en: Jueves 26 de Septiembre de 2013, 22:44 »
excelente explicación profe pero también otra diferencia no sería en el uso de memoria total porque si yo tengo una struct con bastantes campos no es lo mismo pasarlo por copia y duplicar la memoria que pasarlo por puntero y trabajar sobre la misma area de memoria que se habia definido antes? . ya se que las PC's actuales tienen memoria para derrochar pero a mi me enseñaron que había que exprimir la memoria al máximo xD
3
« en: Domingo 22 de Septiembre de 2013, 00:39 »
si que lo queres hacer es ingresar los datos dentro de la funcion lo que podes hacer es que devuelva una copia de una estruc agenda agenda ingresar_datos() {agenda obj; obj.orden = 1; return obj; }
como ves estoy creando una estruct obj dentro de la funcion para guardar la info que se ingrese, si vos no devolvieras esa estrc la informacion se pierde por la vida util de una variable y entro del main lo usarías así: int main() { agenda datos; datos=ingresar_datos(); escribir_datos(datos); printf("\n\n Pulse una tecla para cerrar la aplicacion..."); system("PAUSE>NULL"); return 0; }
espero que hallas entendido, suerte con el aprendizaje
4
« en: Domingo 5 de Mayo de 2013, 00:51 »
creo que si pones el codigo de las listas así seguro se pondrá como en el vídeo
<li>Inicio</li> <li>Economia <ul class="submenu"> <li>Empresa</li> <li>Mercado</li> <li>Bolsa</li> <li>Banca</li> </ul> </li> <li>Cultura <ul class="submenu"> <li>Novela</li> <li>Comic</li> <li>Series</li> <li>Cine</li> </ul> </li> <li>Ciencia <ul class="submenu"> <li>Natural</li> <li>Cosmos</li> <li>Tierra</li> <li>Tenis</li> </ul> </li> <li>deportes <ul class="submenu"> <li>Futbol</li> <li>Motor</li> <li>Basket</li> </ul> </li>
y en el CSS en el menu>li te falto poner que la posicion sea relativa a la posición de dicho menu
ul{ list-style-type:none; padding:0; }
#menu{ width:200px; }
#menu>li{ background-color:#4dcdc8; border: 1px outset #4bcdc8; padding:5px; position: relative; }
.submenu{ top:0; left:199px; position:absolute; display:none; }
.submenu>li{ background-color:#4dcdc8; border: 1px outset #4bcdc8; width:160px; padding:2px; }
#menu li:hover{ color:white; cursor:pointer; }
#menu li:hover ul{ display:block; }
5
« en: Martes 19 de Marzo de 2013, 22:51 »
soy muy novato en java pero la class String esta en c++ x eso no seria mejor poner así? while(control.compareTo("s"))
6
« en: Lunes 14 de Mayo de 2012, 23:29 »
gracias por el codigo y sabrias como saber si un arbol es AVL? for(; { ... } alguien me podria explicar xq declaran asi la instruccion for????
eso lo q hace es ejecutar en un ciclo infinito el codigo q esta entre llaves y seria lo mismo q poner esto:
7
« en: Domingo 13 de Mayo de 2012, 00:05 »
¿que son los TDA o TAD ?
¿A que es? un vector?¿ final que es, un contador?
lo que quieres es ir agregando datos a un vector pero que no se puedan repetir datos que ya esten agregados?
Saludos!!
los TDA son Tipos de Datos Abstractos como las estructuras, uniones,etc y si lo q el quiere es ir agregando valores q no esten repetidos, y saudiaz podrías subir el programa completo
8
« en: Viernes 11 de Mayo de 2012, 16:59 »
mm, tu codigo es un poco inentendible, yo lo pondría así, con el printf incluido: void rotarArriba(int v[], int n) {int aux=v[0], i; for (int i=0; i<n-1; i++) {v[i]=v[i+1]; // en la posición i estoy poniendo el valor de la posición siguiente printf ("%d",v[i]; } v[n-1]=aux; } //--------------------------------------------------------------------------- void rotarAbajo(int v[], int n) {int aux = v[n-1], i; for (int i=n-1; i>0; i--) {v[i] = v[i-1]; // en la posición i estoy poniendo el valor de la posición anterior printf ("%d";v[i]; } v[0] = aux; }
9
« en: Jueves 1 de Diciembre de 2011, 00:02 »
vos lo q estas usando es una lista doblememente enlazada circular no?, entonces ya cuando el nodo es NULL yo podría así: if(actual==NULL) {actual=new agenda; actual->siguiente=actual->anterior=actual; //ahi estaria logrando q el nodo sig y ant se apunte a si mismo (o mejor dicho strcpy(actual ->nombre ,tempnombre ); //lo q llamamos circular) strcpy(actual ->apellido ,tempapellido ); strcpy(actual ->telefono ,temptelefono ); }
después con el tema de saber el principio y final no se si tu puntero de inicio de lista esta al primer nodo, al ultimo nodo insertado (creo q con este serie medio complicado saber el inicio y final) y ultimo nodo, si usas p/e el primer nodo vos ya tenes tu inicio y final entonces lo unirias así: fin->siguiente=inicio; inicio->anterior= fin;
espero q esto te sirve igualmente hacete el dibujo así me salio a mi
10
« en: Viernes 11 de Noviembre de 2011, 23:37 »
vos tenes q usar el I+1 porque empezaste desde cero, ademas como estas pidiendo el sueldo de un empleado ese empleado no puede ser 0 porque sino no existe, si hubieras empezado con i=1 no tendrías q poner el i+1
11
« en: Viernes 11 de Noviembre de 2011, 22:06 »
No me gusta revivir temas, pero tengo una duda, y no me gusta quedarme con dudas, y es que soy alumno de primer año y con suerte lo mas dificil que me han pasado es arreglos y funciones en c y no entiendo ni mitad de sus codigos, pero igual pude hacer un programa que cuenta palabras
#include <stdio.h>
char a[100];
int Calcular_Palabras () { int palabras=1,contador=0; while(a[contador] != '\0') {if(a[contador] == ' ') palabras++; contador++; } return palabras; }
int main (void) { while (1) { printf("\n\tIngrese una cadena: "); gets(a); printf("\n\tEl numero de palabras es: %i\n\n",Calcular_Palabras()); } return 0; }
entonces no entiendo por que ustedes lo hacen tan dificil y con tantas cosas... o sere yo xD
te digo mi experiencia, yo cuando estaba en primer año veia el codigo como lo hiciste vos pero despues cuando vallas pasando los años te exijen q no lo uses con subindices y otras cosas más y respecto a tu codigo la sentencia: estas contando una palabra de más por eso empezalo con 0, si no me crees con tu codigo si yo ingresará HOLA A TODOS me retornaría 4 siendo la cantidad de palabras 3
12
« en: Miércoles 10 de Agosto de 2011, 00:29 »
estas recorriendo toooda la cadena para saber si es capicua, si te pongo el numero 1224 ya a la primera pregunta me da q no es capi entonces mejoraria el codigo q se valla moviendo mientras sean los numeros iguales, y cuando salis del ciclo preguntas si tu valor x == y y retornarias q es capi sino no en codigo seria así: in capicua(char*num) //1- Capicua y 0- No capicua {int largo =strlen(num ),i =0,med =largo /2; while(num[largo]==num[i]&&i<med) {i++; largo--; } return num[largo]==num[i]; }
espero q te alla aclarado tu problema y si no enteden algo pregunta
13
« en: Sábado 30 de Abril de 2011, 00:15 »
puede ser una pregunta tonta pero puedo utilizar la libreria boost en programas en C o solo es para C++?
14
« en: Sábado 30 de Abril de 2011, 00:03 »
Hola amigos de este foro tan completo: Estoy haciendo un programa para la facultad (estoy en primer curso de Ingenieria Informatica) y se me plantea este problema en todos los switch case que hago, y es que cuando elijo una opción del menú este me aparece 2 veces en lugar de solo una. No he sido capaz de identificar donde está el error, a ver si alguien es capaz. Aquí os dejo un ejemplo del código fuente que utilizo en un programa:
int main (int argc, const char * argv[]) { char menu[] = "n A)Nuevo altan B)Bajan C)Modificaciónn D)Búsqueda por autorn E)Búsqueda por editorialn F)Búsqueda por títulon G)Búsqueda por fechann"; char opcion; struct ficha BIBLIOTECA [LIBROS]={0,0,0,0}; do { printf("%s",menu); scanf("%c",&opcion); switch (opcion) { case 'A': una_funcion_cualquiera(argumentos); break; case 'B': otra_funcion o código break; case 'Q': printf("nnSaliendo.nn"); break; } } while ('Q' != opcion); printf("nnTerminación normal del programa.nn");
return 0; } yo n veo ningun drama en el codigo, el menu te aparece despues d q se ejecuto la funcion no?
15
« en: Lunes 28 de Marzo de 2011, 14:23 »
si creo que me esta compilando bien. ahora, podrias ayudarme regalandome alguna explicacion sobre como hago para unir 2 vectores? saludos!! Tienes que explicarte mejor cuando haces preguntas... que es unir dos vectores?
si por lo q yo entiendo y mis pocos conocimientos en materia de programación la unica manera sería creando un nuevo vector, la dimensión de ese vector debería ser la suma de la cantidad de elementos de cada uno de los vectores vi esto pero no entiendo si estas restando pares o impares for(int x=1;x<cantidad;x=x+2)// <-- aca no estas restando los impares?? { cout<<x+1<< "-> "<<vector[x]<<endl; resta = resta - vector[x]; } cout<<"la resta de los pares es "<<resta<<endl;
16
« en: Lunes 21 de Marzo de 2011, 03:23 »
mmm creo que no estoy entendiendo, podrian ser un poco mas claros? haber como te lo explico nosotros lo q te estamos diciendo es q podes encontrar una relacion entre las letras y los numeros letra ASCII 'A' 65 'B' 66 'C' 67 ... ... entonces nosotros te decimos si vos al caracter q tenes en la pos i del vector le restas el carac '@' o sea 64 en decimal si es MAYUSCULAS o '`' o 96 en decimal si es MINUSCULAS te daría un valor entero q representa cual es la cantidad de letras q separan ambos caracteres veamos yo tengo la palabra "BACA" y yo quiero q quede 2131, entonces a cada pos del vector le restamos el caract '@' o 64 'B' - 64 = 66-64 = 2 'A' - 64 = 65-64 = 1 'C' - 64 = 67-64 = 3 'A' - 64 = 65-64 = 1 pero tenes q tener cuidado de diferenciar si una letra es minuscula o mayuscula y para hacer eso podes pregunt así val=(vect[i]>='A'&&vect[i]<='Z')?64:96;
espero q hayas entendido
17
« en: Domingo 20 de Marzo de 2011, 04:26 »
int captura() { float r1,r2; int num; r1 = cua(num); //el problema es q el compilador no reconoce esta función r2 = cub(num); //idem cua printf("El cubo es %.2f y el cua es %.2f",r2 ,r1 ); //aca te falta devolver algo como tu prototipo dice q devuelve un int deberías devolver el num ingresado o una constante, esto te tira WARNING en el //momento de compilar } float cua(int num) { float res; res = num*num return res; } float cub(int num) { float res1; res1 = num*num*num return res1; }
no es recomendable desarrollar las funciones antes q el main xq se pueden generar problemas del tipo de q el compilador no reconozca la funciones, x esa la forma academica y recomendada es esta: include define structs prototipos de las funciones a usar main desarrollo de las funciones con este forma de programación no tendrías los problemas q tuviste arriba y quedaria así float cub(int); //este es el prototipo de la función cub float cua(int); //este es el prototipo de la función cua int captura(); //este es el prototipo de la función captura int main() {...} int captura() { float r1,r2; int num; r1 = cua(num); //y ahora el compilador reconoce a la función cua r2 = cub(num); //idem cua printf("El cubo es %.2f y el cua es %.2f",r2 ,r1 ); } float cua(int num) { float res; res = num*num return res; } float cub(int num) { float res1; res1 = num*num*num return res1; }
proba esta forma y espero q lo hallas entendido suerte
18
« en: Viernes 18 de Marzo de 2011, 21:01 »
pero no deberia fijarse si la letra q le viene es mayuscula o miniscula ante de restar 64
19
« en: Jueves 17 de Marzo de 2011, 14:27 »
existen muchas formas d hacerlo pero te voy a decir 2 nada mas 1- es como lo dice amilius 2- usando la función isalpha de la librería ctype.h que devuelve un valor distinto de si el caracter q le pases sea una letra #include <ctype.h> for(i=0;i<TAM;i++) /*si el valor de arri es una letra hacer lo queres*/ }
20
« en: Domingo 13 de Marzo de 2011, 04:24 »
no se hacen las tareas, cuando tengas un codigo se revisa pero te puedo una pista si puede resolver mediante cadenas de caracteres, espero q te halla ayudado
21
« en: Domingo 13 de Marzo de 2011, 04:19 »
en tu codigo no hay problema el default del switch se ejecuta perfectamente pero no lo ves xq no paras la pantalla, al final del programa pone un system ("PAUSE") q se encuentra en la libreria STDLIB.H o el clrscr() de la libreria CONIO.H y ahora fijate si te anda bien
22
« en: Domingo 13 de Marzo de 2011, 04:11 »
#include <stdlib.h> #include <stdio.h> int main() { int num; scanf("hora en segundos %c /n", num ); }
veamos los errores 1)vos definiste num como entero (int) pero cuando lees lo haces como carácter (char), entonces como quedaría , ademas cuando lees debes poner la dirección de la variable (&num) 2)la frase hora en segundo no va dentro del scanf eso iría dentro de un printf despues te quedaría así tu codigo #include <stdlib.h> #include <stdio.h> int main() { int num; }
te recomendaría q leyeras libros de programación en C así aprenderas sobre estos errores q tuviste
23
« en: Sábado 12 de Marzo de 2011, 02:13 »
haber función recursiva es una función q se llama a si misma y casi siempre la unica sentencia de validación es el if() pensalo a si, si tu posición sea menor a la cantidad de elementos q lo muestre y llamas a la misma función con los mismos parametros pero con la pos+1 entendes??
24
« en: Sábado 5 de Marzo de 2011, 06:47 »
se me creo un ciclo infinito con el código que me mandaste no se q hiciste pero probe el codigo q te puse y anda perfecto o lo q vos querias no es hacer eso sino validar el dato a procesar sea positivo no?
25
« en: Sábado 5 de Marzo de 2011, 06:24 »
haber si entendi lo q vos queres es pidiendo numeros hasta q el numero ingresado sea neg no? si es así lo unico q debe hacer es cerrar el codigo en una sentencia while cout << "Introdusca un numero: "; cin >> numero; while(numero>0) {cout<<"Los divisores del numero ingresado son: "<<endl<<endl; suma=0; // Almacena la suma de los divisores for (int i=1;i<=(numero/2);i++) {if (numero%i==0) {cout<<i<<endl; //Imprimimos los divisores suma=suma+i; } } suma=suma+numero; //Sumamos el numero inicial que es divisor de él mismo cout<<numero<<endl<<endl<<endl; cout << "La suma de los divisores " << numero << " es: " << suma <<endl<<endl; cout << "Introdusca un numero: "; cin >> numero; }
esto lo q va a hacer es pedir numeros hasta q se cumpla la condicion de q el numero ingresado sea mayor a 0
|
|
|