Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

Hi :D I'm having troubles with my set operations. After making the junction of the sets, it says that there's an uninitialized value in numeric lt <<> at Conjuntos def line 174, <STDIN> line 9.Can somebody help me please?

#!/usr/bin/perl use 5.010; use strict; use warnings; sub busca_binaria_rec{ my ($conjunto,$elemento,$primero,$cuantos)=@_; my $izquierda=$primero; my $derecha=$cuantos; my $medio=($izquierda+$derecha)>>1; if($izquierda>$derecha){ return (-1); } else{ if((@{$conjunto}[$medio])==$elemento){ return($medio); } if(@{$conjunto}[$medio]<$elemento){ $medio+=1; busca_binaria_rec((\@{$conjunto}),$elemento,$medio,$derecha); }else{ $medio-=1; busca_binaria_rec((\@{$conjunto}),$elemento,$izquierda,$medio) +; } } } #pido el tamaño del conjunto 1, lo declaro y lleno (también el que + usaré para guardar en binario) my ($cuantos1,$cuantos2,$cuantosU,$elemento,$tamanioreal, $conj1bi +n,$conj2bin,$interbin,$cuantos_inte); $conj1bin=0; $conj2bin=0; $elemento=0; print "Escribe el tamanio del conjunto 1 (maximo 65535)\n"; $cuantos1=<STDIN>; my @conjunto1; #pedir_conjunto(\@conjunto1,$cuantos1); print "\nIngresa los $cuantos1 numeros del conjunto seguidos por u +n enter :) \n"; for(my $i=0;$i<$cuantos1;$i++) { $conjunto1[$i]=<STDIN>; } print "\n"; #ordenar(\@conjunto1,$cuantos1); #ordenamos conjunto para hacer má +s facil la vida my $temp=0; for(my $e=0;$e<$cuantos1;$e++){ for(my $j=0;$j<$cuantos1;$j++){ if($conjunto1[$e]<$conjunto1[$j]){ $temp=$conjunto1[$e]; $conjunto1[$e]=$conjunto1[$j]; $conjunto1[$j]=$temp; } } } #pedimos el tamaño,declaramos y llenamos el 2do conjunto print"\nEscribe el tamanio del conjunto 2(maximo 65535)\n"; $cuantos2=<STDIN>; my @conjunto2; #pedir_conjunto(\@conjunto2,$cuantos2); print "\nIngresa los $cuantos2 numeros del conjunto seguidos por u +n enter :) \n"; for(my $f=0;$f<$cuantos2;$f++) { $conjunto2[$f]=<STDIN>; } print "\n"; #ordenar(\@conjunto2,$cuantos2);#lo ordeno para hacer más sencilla + la búsqueda my $tempo=0; for(my $k=0;$k<$cuantos2;$k++){ for(my $j=0;$j<$cuantos2;$j++){ if($conjunto2[$k]<$conjunto2[$j]){ $tempo=$conjunto2[$k]; $conjunto2[$k]=$conjunto2[$j]; $conjunto2[$j]=$tempo; } } } #una vez que sabemos el tamaño de los conjuntos 1 y 2, vamos a dec +larar el conjunto universo y el vector donde guardaremos la intersecc +ión $cuantosU=$cuantos1+$cuantos2; if($cuantos1<$cuantos2?1:0){#el tamaño máximo de la intersección e +s el tamaño del conjunto más pequeño $cuantos_inte=$cuantos1; } else{ $cuantos_inte=$cuantos2; } my (@universo,@internum); #$tamanioreal=(crear_universo(\@universo,\@conjunto1,$cuantos1,\@c +onjunto2,$cuantos2,$cuantosU)); #crea el conjunto universo y nos dice + el tamaño real para que no imprima basura my $cont=0; for(my $e=0;$e<$cuantos1;$e++){ $universo[$e]=$conjunto1[$e];#meto todos los datos del 1er con +junto en el universo } for(my $n=0;$n<$cuantos2;$n++){ $elemento=$conjunto2[$n]; if(busca_binaria_rec(\@universo,$elemento,0,$cuantos1-1)==-1){ +#veo si los datos del 2do conjunto están, y si no, los agrego $universo[$cuantos1+$cont]=$elemento; $cont++; } } $tamanioreal=($cuantos1+$cont);#regresa el tamaño total del un +iverso para evitar imprimir basura #ordenar my $tempor=0; for(my $h=0;$h<$tamanioreal;$h++){ for(my $j=0;$j<$tamanioreal;$j++){ if($universo[$h]<$universo[$j]){ $tempor=$universo[$h]; $universo[$h]=$universo[$j]; $universo[$j]=$tempor; } } } print"\nLa union de los conjuntos es:\n"; #imprimir_conjunto(\@universo,$tamanioreal); #imprime la unión del + conjunto print"\n"; for(my $u=0;$u<$tamanioreal;$u++) { print "$universo[$u] \t"; } print"\n"; #ahora vemos la intersección con el universo de cada conjunto uno +en bits #$conj1bin = phi(\@universo,$tamanioreal,\@conjunto1,$cuantos1,$co +nj1bin); $conj1bin=0; for(my $e=0;$e<$tamanioreal;$e++){ $conj1bin<<=1; for(my $p=0;$p<$cuantos1;$p++){ if($universo[$e]==$conjunto1[$p]){ $conj1bin|=1; $p=$cuantos1; } } } #$conj2bin = phi(\@universo,$tamanioreal,\@conjunto2,$cuantos2,$co +nj2bin); $conj2bin=0; for(my $e=0;$e<$tamanioreal;$e++){ $conj2bin<<=1; for(my $m=0;$m<$cuantos2;$m++){ if($universo[$e]==$conjunto2[$m]){ $conj2bin|=1; $m=$cuantos2; } } } #ya que tenemos los conjuntos en binario, sacamos la intersección +entre ellos sobre bits :) $interbin=($conj1bin & $conj2bin); #aplicamos la función phi inversa :D ~(*u*)~ #$cuantos_inte=phi_inv(\@universo,$tamanioreal,\@internum,$cuantos +_inte,$interbin); my $m=0; my $corre=$interbin; for(my $n=$tamanioreal-1;$n>=0;$n--) { if(($corre&1)==1){ $internum[$m]=$universo[$n]; $m++; } $corre>>=1; } #ordenar((\@{$internum}),$cuantos_inte); $temp=0; for(my $q=0;$q<$cuantos_inte;$q++){ for(my $j=0;$j<$cuantos_inte;$j++){ if($internum[$q]<$internum[$j]){ $temp=$internum[$q]; $internum[$q]=$internum[$j]; $internum[$j]=$temp; } } } $cuantos_inte=$m; print "\nLa interseccion de los conjuntos es:\n"; #imprimir_conjunto(\@internum,$cuantos_inte); print"\n"; for(my $i=0;$i<$cuantos_inte;$i++) { print "$internum[$i] \t"; } print"\n"; #la resta de conj 1 y conj2 my $restbin=($conj1bin & ~$conj2bin); #$cuantos_inte=phi_inv(\@universo,$tamanioreal,\@internum,$cuantos +1,$restbin); my $g=0; $corre=$restbin; for(my $n=$tamanioreal-1;$n>=0;$n--) { if(($corre&1)==1){ $internum[$m]=$universo[$n]; $g++; } $corre>>=1; } #ordenar($internum),$cuantos1); $temp=0; for(my $i=0;$i<$cuantos1;$i++){ for(my $j=0;$j<$cuantos1;$j++){ if($internum[$i]<$internum[$j]){ $temp=$internum[$i]; $internum[$i]=$internum[$j]; $internum[$j]=$temp; } } } $cuantos_inte=$g; print"\nLa diferencia entre el conjunto1 y el conjunto2 es:\n"; #imprimir_conjunto(\@internum,$cuantos_inte); print"\n"; for(my $i=0;$i<$cuantos_inte;$i++) { print "$internum[$i] \t"; } print"\n";

In reply to Set operations by Panfi96

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2021-06-25 12:48 GMT
Find Nodes?
    Voting Booth?
    What does the "s" stand for in "perls"? (Whence perls)

    Results (136 votes). Check out past polls.