Re: New student, can we write this program in perl...
by MidLifeXis (Monsignor) on Oct 19, 2012 at 16:49 UTC
|
I would use grep and the % operator. Could also do it with the ternary operator and the % operator (although that is approaching too cute to maintain).
Update: based on other provided information in this thread, you may also want to see print, join, say, and chomp.
| [reply] |
|
how do i input array of n numbers in perl sir ..?
| [reply] |
|
my @data = <> would be one way. Could always read one line at a time with while (<>) {...}. This is stuff that you or your instructor should have already covered in your course, isn't it?
Update: if not, take a look at perlintro, perlfaq, perlsyn, perldata, and so on.
| [reply] [d/l] [select] |
|
|
|
|
Re: New student, can we write this program in perl...
by choroba (Cardinal) on Oct 19, 2012 at 16:36 UTC
|
Hallo rahulraina7, wellcome to the Monastery.
This is not a code writing service. Can you show how you would solve the problem in C? We can then describe what changes you should do to the code to translate it to Perl.
| [reply] |
|
#include<stdio.h>
#include<conio.h>
void main()
{
int a[20],b[20],c[20],i,j=0,k=0,n;
clrscr();
printf("Enter the number of elements");
scanf("%d",&n);
printf("Enter n numbers\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
if((a[i]%2)==0)
{
b[j]=a[i];
j++;
}
else
{
c[k]=a[i];
k++;
}
}
printf("The even numbers are\n");
for(i=0;i<j;i++)
{
printf("%d\n",b[i]);
}
printf("The odd numbers are\n");
for(i=0;i<k;i++)
{
printf("%d\n",c[i]);
}
getch();
}
It will basically input an array of 'n' numbers and then separate it into two arrays, one contains odd numbers and one contains even numbers.
Hoping to hear from you soon.
| [reply] [d/l] |
|
I would change your program to this one:
#!/usr/bin/perl
use warnings;
use strict;
print 'Enter the number of elements: ';
my $n = <>; # Read the input.
chomp $n; # Remove the newline.
print "Enter $n numbers.\n";
my @a;
for (1 .. $n) {
push @a, scalar <>; # Push numbers to the
+array.
}
chomp @a; # Remove the newlines.
print join (' ', 'The even numbers are:',
grep $_ % 2, @a), # grep filters the num
+bers = 1 modulo 2
"\n";
print join (' ', 'The odd numbers are:',
grep 1 - $_ % 2, @a),
"\n";
Not really similar, is it? The main differences:
- No main function needed.
- Variables are declared where needed.
- The diamond operator is used to read from the input.
- for can be used with simpler syntax, avoiding off by 1 errors (see perlsyn)
- grep can be used to filter arrays. No need for temporary variables to keep the results if you do not need them later.
| [reply] [d/l] [select] |
|
use strict;
# #include<conio.h>
#void main()
#{
my (@a,@b,@c,$i,$j,$k,$n);
print("Enter the number of elements\n");
$n = <>;
printf("Enter %d numbers\n",$n);
for($i=0;$i<$n;$i++)
{
push @a, scalar(<>);
}
for($i=0;$i<$n;$i++)
{
if(($a[$i]%2)==0)
{
$b[$j]=$a[$i];
$j++;
}
else
{
$c[$k]=$a[$i];
$k++;
}
}
print("The even numbers are\n");
for($i=0;$i<$j;$i++)
{
printf("%d\n",$b[$i]);
}
printf("The odd numbers are\n");
for($i=0;$i<$k;$i++)
{
printf("%d\n",$c[$i]);
}
<>;
#}
Not that this was the best (or even just a particularly good) way to write this, but it's the minimal change. Huge difference from the C code, right?
Jenda
Enoch was right!
Enjoy the last years of Rome.
| [reply] [d/l] |
Re: New student, can we write this program in perl...
by zentara (Archbishop) on Oct 20, 2012 at 09:24 UTC
|
Shouldn't this question get outsourced to India? :-)
| [reply] |
|
Obviously it already did. Now that they've got the lowest bid from NASA, they're trying to figure out how to do it. But they're cheaper, nonetheless.
| [reply] |
|
:-) I'm glad I'm friends with Krishna and Shiva.
| [reply] |
Re: New student, can we write this program in perl...
by tobyink (Canon) on Oct 19, 2012 at 21:00 UTC
|
There was recently a thread on the odd/even topic here: Subroutine Even/Odd.
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
| [reply] |
Re: New student, can we write this program in perl...
by aaron_baugher (Curate) on Oct 19, 2012 at 19:47 UTC
|
#!/usr/bin/env perl
use Modern::Perl;
my @n = (1..100);
my @e;
my @o;
map { push @{($_ % 2 ? \@o : \@e)}, $_ } @n;
say for @e;
Here's another:
#!/usr/bin/env perl
use Modern::Perl;
my @n = (1..100);
my @o = sort { $a % 2 - $b % 2 } @n;
my @e = splice @o, 0, @o/2, ();
say for @e;
Aaron B.
Available for small or large Perl jobs; see my home node.
| [reply] [d/l] [select] |
Re: New student, can we write this program in perl...
by clueless newbie (Curate) on Oct 19, 2012 at 18:17 UTC
|
Depending on how you interpret "two different arrays" the following might be acceptable,
#!/usr/bin/perl
use strict;
use warnings;
my $number;
# use grep to accept only the integers
push(@{$number->[$_ % 2]},$_)
for (grep { m{^-?\d+$} } @ARGV);
# Using $" to insert ", "
local $"=', ';
print "The even numbers are @{$number->[0]}\n";
print "while the odd numbers are @{$number->[1]}.\n";
> perl EvenOdd.pl 1 2 -nogo 3.4 3 4 5 -4
The even numbers are 2, 4, -4
while the odd numbers are 1, 3, 5.
| [reply] [d/l] [select] |