Prosty kod działa/nie działa w zależności od programu.

0

Witam :) mój pierwszy post i od razu problem.
Z racji wymagań jakie będę musiał w przyszłości spełnić by znaleźć pracę potrzebuję znajomości C++.
Problem pojawia się na samym początku przy wyborze programu, zdecydowałem, że chciałbym pisać w Visual Studio 2015. Bardziej odpowiada mi design całego produktu i to jakie sprawia pierwsze wrażenie. Zainstalowałem też Code Blocks dla porównania. By sprawdzić jak to wszystko wygląda użyłem kodu na całkowanie z pewnej strony

 // Calkowanie numeryczne - metoda Monte-Carlo
// www.algorytm.org
// (c)2007 by Tomasz Lubinski
 
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h" 
#define MAX(a,b) (a>b)?a:b
 
//funkcja dla ktorej obliczamy calke
float func(float x) {
return x*x+3;
}
 
//1 jeżeli punkt leży nad osią OY i jednocześnie pod wykresem funkcji całkowanej
//-1 jeżeli punkt leży pod osią OY i jednocześnie nad wykresem funkcji całkowanej
//0 w przeciwnym razie
int funcIn(float x, float y) {
if (( y > 0) && (y <= func(x)))
return 1;
else if (( y > 0) && (y <= func(x)))
return -1;
return 0;
}
 
//random number from a to b
double randomPoint(double a, double b) {
return a + (double)rand()/(double)(RAND_MAX+1) * (b-a);
}
 
//get data, algorithm
int main(){
float xp, xk, yp, yk, calka;
int i, n, pointsIn;
 
printf("Podaj poczatek przedzialu calkowania\n");
scanf("%f", &xp);
 
printf("Podaj koniec przedzialu calkowania\n");
scanf("%f", &xk);
 
printf("Podaj dokladnosc calkowania (w setkach punktow)\n");
scanf("%d", &n);
n *= 100;
 
yp = 0;
yk = ceil(MAX(func(xp), func(xk)));
 
pointsIn = 0;
srand((unsigned)time( NULL ));
 
for (i=0; i<n; i++) {
pointsIn += funcIn(randomPoint(xp, xk), randomPoint(yp, yk));
}
 
calka = (pointsIn / (double)n) * ((xk-xp) * (yk-yp));
 
printf("Wartosc calki wynosi w przyblizeniu %f\n", calka);
 
return 0;
}

W Code Blocks wybieram New Project - Files - C++Source - wpisuję kod - build i elagancko powstaje plik .exe który działa:).
Niestety w Visualu przy buildzie

 1>------ Build started: Project: ConsoleApplication5, Configuration: Debug Win32 ------
1>  stdafx.cpp
1>  ConsoleApplication5.cpp
1>c:\users\rafal\documents\visual studio 2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp(6): warning C4627: '#include "stdlib.h"': skipped when looking for precompiled header use
1>  c:\users\rafal\documents\visual studio 2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp(6): note: Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\rafal\documents\visual studio 2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp(7): warning C4627: '#include "math.h"': skipped when looking for precompiled header use
1>  c:\users\rafal\documents\visual studio 2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp(7): note: Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\rafal\documents\visual studio 2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp(8): warning C4627: '#include "time.h"': skipped when looking for precompiled header use
1>  c:\users\rafal\documents\visual studio 2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp(8): note: Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\rafal\documents\visual studio 2015\projects\consoleapplication5\consoleapplication5\consoleapplication5.cpp(62): fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Nie mam pomysłu na rozwiązanie.

0

Jeśli masz włączony “precompiled header”, każdy plik .cpp powinien na samej górze mieć

#include "stdafx.h"

gdzie stdafx.h to domyślna nazwa prekompilowanego nagłówka.

Jeśli nie chcesz się w to bawić, możesz wyłączyć w opcjach projektu, albo odznaczyć podczas tworzenia nowego projektu.

Nagłówek prekompilowany znacząco przyspiesza rekompilację projektu – umieszcza się w nim #include'y standardowych bibliotek, a we właściwym .cpp dołącza się tylko stdafx.h, który jest przez kompilator traktowany specjalnie. Ma to głównie znaczenie gdy używa się dużych, ciężkich dla preprocesora bibliotek, np. Boost.

0

Dziękuję za szybką odpowiedź :) bo dodanie stdafx.h
Niestety pojawia się dalej błąd.

1>------ Build started: Project: Calka, Configuration: Debug Win32 ------
1>  Calka.cpp
1>c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(48): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(54): warning C4244: 'argument': conversion from 'double' to 'float', possible loss of data
1>c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(57): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(38): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>  c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h(1270): note: see declaration of 'scanf'
1>c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(41): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>  c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h(1270): note: see declaration of 'scanf'
1>c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(44): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>  c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h(1270): note: see declaration of 'scanf'
1>c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(66): error C2084: function 'int main(void)' already has a body
1>  c:\users\rafal\documents\visual studio 2015\projects\calka\calka\calka.cpp(33): note: see previous definition of 'main'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Jeszcze wcześniej wyskoczyło okienko, że nie może zlokalizować pliku calka.exe w podanej lokalizacji

0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zapoznaj się z inkrementacją, bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Nie używaj innego niż angielskie nazewnictwa: http://4programmers.net/Forum/1208091 (a zwłaszcza mieszanego)

1 użytkowników online, w tym zalogowanych: 0, gości: 1