Cómo pensar lógicamente a la hora de programar.

Tu profesor tiene razón.

Necesitas un algoritmo.

Puedes escribir un algoritmo de diferentes maneras:

  1. Escriba el código directamente, O → esto no es correcto
  2. Escriba el pseudo código, luego el código de escritura, O → esto está bien
  3. Escriba los pasos en inglés en papel, O → esto es lo mejor
  4. Escriba los pasos en inglés en la pizarra blanca, O → esto es mejor si tiene la pizarra blanca
  5. otro

Por lo tanto, Papel o Pizarra es mejor, y lo que escribes no es Pseudo código, sino pasos en inglés, igual que lo que hiciste, pero debería verse como el Código (claro, esto se parecería al Pseudo Código, pero reglas estrictas (SI ENTONCES) no están allí, solo escriban libremente, solo si es suficiente)

Para su problema, podemos escribir así, asumiendo inglés en papel / pizarra:

  1. Indique al usuario que seleccione el directorio de origen, guarde la ruta de la carpeta en ” srcDir
    1. ejemplo, si el usuario dio C: \ myfiles1 \, entonces srcDir tendrá “C: \ myfiles1 \”
  2. Indique al usuario que seleccione el directorio de destino, guarde la ruta de la carpeta en ” destDir
    1. ejemplo, si el usuario dio C: \ myfiles2 \, entonces destDir tendrá “C: \ myfiles2 \”
  3. Mover archivos del directorio de origen al directorio de destino
    1. Crear una carpeta PDF en la carpeta destDir
      1. es decir, crear { destDir} \ PDF \
      2. es decir, será: C: \ myfiles2 \ PDF \
    2. Del mismo modo, crea otras carpetas haciendo, 3 a. arriba, para carpetas como TEXT, MP4, etc.
    3. Mueva los archivos PDF de srcDir al directorio { destDir} \ PDF \
      1. Necesitas usar una función de SO dada por el lenguaje de programación
      2. por ejemplo, la función ‘sistema’ en lenguaje C
    4. Del mismo modo, haga 3.b arriba, para otros archivos: Mueva las carpetas PDF al directorio { destDir} \ PDF \

Espero que ayude.

Creo que lo estás haciendo de la manera correcta. Está dividiendo su tarea en sub-tareas (con pseudocódigo o cualquier otra cosa), pero supongo que necesita dividir aún más.

Consideremos una versión simple de su programa. Se ejecuta en la consola, lo que significa que no incluye ninguna interfaz gráfica de usuario como botones, etiquetas o campos de texto. Toma entradas solo de archivos de texto.

En primer lugar, desea preguntar al usuario dónde encontrar los archivos para ordenar . Cree un archivo de texto con un nombre como input_dir.txt y escriba su ruta de acceso a los archivos originales. Solo podría admitir una línea en este archivo (asumiendo en Windows):

D: \ Documents \ MyMessyFolder

Usted lee esta única línea de este archivo en su código en una variable, como messy_dir . No importa si es un camino legal al principio.

En segundo lugar, desea ordenar los archivos por sus extensiones . Pero antes de eso, debes obtener una lista de todos los archivos en messy_dir . Encuentra una API para listar archivos en algún directorio. Es mejor que sea recursivo, lo que significa que listaría los archivos en subdirectorios, si los hubiera. Ponga el resultado en una lista (o una matriz, o algo más) llamada messy_file_paths .

Ahora es el momento de considerar qué extensiones desea admitir. Por ejemplo, desea ordenar solo los archivos MP3, PDF y TXT en carpetas separadas denominadas music , docs , pure_texts y colocar todas las demás en otra carpeta llamada other . Podría crear otro archivo de texto llamado, por ejemplo, file_types.txt , cuyo contenido se parece a:

otro
musica mp3
documentos pdf
txt pure_texts

