Para el enamorado del c#, strings & espacios

IS4kO

Si te entendí bien:

http://pastebin.com/f7207bb9e

erdanblo

Gracias. <3

Aunque ya puestos, en consola xDDDD (es coña, asi me lo miro y lo paso, luego cuando me ponga digo algo más.)

erdanblo

Al final lo he hecho de otra forma, por que de la tuya hay unas cosas que no me quedaban 100% claro, y como es para un exámen, he preferido estudiarmelo (me ha servidor mucho), mira como lo he hecho al final:

http://mv.pastebin.com/m37a589b5

Ahora lo edito, y lo meto todo en una función, que me lo pide el ejercicio.

Estuve mirando los apuntes, y lo de "Espacio = true" era un poco recursivo, por que puedo jugar con los sub elementos (o eso pone en mi apuntes), es decir, si pongo Elemento[i-1] me voy al anterior :D

MUCHAS GRACIAS.

sh0ty

Me parece que puedes ahorrarte muchas condiciones al estilo de 'i == 0' si en vez de eso pones '!i' que no hace mas que insertar un 1 en caso de que el valor de la variable sea 0, o un 0 en caso de que la variable sea igual o mayor que 1. No es mas que la inversa binaria.
Ademas he visto que podrias evitar el if vacio.

erdanblo

if (i == 0)
{
CadenaNueva = CadenaNueva+ ArrayCadena[0];
}

Eso es una ñapa de última hora por que me daba un error de índices.

Si te fijas, para ver el carácter anterior uso:

ArrayCadena[i-1], entonces cuando i es igual que 0, me da error.

El resto de iniciación y eso, es por que C# te pide que inicies todo. (no se si te refieres a eso o te parece absurdo por que no estes acostumbrado a C#).

Gracias de todos modos, toda mejora es bien recibida, aunque bueno, lo que intento es asimilar el código y el funcionamiento para el examen (tampoco creo que sea muy dificil y voy sobrado o eso creo xDDDD, soy de ASI.)

sh0ty

Aunque no tenga ninguna importancia me referia al:
if ((ArrayCadena.CompareTo('\0') == 32) && (ArrayCadena.CompareTo('\0') == 32))
{
}

Y apesar de no ser de C# me da la impresion que con dos != habria suficiente, eso es todo.
Por cierto, donde estudias?

erdanblo

ajá, ¿y tu que propones?

No lo veo del todo claro que quieres decirme :D (estoy ya embotao de Visual studio y solo he hecho dos porquerias xDDD, que asco programar.)

sh0ty

Cuando usas el '==' es para ver si dos variables (o lo que sean) son iguales, con '!=' haces justamente lo contrario, que es justo lo que a ti te interesa, no es asi?

erdanblo

ZAS, Palo de remo. (¿es así no?)

PD. Lo edito y ahora me sale todo sin espacios alguno, xDDDDDDDDDDDDDDDDDDDDDDD

Da igual, mañana lo veré, que estoy ya rayadisimo con esto.

sh0ty

Golpe de remo es xD

Ed. Ya se donde esta el problema pero mejor te lo dejo a ti. Si no puedes resolverlo puedes preguntarme.

erdanblo

Tengo el culo como el cacas y la cabeza que ni os cuento...

¿Me podeis decir si esto existe?

A ver, me pide el ejercicio:

Crear un array int de 10 elementos (de 0 a 9), y una variable int llamada desplazamiento.

La cosa consiste en hacer una rueda, es decir:

0|1|2|3|4|5|6|7|8|9

Que si desplazo dos, quede así:

8|9|0|1|2|3|4|5|6|7

¿Existe algo que le diga yo a las arrays "tal" desplaza todo los indices en 2 y que cuando llegue a 9 empiece de nuevo?

La verdad, se supone que es muy simple, pero yo no tenía nada en mis apuntes, ni nadie de clase, y ha todos nos han hecho el cacas... en ese ejercicio.

KaBeZiLLa

desplazamiento = desplazamiento % array.length;
desplazamiento = array.length - desplazamiento;

array = array[ (i + desplazamiento) % array.length ];

kas

Porque en un ejercicio de auto aprendizaje no lo intentáis con las Regular Expressions?

http://msdn2.microsoft.com/en-us/library/2k3te2cs(VS.80).aspx
http://www.csharphelp.com/archives/archive21.html
http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx

erdanblo

#13 Si no lo he dado en clase... (además, casi ni me entero aun en PHP...)

kas

Como digo, hazedlo como un ejercicio de autoaprendizaje, por ejemplo cuando acabes lo q tienes q entregar.

sh0ty

