Primes in C: RunTime Error [closed] - c

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 4 years ago.
Improve this question
#include <stdio.h>
int isPrime(int n){
int ndiv = 0;
int i;
for(i=1;i<=n;i=i+1){
if(n%i == 0){
ndiv = ndiv+1;
}
}
if(ndiv == 2){
return 1;
}
else{
return 0;
}
}
int nextPrime(int n){}
int main(){
int a = isPrime(7);
printf(a);
//printf(isPrime(4));
}
This code gives me a run time error, I think there's a problem here with the way I deal with data types while using a functions and the printf command, but I can't really figure it out. Help!

f in printf stands for "format". You need to supply a format string for printing: printf("%d\n", a)
Your isPrime is inefficient: you do not need to attempt dividing all the way up to the number itself. You could stop once you reach the square root of the number
Moreover, you could exit the loop early once you see that the number is not prime.
Once you fix these errors, your program would start running and producing the output that you expect.

Here is a small example of how to use printf. You can find more format specifiers here.
#include <stdio.h>
int main()
{
int a = 97;
int b = 98;
char hello[6] = "world";
printf("%d\n", a);
printf("%d\n", b);
printf("%s\n", hello);
return 0;
}

It is because your method of printing a variable is wrong. Here's the right one.
int main(){
int a = isPrime(7);
printf("%d",a);
}

I'm no C/C++ expert, but try
printf("%d", a);
%d is a format placeholder expecting an integer number, essentially.
That looks like an interesting isPrime function. Not very efficient at all, but different from what I have seen in the past. You can also loop over all the numbers between 1 and n, and just return false (or 0) if you find any that divise n. Or look up more efficient algorithms.

Related