La primera línea contiene solo un elemento, que es el nombre de la subcarpeta para todos los archivos misceláneos. Las otras líneas contienen un par de cadenas, en cada una de las cuales la primera es la extensión del archivo y la última es el nombre de la subcarpeta de destino. Necesita leer este archivo y almacenar adecuadamente la información. Por ejemplo, podría usar una variable llamada misc_subfolder_name para almacenar 'other' , y luego un diccionario llamado exts_to_subfolder_names para almacenar otras cosas, donde la extensión del archivo es la clave y el nombre de la subcarpeta es el valor.

Luego le pregunta al usuario dónde guardar los archivos . Use otro archivo de texto como el primero y target_root_path en una variable target_root_path . Ahora, enumere sus messy_file_paths , y para cada una, verifique la extensión del archivo y use exts_to_subfolder_names con target_root_path para crear la ruta completa de las subcarpetas de destino. Cree estas carpetas (si es necesario) y copie (más seguro que mover) el archivo en la carpeta.

Su último paso se puede hacer al ver si los archivos aparecen en la nueva ubicación.

Hasta ahora he descrito una forma sencilla de extender su pseudocódigo a un flujo lógico más detallado. ¿Puedes seguir desde aquí?

Consejos de depuración:

  • En general, no podrá ejecutar su programa correctamente la primera vez. Se necesita mucho tiempo para depurar su programa para que funcione como se espera.
  • Una forma sencilla de depurar un programa es imprimir cosas en cualquier parte de su programa. Por ejemplo, lee una línea de un archivo en una variable y luego puede imprimirla para que pueda verificar si es correcta cuando se ejecuta su programa.
  • Otras formas de depurar un programa incluyen la técnica de punto de interrupción, que no necesita por ahora, supongo.

Puntos de conocimiento:

  • Variables: cadenas, diccionarios y quizás otros tipos.
  • Uso de colecciones (listas y diccionarios) y bucles.
  • Archivo IO: lectura de un archivo de texto, copia / movimiento de archivos, listado de archivos en una carpeta, creación de nuevas carpetas, etc.
  • IO estándar: Imprime cosas a la salida estándar.
  • ……

[Espero que esto ayude mucho tiempo]