Es facil, date cuenta de que tienes 10 indices (del 0 al 9), si al primero le sumas 2 obtendras la siguiente posicion (0+2=2). El problema se complica un poco cuando llegas al indice 8 ya que 8+2=10 y no existe tal indice (dado que 9 es el maximo indice posible). Entonces lo unico que tienes que hacer es comprobar si la suma es mayor que 9 y si es asi restarle 10 (porque el array contiene 10 elementos) con lo cual en el anterior ejemplo obtemos 0, que no es ni mas ni menos que la siguiente posicion perteneciente al indice 8.

Tambien puede que te resulte complicado guardar la informacion de un indice para poder usarla posteriormente pero seguro que puedes resolverlo tu mismo, no entraña mucha dificultad.

erdanblo

/me cry

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication13
{
class Program
{
static void Main(string[] args)
{
int[] arrDig1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int desplazamiento = 1;

        for (int i = 0; i <= 9; i++)
        {
            if((arrDig1[i] + desplazamiento) > 9) {
                arrDig1[(i+desplazamiento)-10] = arrDig1[i];
            }else{
                arrDig1[i] = i;
            }
            
        }
        for (int i = 0; i <= 9; i++)
        {
            Console.WriteLine(arrDig1[i]);
        }
        Console.ReadLine();

    }
}

}

http://mv.pastebin.com/m9c265fc

Joder, tan palo soy?

Sigo sin pillarlo xDDDDDD

Llevo ya dos dias para la mierda esta y no lo entiendo.

sh0ty

}else{
arrDig1 = i;
}

Esa expresion no sirve ya que si el indice es 2 le asigna 2 y asi no resuelves nada. Pero vas por buen camino, solo es un fallo tonto.

}else{
arrDig1[i+desplazamiento] = i;
}

Otra cosa que tienes que tener en cuenta es que si a un indice le asignas un numero despues no podras saber que numero tenia ese indice antes de que le cambiaras el valor. Piensa tu mismo en como solucionar eso.

erdanblo

Claro, crear otro array, :) muchas gracias.

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication13
{
class Program
{
static void Main(string[] args)
{
int[] arrDig1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] arrDig2 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int desplazamiento = 2;

        //Como máximo hasta 10 de desplazamiento.

        for (int i = 0; i <= 9; i++)
        {
            if ((arrDig1[i] + desplazamiento) > 9)
            {
                arrDig2[(i+desplazamiento) - 10] = arrDig1[i];
            }
            else
            {
                arrDig2[i+desplazamiento] = arrDig1[i];
            }

        }
        for (int i = 0; i <= 9; i++)
        {
            Console.WriteLine(arrDig2[i]);
        }
        Console.ReadLine();

    }
}

}

http://mv.pastebin.com/m5842de38

El problema es que cuando desplazamiento es mayor que 10, da error, pero casi que me doy por satisfecho con esto.

KaBeZiLLa

es mas facil usando la operacion modulo:

int main()
{
const int kTam = 10;

int a[kTam] = {0,1,2,3,4,5,6,7,8,9};
int b[kTam];
int desplazamiento = 2;
int i;

desplazamiento = kTam - (desplazamiento % kTam);

for(i=0; i<kTam; i++)
b = a[( i + desplazamiento) % kTam];

for(i=0; i<kTam; i++)
printf("%i ", b);
}

sh0ty

Pues si, con el resto es mas facil y se soluciona el problema de que el desplazamiento no pueda ser mayor que 10, pero me parece que tienes el codigo mal. La variable desplazamiento no la tendrias que modificar sino solamente dejarla en 2, 3 o el numero del que se trate.

KaBeZiLLa

El codigo es correcto, puedes probarlo y ver como funciona.

El desplazamiento es modificado precisamente para que funcione correctamente.

Simplemente sustituyo un desplazamiento de 2 hacia la izquierda por uno de 8 hacia la derecha, que es lo mismo ya que el vector mide 10.

Si no hiciera esto al hacer el modulo 10 de un numero menor que cero el resultado no seria correcto, y por tanto el programa no funcionaria correctamente.

sh0ty

int main()
{
const int kTam = 10;

int a[kTam] = {0,1,2,3,4,5,6,7,8,9};
int b[kTam];
int desplazamiento = 2;
int i;

if (desplazamiento<0)
desplazamiento = kTam - (desplazamiento % kTam);

for(i=0; i<kTam; i++)
b[(i + desplazamiento) % kTam] = a;

for(i=0; i<kTam; i++)
printf("%i ", b);
}

Asi si, porque de lo contrario si el desplazamiento fuese positivo el resultado no seria el esperado.

erdanblo

Ya he terminado los examenes, así que me pondre mas en serio con esto, aunque como dije, con la 1º opción de sh0ty casi que me daba por convencido ya :D

Aun así, gracias kabezilla.

Usuarios habituales

  • erdanblo
  • sh0ty
  • KaBeZiLLa
  • kas
  • IS4kO