|
391
|
Programación / Programación C/C++ / Re: como hacer un generador??
|
en: 13 Julio 2012, 07:30 am
|
creo que la cague en mi post anterior... te dejo la funcion que hace lo que tu quieres. #include <iostream> using namespace std; string &AddWord(string &text) { string::reverse_iterator it = text.rbegin(); for (; it != text.rend(); it++) { ++(*it); if (tolower(*it) >= 'a' && tolower(*it) <= 'z') break; (*it) = (islower(*it))? 'a': 'A'; } return text; } int main() { string text = "ZZZx"; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cout << AddWord(text) << endl; cin.get(); return 0; }
y aquí el de las permutaciones del post anterior... #include <iostream> using namespace std; size_t permutaciones (string text, string textFix, void (*callback)(string, bool), bool cancel = false) { size_t ret = 0; if (cancel) return ret; if (text.size()) { for (register size_t i = 0; i < text.size(); i++) { ret += permutaciones (text.substr(0, i) + text.substr(i + 1), textFix + text.substr(i, 1), callback, cancel); if (cancel) return ret; } } else { callback(textFix + text, cancel); } return ret; } void showWord(string text, bool cancel) { cout << text << endl; } int main() { permutaciones ("hola", "", showWord); cin.get(); return 0; }
Dulces Lunas!¡.
|
|
|
392
|
Programación / Programación C/C++ / Re: como hacer un generador??
|
en: 13 Julio 2012, 06:37 am
|
te dejo este codigo en vb6... http://foro.elhacker.net/programacion_visual_basic/palabras_aleatorias_sin_repeticion_ayuda-t296715.0.htmlen si la parte que genera las combinaciones es este... muy simple y corto verdad?... Private Sub CombinateString(ByRef Str_String As String, Optional ByRef str_Fix As String, Optional ByRef Cancel As Boolean) Dim Lng_LenStr As Long Dim Lng_LenStrIndex As Long If Cancel Then Exit Sub Lng_LenStr = Strings.Len(Str_String) If Lng_LenStr <> 1 Then For Lng_LenStrIndex = 1 To Lng_LenStr Call CombinateString(Strings.Left$(Str_String, Lng_LenStrIndex - 1) & Strings.Mid$(Str_String, Lng_LenStrIndex + 1), str_Fix & Strings.Mid$(Str_String, Lng_LenStrIndex, 1), Cancel) Next Else RaiseEvent StrOuput(str_Fix & Str_String, Cancel) ' <--- este en C++ seria un callback a un proceso X el cual otendria por un parametro la cadena combinada, se ejecutaria N veces... el segundo parametro seria una variable booleana para cancelar el generador de cadenas (combinaciones)... End If End Sub
En unos segundos te lo subo en C++. Duñlces Lunas.
|
|
|
393
|
Programación / Programación C/C++ / Re: Operacion Suma (Vectores) !Duda!
|
en: 13 Julio 2012, 06:10 am
|
vector_1[1]=5 + vector_2[1]=65 esto seria igual a 70, y a si sucecivamente, no quiero esto lo que quiero es:
5 978 6 4 9 + 65 9 12 66 45 ______________ 665105294
No entiendo la forma en la que los sumaste... puedes explicar el método paso a paso?... de lo contrario sera imposible ayudarte. Dulces Lunas!¡.
|
|
|
394
|
Programación / Programación C/C++ / Re: [Source] Calculadora Calc Don 1.0
|
en: 13 Julio 2012, 05:48 am
|
. Te dejo mi calculadora que hice en la Univ. para mi profesor de Métodos Numéricos, resuelve expresiones complejas como: +-+-4(5h^sqr(e(ln(4(5/10)))^sqr(2*2)))(cos(h)^2+sin(h)^2) * Identifica automáticamente las variables. * Maneja Variables (lo deje para usa sola variable)... en si se pueden usar N Variables y resolver sus valores.Arrojando el resultado correcto. SourceCode. ( Deje el ejecutable Funcional dentro de la carpeta Bin/Release ). int main() { equation oEquation; //equation oGrado; Clase por si el grado es de alguna manera no procesable como cos(x) o cos(x)^2+sin(x)^2 string str; int iOption = 0, iDivs = 0, iFlags, iOrden = 0; int iPresicion = 5; bool bNewEquation = false; long double ldH = 0.0f, ldArea = 0.0, ldRange[2] = {}; do { system("cls"); cout << endl << "Programa Creado por: Ortega Avila Miguel Angel 4B (Vespertino)." << endl << endl; cout << "Sintaxis------" << endl; cout << "Multiplicacion Divicion suma y resta" << endl << "\ta*b, a/b, a+b, a-b, -a, +b"; cout << "Trigonometricas:" << endl << "\tcos(x), sin(x), tan(x), csc(x), cot(x), sec(x)" << endl; cout << "Valor absoluto:" << endl << "\tabs(x)" << endl; cout << "Exponencial logaritmo natural:" << endl << "\te(x), ln(x)" << endl; cout << "Potencias y raiz cuadrada:" << endl << "\tx^y, sqr(x)" << endl; cout << "--------------" << endl; cout << "Nota: Se permite el uso de cuarquier variable (el programa la identifica automaticamente)." << endl; cout << "Ejemplo: 4(5h^sqr(e(ln(4(5/10)))^sqr(2*2)))(cos(h)^2+sin(h)^2)" << endl << endl << endl; cout.precision(2); cout.setf(ios::fixed, ios::floatfield); while (1) { if (tolower(str[0]) != 'r') { cout << "Ingrese una ecuacion: "; getline(cin, str); //str = "4(5h^sqr(e(ln(4(5/10)))^sqr(2*2)))(cos(h)^2+sin(h)^2)"; oEquation.Equation(str); if ((oEquation.GetFlags() & FLAG_SINTAX)) { cout << "\tError: Sintaxis de la ecuacion errorea No se permiten dos operados contiguos (inclusive signos)." << endl << endl; } else if ((oEquation.GetFlags() & FLAG_INVALIDTYPE)) { cout << "\tError: Caracteres no procesables." << endl << endl; } else if (oEquation.Variables.size() > 1) { // Hay mas de una variable?. cout << "Error: Ingresa una ecuacion con una sola variable." << endl << endl; } else { break; // while(1) } } else { cout << "Ecuacion: " << oEquation.Equation() << endl << endl; break; } } system("cls"); bNewEquation = false; while(!bNewEquation) { cout << "Programa Creado por: Ortega Avila Miguel Angel 4B (Vespertino)." << endl << endl; cout << "Leyenda (Posibles resultados):" << endl; cout << "nan. = Imposible de calcular (Resulta por ejemplo de raices imaginarias)." << endl; cout << "inf. = Numero Infinito (por ejemplo: Una divicion entre 0)." << endl << endl; cout << "Ecuacion: " << oEquation.Equation() << endl << endl; cout << "[0] Resolver Operacion."<< endl; cout << "[1] Calcular derivada."<< endl; cout << "[2] Calcular area bajo la curva (Integracion por trapecios)."<< endl; cout << "[3] Ingresar otra ecuacion."<< endl; cout << "[4] Definir la presicion (cantidad de dcimales a mostrar)." << endl; cout << "[5] Terminar aplicacion." << endl << endl; cout << "Opcion: "; if (!getInt(&iOption, true)) { cout << "Error: Solo Numeros Decimales." << endl << endl; } else { cout << endl; switch (iOption) { ... ... Es un código un tanto largo... ...
Dulces Lunas!¡.
|
|
|
395
|
Programación / Programación Visual Basic / Re: concatenacion de string y se queda pillado
|
en: 13 Julio 2012, 02:18 am
|
Y no olvides de liberar la memoria de z: para liberar se usa erase... erase z Aun que si las variables estan declaradas en un proceso estas son automáticas y la llamada a erase se obvia... caso omiso cuando pides memoria... OJO Mientras mas grande sea el buffer te quedaras sin memoria... tambien ten en consideracion que si lees trozos desde tu HD como dice @AbrahamAraon solo es en cuestión a que sea un archivo PESADO (DEFINICIÓN mas de 100 megas e inclusive hasta 4 Gigas o mas...), mientras no sean archivos super pesados, es mejor CARGAR TODO el archivo en memoria y crear memoria que actué como buffer de esta manera se evita estar leyendo el archivo constantemente y evitamos la latencia que esta representa a su vez aumentamos la velocidad de procesamiento... * No uses String para leer archivos si es que los vas a procesar, * Usa array de bytes par procesar archivos un caracter de una string es equivalente a 2 bytes... y en si aun que tu veas 10 caracteres pesaras que pesa en memoria 10 bytes pero la realidad es que pesa 20 bytes... Dulces Lunas!¡.
|
|
|
396
|
Programación / Programación Visual Basic / Re: concatenacion de string y se queda pillado
|
en: 13 Julio 2012, 00:46 am
|
Asi es como yo lo haria... los algoritmos funcionan tan rapido que procesa un archivo de 17 megabytes en unos segundos... con un archivo de salida de casi 190 megabytes... Option Explicit Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDst As Long, ByVal pSrc As Long, ByVal ByteLen As Long) Private Sub Form_Load() Dim ff As Long Dim mapFile() As Byte ff = FreeFile Open "c:\hola.txt" For Binary As ff If Not EOF(ff) Then ReDim mapFile(0 To LOF(ff) - 1) Seek ff, 1 ' nos posicionamos al inicio del archivo Get ff, , mapFile ' Debug.Print StrConv(mapFile, vbUnicode) Seek ff, 1 ' nos posicionamos al inicio del archivo mapFile = fisuras(mapFile, StrConv("BlackZeroX", vbFromUnicode)) ' Debug.Print StrConv(mapFile, vbUnicode) Put ff, , mapFile End If Close ff End Sub Private Function fisuras(ByRef arr() As Byte, ByRef words() As Byte) As Byte() Dim size As Long Dim newSize As Long Dim sizeW As Long Dim ret() As Byte Dim i As Long, j As Long ', k As Long size = (UBound(arr) + 1) sizeW = (UBound(words) + 1) newSize = (size * sizeW + size / 1) ReDim ret(0 To (newSize - 1)) For i = 0 To (size - 1) ret(j) = arr(i): j = (j + 1) RtlMoveMemory VarPtr(ret(j)), VarPtr(words(0)), sizeW ' For k = 0 To (sizeW - 1): ret(j + k) = words(k): Next j = (j + sizeW) Next fisuras = ret End Function
o tambien asi: Option Explicit Private Sub Form_Load() Dim ff As Long Dim mapFile() As Byte ff = FreeFile Open "c:\hola.txt" For Binary As ff If Not EOF(ff) Then ReDim mapFile(0 To LOF(ff) - 1) Seek ff, 1 ' nos posicionamos al inicio del archivo Get ff, , mapFile ' Debug.Print StrConv(mapFile, vbUnicode) Seek ff, 1 ' nos posicionamos al inicio del archivo mapFile = fisuras(mapFile) ' Debug.Print StrConv(mapFile, vbUnicode) Put ff, , mapFile End If Close ff End Sub Private Function fisuras(ByRef arr() As Byte, Optional ByRef text As String = "BlackZeroX") As Byte() Dim size As Long Dim newSize As Long Dim lenText As Long Dim ret() As Byte Dim i As Long, j As Long, k As Long size = (UBound(arr) + 1) lenText = Len(text) newSize = (size * lenText + size / 1) ReDim ret(0 To (newSize - 1)) For i = 0 To (size - 1) ret(j) = arr(i) For k = 1 To lenText ret(j + k) = Asc(Mid(text, k, 1)) Next j = (j + 1 + lenText) Next fisuras= ret End Function
Dulces Lunas!¡.
|
|
|
397
|
Programación / Programación Visual Basic / Re: concatenacion de string y se queda pillado
|
en: 12 Julio 2012, 22:55 pm
|
[quote author=lessionone link=topic=359048.msg1737017#msg1737017 date=1334307451] ... [code] Private Function encriptararchivo(ByVal archivooriginal As String) As String Dim c As String = "" Dim z As String = "" Dim y As Integer=0 For b = 1 To Len(archivooriginal) c = Mid(archivooriginal, b, 1) y = Asc(c) z = z & y & "tallin" Next Return z
... [/quote] para ese algoritmo sencillo se puede calcular facilmente el buffer que utilizara. bufferSize = (SizeOfFile * lenWord) + (SizeOfFile / NumberOfChars)es decir: bufferSize = (len(archivooriginal) * len("tallin")) + (len(archivooriginal) / 1)Aun que a mi sinceramente no me agrada usar los strings para trabajar con archivos... ... z = space((len(archivooriginal) * len("tallin")) + (len(archivooriginal) / 1)) For b = 1 To Len(archivooriginal) mid(z, c, 1) = mid(archivooriginal, i, 1) // no recuerdo si en .Net puedo seguir usando el mid() del lado izuierdo del igual... mid(z, c + 1, len("tallin")) = "tallin" c = c + 1 + len("tallin") Next Return z ...
Me tendré que instalar otra vez el vb6... Dulces Lunas!¡.[/code]
|
|
|
|
|
|
|