Creo que tienes un buen comienzo, pero debes recordar que las computadoras son idiotas. Piensa en darle estas instrucciones a un idiota e imagina lo que sucederá. Intenta seguir tus propios pasos a mano. Si necesita realizar un seguimiento de algo en una variable, especifique el nombre de la variable para poder usarla más adelante. Piensa qué tipo de cosas podrían salir mal y qué harías si eso sucediera.

  1. Pregunte al usuario dónde buscar los archivos. (¿Qué puede salir mal aquí? ¿Pueden especificar un directorio como su directorio raíz? ¿Hay algún tipo de archivos en el directorio que no va a permitir?)
  2. Ordenar por extensión de archivo. (¿Ordenar qué? ¿De dónde? Simplemente especifique un poco más. Sin embargo, no quiere ordenar, quiere agrupar. ¿Deben considerarse .PDF y .pdf como iguales? (Si está en un sistema Windows, Probablemente sea mejor que lo hagan. Si estás en Unix, tal vez no. ¿Hay cosas que pueden salir mal aquí?
  3. Pregunte dónde guardar. (¿Qué puede salir mal aquí?)
  4. Mostrar carpetas organizadas. (A mí me parece que te perdiste un paso. Tu idiota que recibe las instrucciones te preguntó dónde guardar, porque le dijiste que lo hiciera. No hay carpetas organizadas. ¿Por qué las hay cuando no has hecho nada con los archivos? ¿está haciendo con los archivos? ¿Moviéndolos? ¿Copiándolos? Una vez más, ¿qué puede salir mal aquí? ¿Qué pasa si las carpetas ya existen? ¿Qué sucede si los archivos ya existen? Si la carpeta a la que se está copiando ya existe o no ? ¿Cómo deberían llamarse los directorios de destino? Si los archivos * .mp3 deberían ir en la carpeta de mp3, ¿qué decidieron sobre PDF frente a PDF?

¡Averigua cómo lo harías si se hiciera manualmente!

La programación no es más que hacer que la computadora haga algo que de otra manera harías manualmente.

Siempre que tenga un problema, primero piense en una solución al problema. Preocuparse por el código más tarde. Piense cómo resolvería el problema si tuviera que hacerlo manualmente. Una vez que tenga la solución, es solo cuestión de poner el mismo flujo en el código. Como ya conoce el lenguaje de programación (sintaxis, palabras clave, etc.) podrá traducir la solución a un código relativamente fácil.

Para su problema, pensando cómo lo haría manualmente, los pasos podrían ser como a continuación:

  1. Vaya al directorio que necesita arreglar.
  2. Compruebe cuántos tipos de archivos diferentes hay.
  3. Crea carpetas para cada tipo de archivo.
  4. Tome el primer tipo de archivo y, uno por uno, copie todos los archivos de ese tipo en la carpeta creada para ese tipo.
  5. Repita el paso anterior para todos los diferentes tipos de archivos.

¡Hecho! No fue tan difícil.

Ahora solo necesitas descubrir cómo convertir cada paso en código. Algunos tal vez fáciles y puede que lo sepan. Otros pueden necesitar ayuda (tal vez una búsqueda en Google).

Pero lo que has hecho es dividir el problema más grande en un montón de problemas más pequeños. Y será mucho más fácil abordar estos pequeños problemas por separado.

Para problemas un poco más complicados, utiliza un lápiz y papel. Intenta resolver el problema en papel. Asegúrate de haber considerado todas las posibilidades. Una vez que tenga la solución, solo necesita traducir al código.

Nota: Esta es básicamente la idea detrás de escribir psuedocode. Pero mucha gente trata de pensar en términos del código, lo que dificulta su resolución. Descubra cómo resolver el problema manualmente y luego descubra cómo convertir los pasos para codificar uno por uno.

Creo que así es como lo hacen la mayoría de los programadores autodidactas. Simplemente se sumergen en el código e intentan hacer lo que se supone que deben hacer, sin importar si el lenguaje de programación es nuevo o familiar.

Una vez estuve en una entrevista técnica en la que me pidieron que escribiera un código en una hoja de papel. Luché mucho; No recuerdo cuando había luchado tanto en programación antes. Comenté que este tipo de trabajo es muy difícil para mí, ya que no puedo jugar con el código y ver cómo se ve en la pantalla de la computadora. Los entrevistadores simplemente me miraron con una confusión dibujada en sus caras. Pero en retrospectiva, probablemente solo querían que pensara antes de implementar … pero mi estilo de trabajo de alguna manera está sintetizado en estos dos.

En mi opinión, la codificación es el área correcta donde puedes jugar. Solo escribe algo y luego explica por qué eso no funciona. A continuación, intente que funcione solucionando los problemas encontrados. Haga esto hasta que su código se desmorone porque se implementó pobremente. Simplemente tira el código viejo y comienza de nuevo. Esto no perjudicará a nadie y no le costará nada; solo toma tiempo y esfuerzo, pero también aprenderá. No hay una solución mágica que perfeccione su lógica: incluso la mayoría de los programadores profesionales cometen errores en la lógica. Y está completamente bien.

Con su problema específico, puede lograrlo fácilmente a mano. Piensa cómo lo harías manualmente y luego dile a la computadora que haga lo mismo. Sugerencia: piense en las operaciones, no en cómo se ejecutan realmente.

No hay un atajo para aprender la lógica en la programación. La experiencia se desarrolla gradualmente. Hay algunos pasos fáciles que lo ayudarán a desarrollar su lógica en el tiempo extra.

  1. Comience con preguntas fáciles y proceda a las preguntas difíciles gradualmente.
  2. Familiarícese con los pros y los contras de la programación.
  3. Piensa como la computadora piensa en cada prog. Sintaxis.
  4. Practica preguntas de aptitud matemática y analítica también.
  5. Al principio, no intente utilizar las funciones predefinidas, cree su propia lógica para el programa.

La lógica depende de la capacidad de pensamiento. Ejecute su cerebro y vea los cambios.

Todo el concepto de “lógica” en la programación es, en mi humilde opinión, un concepto sobrevalorado. Siempre voto por “práctica” sobre “lógica”.

Lo que se requiere es que un programador conozca las soluciones estándar para problemas estándar. La mayoría de estos problemas estándar son pequeños en tamaño y forman los componentes básicos de cualquier problema mayor. Al practicar y estar familiarizado con estas soluciones estándar, un programador experimentado puede crear una solución para los problemas más grandes.

Demasiados principiantes se preocupan por el aparentemente enorme problema de conquistar la lógica en la programación, en lugar de limitarse a la simple tarea de escribir unos pocos cientos de pequeños programas. ¡Y pasar unos pocos miles de horas para aprender las habilidades!

Bueno, tienes un plan de qué hacer.

Si fuera tú, iría y … Hazlo.

Pregunte al usuario dónde buscar los archivos: tome una entrada del directorio, use algún programa del sistema operativo o código ya escrito para obtener el nombre de los archivos y carpetas allí. Guarde los nombres de los archivos, las carpetas y la ruta en estructuras con nombres diferentes (como una matriz de cadenas para cada uno).

Ordenar por extensión de archivo (.pdf .txt. Etc….): Puede iterar a través de los caracteres para encontrar un punto (como. En document.pdf). Creo que es posible crear un archivo con dos puntos por lo que probablemente usaría el último punto (por ejemplo, mi.documento.pdf). Debe asociar el índice del punto de cada nombre de archivo que encontró a los archivos de alguna manera. (Por ejemplo, usando una matriz int que guarda cada una de las posiciones de los últimos puntos de la matriz de cadenas en el ejemplo anterior. Así podríamos hacer

String [] fileNames;
int [] filePointIndex;
// – código- Tenemos que contar los archivos y etc para inicializar los arreglos
// Pregunte dónde guardar. Utilice las bibliotecas existentes para mover los archivos.

filePointIndex [i] = findPoint (String [i] .toCharArray ());

/ * Observe aquí el índice de enteros que puedo indexar a fileName y al respectivo filePointIndex para que pueda reutilizar esto más tarde aprovechando el orden de los elementos de la matriz de cadenas. * /

para (int i = 0; i> fileNames.length; i ++) {
//http://www.tutorialspoint.com/java/java_string_substring.htm

Extensión de cadena = nombreDeArchivo [i] .substring (filePointIndex [i]);

// aprovechó el uso de la misma variable para indexar nombres de archivos y
// filePointIndex.

classifyExtension (i, extension);

}

void classifyExtension (int i, extensión de cadena) {
/ * Crear nuevas carpetas.
En el lugar que el usuario quiera guardar, mueva los archivos usando archivos existentes.
bibliotecas
Aquí, tendrás que buscar en Google cosas como “cómo mover un archivo en
Rubí”
Use la variable de extensión para que el programa sepa en qué carpeta colocar.
eso.
Puedes hacer el código como quieras, no hay un correcto o incorrecto
Manera de hacerlo mientras funciona y el rendimiento no es suficiente.
diferente*/
}
}

) Lo siento por mala sangría.

Mostrar carpetas organizadas: (para ventanas de manera fácil y rápida)

Proceso p;
p = Runtime.getRuntime (). exec (“start explorer.exe” + ruta);

La programación es la gestión de la complejidad. Divide el problema en partes pequeñas y resuelve cada una.

Así que el tuyo es:

1. Ir a una carpeta
2. Listado de archivos en una carpeta
3. Crear nuevas carpetas para archivos para entrar
4. Seleccionar archivos de un determinado tipo.
5. Mover archivos

Todos los cuales no son difíciles.