Value returned when printed is different in C (Recursion Problem) [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 6 months ago.
Improve this question
So I got this question in my end-sem:
//The value returned by sam(3,0) of the below function is:
#include <stdio.h>
int sam(int n,int a)
{
if(n==0)
return a;
else
{
a+=n;
sam(--n, a);
a+=n;
}
}
I calculate using Tree-method and got the answer as 6. But if I compile and directly print return I get 2.
int main()
{
printf("%ld",sam(3,0));
return 0;
}
OUTPUT: 2
I checked again and again with what is wrong and couldn't understand. The mystery is if I print(a) just before it returns. It returns 6 (what I calculated).
#include <stdio.h>
int sam(int n,int a)
{
if(n==0){
printf("%d",a); //Check the change here
return a;
}
else{
a+=n;
sam(--n,a);
a+=n;
}
}
int main()
{
sam(3,0);
return 0;
}
OUTPUT: 6
If I explain this I get 4 marks. Enough to change my grade
With a bit of formatting assistance, please note that the below function only explicitly returns when n is 0. Otherwise it performs recursion, but uselessly since it never returns any value created by the recursion.
As a result, you find yourself in the realm of undefined behavior.
#include <stdio.h>
int sam(int n, int a) {
if (n == 0)
return a;
else {
a += n;
sam(--n, a);
a += n;
}
}

Thinking of a code to show if a number is prime or non prime? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Closed 4 years ago.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Improve this question
Now im having problems with the new code in terms of compiling. I have two great answers but chux's answer is addressed to rectify my code . So by his/her directions my new code is:
#include <math.h>
#include <conio.h>
int main()
{
int n,i,r;
printf("Enter A Number to know its prime or non prime");
scanf("%d",&n);
for(i=2;i<=n-1;i++)
{
if(n%i==0)
{r==1;
break;
}
}
if(r==1)
printf("%d is a non-prime number",n);
else
printf("%d is a prime number",n);
return 0;
}
But on the output it show as 87 is a prime number. I don't know why. But can someone spot my mistake?
At few problems
Assignment vs. compare
if (r=1) assigns 1 to r, so if (r=1) is always true. Certainly a compare was needed, #Ry
// if (r=1)
if (r == 1)
No early break
OP's code: The value of r depends on the last iteration. Certainly once a factor is found, loop should exit.
for(i=2;i<=n-1;i++) {
if(n%i==0)
// r=1;
{ r = 1; break; }
else
r=0;
}
Incorrect functionality for n == 0,1
All values n < 2 incorrectly report as prime.
Inefficient
Code performs up to n loops. Only need to perform sqrt(n) loops. Tip: Do not use floating point math here for an integer problem.
// for(i=2;i<=n-1;i++)
for(i = 2; i <= n/i; i++)
Alternate
Only peek if you must code.
First off, " ... conio.h is a C header file used mostly by MS-DOS compilers to provide console input/output. It is not part of the C standard library or ISO C .." I was able to get the code to compile without that library file, so you may wish to consider removing it. As for as the code goes, well here is what I came up with:
#include <math.h>
#include <stdio.h>
int isPrime(int value) {
int i = 2;
for(; i < value; i++) {
if((value % i) == 0) {
return 0;
}
}
return value > 1;
}
int main(void){
int n=0,i=0, r=0;
char * s;
printf("\nPlase enter a number to learn if it is prime:");
scanf("%d",&n);
r = isPrime(n);
printf("\n%d is ", n);
s = (r==0)? " not a prime number" : "a prime number";
puts(s);
return 0;
}
After the user inputs a number, the code checks whether it is prime by calling the function isPrime(), a function that returns an int. isPrime is a simple function that attempts to factor a number.
See here for similar live code that I devised.

What will be the result of next function and array in main? [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 5 years ago.
Improve this question
today i tried to do something new,but i didn't do that correct.Would anyone be able to do that and explain why is it so like that? Thank you in advance
#include<stdio.h>
void function(int a[],int n)/*The definition of function with void type,with parameters
int a[],int n */
{
int i;// declared count,type integer//
for(i=0;i<n;i++)//count goes from 0,to <n,and increment all time while goes//
printf("%d",a[i++]);// printing on the screen integers (a[i],i=i+1)//
printf("\n");// printing the newline //
}
main()
{
int a[]={1,2,3,4,5,6,7}; // declaration of array with 7 elements //
int n=5;// declaration of variable n type integer value of 5 //
function(a,n) // calling the function with parametres a,n//
} // end of sequence //
In my case i got the result of the 1,2,3,4,because i tought that the count goes from 1,to the one number less than n=5,but the IDE show the result of 135 ,i think the problem in my way is with counter...but all advices are welcome,thanks
Please make sure you are posting properly formatted valid C code.
Note that what you get is not one hundred and thirty five, but one, three, and five. You get that because you are incrementing the loop counter twice.
Here's a working, more readable version:
#include <stdio.h>
void function(int a[],int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ",a[i]);
printf("\n");
}
int main(void)
{
int a[]={1,2,3,4,5,6,7};
int n=5;
function(a,n);
return 0;
}
replace
printf("%d",a[i++]);// printing on the screen integers (a[i],i=i+1)//
with
printf("%d",a[i]);// printing on the screen integers (a[i],i=i+1)//
in your code you were incrementing i twice. Once in the while and once in the a[i++]

Two similar programs both have errors on final line [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 6 years ago.
Improve this question
I have written two similar programs for my programming class. I have shared the code for both programs due to them being similar in nature and both have compiler issues on the final line with return0; For the first string of code the error I receive is "expected a declaration" and "syntax error: 'return'". For the second code I receive the errors "return value type does not match the function type" and " 'display': 'void' function returning a value. I have deleted and added {} at different parts of both codes and tried to rearrange the code. Thanks for help in advance.
Code 1
#include "stdafx.h"
#define nums 7
void display(int *);
int main()
{
int channels[nums] = { 2,4,5,7,9,11,14 };
printf("Channels: ");
display(channels);
}
void display(int *channels)
{
int i;
for (i = 0; i < nums; i++);
{
printf("%d", *(channels + i));
}
}
return 0;
code 2
#include "stdafx.h"
#define nums 7
void display(int *);
int main()
{
int channels[nums] = { 2,4,5,7,9,11,13 };
printf("channels: ");
display(channels);
}
void display(int *channels)
{
int i;
for (i = 0; i < nums; i++)
{
printf("%d", *channels);
*channels++;
}
return 0;
}
Return value is always associated to functions. For example, if a function sums up 2 integers and returns the sum of the integers, it will look something like:
int sum( int a, int b ){
return a + b;
}
See here, the return type of the function is int, and what it returns is also an int, since addition of two integers gives you an integer. It's like 2 horses + 3 horses = 5 horses. You cannot do 2 horses + 3 lions = 5 mangoes. I hope you get the point of return value and type.
Now in code 1, the error is you put your return 0; statement out of the main() function. The program cannot detect which function is this return statement associated to. To correct this, move your return statement in the next line after you call the display() function, INSIDE main() function.
Similarly, in code 2, move the return statement from the display() function to the main() function, just as you did in the previous case. This is because void expects nothing to be returned, but you are returning an integer. This is the same like giving a millionaire a loaf of break when he says he doesn't need one, he will surely get frustrated!
Hope that helps.

Can any one explain why this section of code is giving run time error? [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 7 years ago.
Improve this question
I am not finding the correct output of this program.It giving run time error.
#include <stdio.h>
int main()
{
int c = 5, no = 10;
do {
no /= c;
} while(c--);
printf ("%d\n", no);
return 0;
}
It's division by zero. Since you are using a post-decrement in your loop counter c, it is becoming 0 in the last iteration.
Now that you know the reason for the run time error from the answer by #EugeneSh, here's how you can fix it.
do {
no /= c;
} while(--c); // Use pre-increment instead of post-increment.
In addition the all these answer above I just want to say it's better to check whether a number is zero before division -
#include <stdio.h>
int main()
{
int c = 5, no = 10;
do {
if(c!=0){
no /= c;
}
} while(c--);
printf ("%d\n", no);
return 0;
}
This will prevent these kind of runtime error.
Hope it will helps.
Thanks a lot.

Resources