This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.
Closed 10 years ago.
This code is meant to list the number from 1-9 and display next to each number the frequency that it appears in the 10,000 random numbers that have been generated.
The code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int counts[10];
int i;
int random;
srand(time(0));
for (i = 0; i < 10; i++)
counts[i] = 0;
for (i = 0; i<= 10000; i++)
{
random = (int)(10.0*rand()/(RAND_MAX+1.0));
counts[random]++;
}
for (i = 0; i<10; i++);
printf("%d occurs %f%%\n", i, i/100.0);
return(0);
}
However when I run the program I get a list from 1-9 which I want but next to it lists 1-9 but in decimal instead of the frequency. this is what i get when i run it:
1 occurs 0.010000%
2 occurs 0.020000%
3 occurs 0.030000%
4 occurs 0.040000%
5 occurs 0.050000%
6 occurs 0.060000%
7 occurs 0.070000%
8 occurs 0.080000%
9 occurs 0.090000%
What do i need to change in order to get the frequency of each number,
also when I run the code from terminal using emacs it lists 1-9 but when I run the code in eclipse it only displays 10 occurs 0.100000% in the console. Is there any reason why this happens?
It looks like you're storing the frequencies of each number correctly, you're just not displaying them. Your output doesn't refer to the counts array at all.
In this line:
printf("%d occurs %f%%\n", i, i/100.0);
i/100.0 should be counts[i]/10000.
Related
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.
Closed 9 years ago.
I am trying to create a program that will count the frequency of 10 numbers that i will choose but when i am trying to run it it doesn't even run the printf and closes.Any ideas? thanks
#include <stdio.h>
int main()
{
int i,j,A[10]={0},C[10]={0};
for(i=0;i<10;i++)
{
scanf("%d /n",&A[i]);
}
for(j=0;j<10;j++)
{
if(A[i]==j)
{
C[j]=C[j]+1;
printf(" %d ",C[j]);
break;
}
}
getch();
}
The line
if(A[i]==j)
looks wrong - i was the counter for a previous loop and is now 10 (so beyond the bounds of your array). Did you mean
if(A[j]==j)
// ^
instead?
Changing this makes the program run for me. I don't think it does what you want yet. The break statement causes execution to halt the first time you find any match.
Hopefully this is enough hints to allow you to investigate how to count frequency of the numbers then print them all out yourself.
You need to again loop over the A array in order to check the value of each element:
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(A[i]==j)
{
C[j]=C[j]+1;
printf(" %d ",C[j]);
break;
}
}
}
If you know that the values in A will range from 0-9 then you could completely remove the inner loop and just do C[A[i]]++;
After this your C array will contain a count of each number the user input. e.g. C[5] will contain the number of 5s found, so you can output this as you see fit
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.
Closed 9 years ago.
i'm beginner in C programming language, i have piece of code written in C language on linux Platform my code is :
#include <stdio.h>
int main(int argc, char* argv[]){
printf("Count Of Args %d \n",argc);
int i = 0;
while(i < argc){
printf("%s \n",argv[i]);
printf("loop N: %d \n",i);
i++;
}
return 0;
}
While loop does not working and i don't know why... please show me where is problem? thanks.
Works perfectly:
$ ./program abc def
Count Of Args 3
./program
loop N: 0
abc
loop N: 1
def
loop N: 2
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.
Closed 9 years ago.
So I have made the following program successfully that will allow the user to punch in a number(between 1 to 12) and then tell the user after how many tries did that did the two dice roll the number originally typed, successfully.
So if the person types 7. it will do the random roll the first time if the two dice total is 5 it will display..."Result of Throw 1 : 3 + 2" ..etc
But for some reason when I do it, it takes over 1000s of turns before 7 pops up as a result, finishing the program. odds for dice should around 1/12 not 1/1000 so I know I am coding something wrong. If anyone can help me figure out what is wrong, that would be great.
Here is my code so far...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int sought;
int roll1 = 7;
int roll2 = 7;
int minAmount = 0;
int maxAmount = 6;
int counter = 0;
printf("Dice Thrower\n");
printf("==============\n");
printf("Total Sought : ");
scanf("%d", &sought);
while (sought > 12){
printf("Bad Input! Try Again!\n");
printf("Total Sought : ");
scanf("%d", &sought);
}
while (sought != roll1 + roll2){
counter++;
srand(time(NULL));
roll1 = minAmount + rand() % (maxAmount + 1 - minAmount);
roll2 = minAmount + rand() % (maxAmount + 1 - minAmount);
printf("Result of Throw %d : %d + %d\n", counter, roll1, roll2);
}
printf("You got your total in %d throws!\n", counter);
}
You keep calling srand() for each dice roll. That is, you initialize the random seed using current time for each row. Thus, the result only changed once per 1 second (not once per roll).
Move srand(time(NULL)) to the front of your while loop.
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.
Closed 10 years ago.
I have an error somewhere in my code, I think I am entering an infinite loop.
Basically I get a matrix and two indexes, i,j, and i need to count how many neighbors around [i][j] have a value of 1 or 2.
this is my code:
int number_of_living_neighbors(matrix mat,int i, int j, int n,int m)
{
int counter=0,row_index=0,column_index=0;
for(row_index=i-1;row_index<=i+1;row_index++)
{
for(column_index=j-1;column_index=j+1;column_index++)
{
if((row_index>=0)&&(row_index<n)&&(column_index>=0)&&(column_index<m))
{
if((mat[row_index][column_index]==1)||(mat[row_index][column_index]==2))
counter++;
if((row_index==i)&&(column_index==j)&&(mat[i][j]==1))
counter--;
}
}
}
printf("The number of living neighbors is %d", counter);
return counter;
}
it doesnt print anything.
mat is the matrix i get, i,j are the pointers, n is number of rows, m is number of columns.
for(column_index = j-1 ; column_index = j+1; column_index++)
Your condition contains an assignment, not a comparison. You probably want to use <= instead of =:
for(column_index = j-1 ; column_index <= j+1; column_index++)
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center.
Closed 10 years ago.
I have written a code to find nth ugly number(a number which has at least one prime factor grater than 5) where n is a given input. my program runs well if the user inputs something less than 240. But if input gets bigger than that, program crashes!. My question is if it is a time consuming problem then it should take time but why the program crashes? I have used double everywhere so it might not be the matter of variable capacity!!
my code is below:
#include<stdio.h>
#include<math.h>
double primes[1000]={2,3,5};
int serial=3;
double next_prime()
{
double f=primes[serial-1]+2;
int count;
for(count=1;primes[count]<=(sqrt(f)+1) && count<serial;count++){
if(fmod(f,primes[count])==0){
f+=2;
count=1;
}
}
return primes[serial++]=f;
}
int main()
{
double ugly_serial=12,ugly_number=16,j;
int c,count,loop,input;
scanf("%d",&input);
while(ugly_serial<input)
{
loop=0;
for(c=3;primes[c-1]<=sqrt(ugly_number);c++){
j=next_prime();
}
for(count=3;count<c;count++){
if(fmod(ugly_number,primes[count])==0){
loop=1;
break;
}
}
if(loop==0){ugly_serial++;}
ugly_number++;
}
printf("%.0lf",ugly_number);
return 0;
}
I have compiled and run your code. The program works fine with all the input I have tried, including 56565.
Are you sure you are running the most recently compiled version of your program?