Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Calculateur des heures de prière. | |
| | |
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Calculateur des heures de prière. Lun 29 Avr 2019 - 5:54 | |
| Comme promis, voici mon code CalcPrayerTimes.bas le Calculateur des heures de prière. Tout est dans le code. - Code:
-
rem ============================================================================ rem CalcPrayerTimes.bas rem Calculateur des heures de prière par Papydall rem Avril 2019 rem ============================================================================
Init() Gui() Grille(NbJours(month,year)) Run()
end rem ============================================================================ SUB Init() label clic, change label 1, 2, 3, 4, 5, 6, 7, 8 : ' pour restore_label dim year, month, day dim longitude, latitude, timeZone dim fajrTwilight, ishaTwilight dim fajrTime, sunRiseTime, zuhrTime, asrTime, maghribTime, ishaTime dim d, l, m, lambda, obliquity, alfa, st, dec, durinal_Arc, noon, Ut_Noon dim Asr_Alt, Asr_Arc, Esha_Arc, Fajr_Arc dim prayTime$(5) dim hours, minutes ,h$, m$, a, n, dst, methode, p$, ville$, pays$ dim NbPays : NbPays = 8 : ' 8 c'est le nombre des pays proposés dans le programme dim Fuseau(8), H_Ete(8) day = date_day : month = date_month : year = date_year : ' La date courante END_SUB rem ============================================================================ SUB GUI() dim_local i,t$ t$ = " Calculateur des heures de prière par Papydall " color 0,240,255,255 width 0,1100 : height 0,800 : top 0,(screen_y - height(0)) / 2 left 0,(screen_x - width(0))/2 shape 5 : top 5,5 : left 5,450 : width 5,600 : height 5,50 shape_rectangle_rounded 5 : color 5,25,100,50 shape 6 : top 6,5 : left 6,20 : width 6,420 : height 6,50 shape_rectangle_rounded 6 : color 6,25,100,50 alpha 10 : top 10,20 : left 10,40 : font_color 10,250,100,50 font_bold 10 : font_name 10,"tahoma" : font_size 10,12 caption 10,t$ : caption 0,t$ : application_title t$ alpha 20 : top 20,80 : left 20,010 : caption 20,"Latitude : " edit 21 : top 21,80 : left 21,070 : width 21,60 : font_bold 21 : text 21,"35.6333" hint 21,"En degrés décimaux (± 90°) positive au Nord" : on_change 21,change alpha 30 : top 30,80 : left 30,140 : caption 30,"Longitude : " edit 31 : top 31,80 : left 31,210 : width 31,60 : font_bold 31 : text 31,"10.9" hint 31,"En degrés décimaux (± 180°) positive à l'est" : on_change 31,change alpha 40 : top 40,80 : left 40,285 : caption 40,"Fuseau :" spin 41 : top 41,80 : left 41,335 : width 41,60 : min 41,-12 : max 41,12 : font_bold 41 hint 41,"ZoneTime, décalage heure : Valeurs possibles ± 12" : position 41,1 on_change 41,change alpha 45 : top 45,80 : left 45,420 : caption 45,"DST :" : font_bold 45 : font_name 45,"tahoma" combo 46 : top 46,80 : left 46,450 : width 46,50 : hint 46,"Heure d'été" on_change 46,change alpha 50 : top 50,80 : left 50,520 : caption 50,"Méthode :" combo 51 : top 51,80 : left 51,580 : width 51,480 : font_bold 51 : height 51,40 font_name 51,"tahoma" : on_change 51,change hint 51,"convention de calcul utilisé" button 60 : top 60,20 : left 60,950 : caption 60,"Quitter" on_click 60,clic button 70 : top 70,20 : left 70,470 : caption 70,"Calculer" on_click 70,clic button 80 : top 80,120 : left 80,500 : font_bold 80 : font_name 80,"wingdings 2" font_size 80,30 : caption 80,"D" : hint 80,"Mois précédent" : on_click 80,clic button 90 : top 90,120 : left 90,760 : font_bold 90 : font_name 90,"wingdings 2" font_size 90,30 : caption 90,"E" : hint 90,"Mois suivant" : on_click 90,clic alpha 100: top 100,130 : left 100,630 : font_bold 100 : font_name 100,"arial" font_size 100,12 : caption 100,Month_Name$(month) + " " + str$(year) item_add 46,0 : item_add 46,1 : item_select 46,1 for i = 1 to 17 : read t$ : item_add 51,t$ : next i item_select 51,14 for i = 20 to 70 step 10 : font_bold i : font_name i,"tahoma" : next i
alpha 110 : top 110,150 : left 110,10 : font_bold 110 : font_size 110,12 font_name 110,"tahoma" : font_color 110, 255,0,0 : caption 110,"Pays : Tunise" alpha 120 : top 120,150 : left 120,200 : font_bold 120 : font_size 120,12 font_name 120,"tahoma" : font_color 120, 255,0,0 : caption 120,"Ville : Moknine" alpha 130 : top 130,200 : left 130,10 : font_bold 130 : font_name 130,"tahoma" font_size 130,12 : font_color 130,0,0,255 : caption 130,"Choix Pays / Villes" alpha 140 : top 140,240 : left 140,60 : font_bold 140 : font_name 140,"Wingdings" font_size 140,30 : caption 140,"ê" button 150 : top 150,20 : left 150,600 : font_bold 150 : caption 150,"Aide" : on_click 150,clic button 160 : top 160,20 : left 160,740 : font_bold 160 : width 160,150 caption 160,"Pour votre culture" : on_click 160,clic container_option 200 : top 200,300 : left 200,10 : width 200,130 : height 200,35*NbPays +10 color 200,255,255,0 for i = 1 to NbPays option 200+i : parent 200+i,200 : top 200+i,30*i : left 200+i,10 font_bold 200+i : font_name 200+i,"tahoma" : on_click 200+i,clic read p$ : caption 200+i,p$ read fuseau(i) : read H_Ete(i) next i combo 300 : top 300,300 : left 300,160 font_bold 300 : width 300,300 : hide 300 : on_change 300,change END_SUB rem ============================================================================ ' Tracer une grille en fonction du nombre des jours dans le mois en cours SUB Grille(n) grid 1 : top 1,180 : left 1,500 : width 1,342 : height 1,n*18-8 : grid_row 1,n+1 grid_row_fixed 1,1 : grid_row_height 1,16 grid_column 1,7 : grid_column_fixed 1,1 : grid_column_width 1,50 : font_bold 1 grid_fixed_color 1,255,255,0 : grid_one_column_width 1,1,30 color 1,0,255,255 grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" END_SUB rem ============================================================================ SUB Run() dim_local nb nb = NbJours(month,year) for n = 1 to Nb : Go(n) : Affiche(n) : next n END_SUB rem ============================================================================ Change: active 70 select number_change case 21 : if text$(21) = "" then text 21,0 case 31 : if text$(31) = "" then text 31,0 case 41 : if text$(41) = "" then text 41,0 if abs(val(text$(41))) > 12 then text 41,0 case 46 : if (text$(46) <> "0") or (text$(46) <> "1") then text 46,0 case 300 : New_Coord() end_select return rem ============================================================================ ' Gestion des clics de l'utilisateur Clic: if number_click > 200 then caption 140,"ê î" select number_click case 060 : if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate case 070 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n case 080 : Mois_Precedant() case 090 : Mois_Suivant() case 150 : Aide() case 160 : Culture() case 201 : restore_label 1 : pays$ = "Algérie" : List_Ville(number_click-200) case 202 : restore_label 2 : pays$ = "Belgique" : List_Ville(number_click-200) case 203 : restore_label 3 : pays$ = "Egypt" : List_Ville(number_click-200) case 204 : restore_label 4 : pays$ = "France" : List_Ville(number_click-200) case 205 : restore_label 5 : pays$ = "Lybie" : List_Ville(number_click-200) case 206 : restore_label 6 : pays$ = "Maroc" : List_Ville(number_click-200) case 207 : restore_label 7 : pays$ = "Arabie" : List_Ville(number_click-200) case 208 : restore_label 8 : pays$ = "Tunisie" : List_Ville(number_click-200) end_select return rem ============================================================================ SUB Go(day) calcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) NumberToHrMin(fajrTime) : prayTime$(0) = h$ + ":" + m$ NumberToHrMin(SunRiseTime) : prayTime$(1) = h$ + ":" + m$ NumberToHrMin(zuhrTime) : prayTime$(2) = h$ + ":" + m$ NumberToHrMin(AsrTime) : prayTime$(3) = h$ + ":" + m$ NumberToHrMin(MaghribTime) : prayTime$(4) = h$ + ":" + m$ if (item_index(51) = 15) or (item_index(51) = 16) NumberToHrMin(MaghribTime + 1.5) prayTime$(5) = h$ + ":" + m$ else NumberToHrMin(IshaTime) : prayTime$(5) = h$ + ":" + m$ end_if END_SUB rem ============================================================================ SUB New_Coord() dim_local t$,t1$,p t$ = item_read$(300,item_index(300)) p = instr(t$,":") ville$ = left$(t$,p-1) t$ = mid$(t$,p+1,20) p = instr(t$,"/") t1$ = mid$(t$,p+1,20) t$ = left$(t$,p-1) text 21,t$ : text 31,t1$ caption 110,"Pays : " + pays$ caption 120,"Ville : " + ville$ grid_clear 1,NbJours(month,year)+1 ,7 END_SUB rem ============================================================================ SUB List_Ville(p) clear 300 position 41,fuseau(p) item_select 46,H_Ete(p) + 1 read ville$ while ville$ <> "FIN" ville$ = ville$ + " : " read latitude : read longitude item_add 300,ville$ + str$(latitude) + " / " + str$(longitude) read ville$ end_while item_select 300,1 sort_on 300 : show 300 inactive 70 END_SUB rem ============================================================================ ' convertir Degree en Radian FNC degToRad(degree) result ((pi / 180) * degree) END_FNC rem ============================================================================ ' convertir Radian en Degree FNC radToDeg(radian) result (radian * (180/pi)) END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 360 FNC moreLess360(value) while (value > 360) or (value < 0) if value > 360 value = value - 360 else if value < 0 value = value + 360 end_if end_if end_while result value END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 24 FNC moreLess24(value) while (value > 24) or (value < 0) if value > 24 value = value - 24 else if value < 0 value = value + 24 end_if end_if end_while result value END_FNC rem ============================================================================ ' convertir le nombre number en heurs et Minutes SUB NumberToHrMin(number) if number = -1 then h$ = "--" : m$ = "--" : exit_sub hours = int(moreLess24(number)) minutes = int(moreLess24(number - hours) * 60) h$ = str$(hours) : m$ = str$(minutes) if len(h$) < 2 then h$ = "0" + h$ if len(m$) < 2 then m$ = "0" + m$ END_SUB rem ============================================================================ FNC Month_Name$(mois) dim_local m$ select mois case 01 : m$ = "Janvier" case 02 : m$ = "Février" case 03 : m$ = "Mars" case 04 : m$ = "Avril" case 05 : m$ = "Mai" case 06 : m$ = "Juin" case 07 : m$ = "Juillet" case 08 : m$ = "Août" case 09 : m$ = "Septembre" case 10 : m$ = "Octobre" case 11 : m$ = "Novembre" case 12 : m$ = "Décembre" end_select result m$ END_FNC rem ============================================================================ ' Fonction qui retourne 1 si l'argument (annee) représente une année bisextile ' 0 sinon FNC Bisextile(annee) if (mod(annee,4) = 0) and ((mod(annee,100) <> 0) or (mod(annee,400) = 0)) result 1 else result 0 end_if END_FNC rem ============================================================================ ' Déterminer le nombre de jours dans un mois (mois) pour une année (annee) FNC NbJours(mois,annee) dim_local n select mois case 01 : n = 31 case 02 : n = 28 : if bisextile(annee) > 0 then n = n + 1 case 03 : n = 31 case 04 : n = 30 case 05 : n = 31 case 06 : n = 30 case 07 : n = 31 case 08 : n = 31 case 09 : n = 30 case 10 : n = 31 case 11 : n = 30 case 12 : n = 31 end_select result n END_FNC rem ============================================================================ SUB Mois_Precedant() dim_local n,nb month = month-1 if month < 1 then month = 12 : year = year - 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Mois_Suivant() dim_local n,nb month = month+1 if month > 12 then month = 1 : year = year + 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb+1) Run() END_SUB rem ============================================================================ SUB Affiche(n) dim_local i grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" for i = 1 to n : grid_write 1,i+1,1,str$(i) : next i for i = 0 to 5 : grid_write 1,n+1,i+2,prayTime$(i) : next i END_SUB rem ============================================================================ ' Méthodes du calcul selon différentes Ecoles data "Algerian Minister of Religious Affairs and Wakfs : Fajr: 18.0° - Isha'a: 17.0°" data "Egyptian General Authority : Fajr: 19.5° - Isha'a: 17.5°" data "Egyptian General Authority (Bis) : Fajr: 20.0° - Isha'a: 18.0°" data "France UOIF - Angle 12° : Fajr: 12.0° - Isha'a: 12.0°" data "France - Angle 15° : Fajr: 15.0° - Isha'a: 15.0°" data "France - Angle 18° : Fajr: 18.0° - Isha'a: 18.0°" data "Islamic University, Karachi : Fajr: 18.0° - Isha'a: 18.0°" data "JAKIM (Jabatan Kemajuan Islam Malaysia) : Fajr: 20.0° - Isha'a: 18.0°" data "MUIS (Majlis Ugama Islam Singapura : Fajr: 20.0° - Isha'a: 18.0°" data "Muslim World League (MWL) : Fajr: 18.0° - Isha'a: 17.0°" data "North America (ISNA) : Fajr: 15.0° - Isha'a: 15.0°" data "Shia Ithna Ashari (Jafari) : Fajr: 16.0° - Isha'a: 14.0°" data "SIHAT/KEMENAG (Kementerian Agama RI) : Fajr: 20.0° - Isha'a: 18.0°" data "Tunisian Ministry of Religious Affairs : Fajr: 18.0° - Isha'a: 18.0°" data "General Authority of Islamic Affairs And Endowments : Fajr: 19.5° - Isha'a: 90 min" data "Umm Al-Qura, Makkah : Fajr: 18.5° - Isha'a: 90 min" data "University of Tehran : Fajr: 17.7° - Isha'a: 15.0°" rem ============================================================================ ' C'est la procédure qui fait tous les calculs SUB CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) latitude = val(text$(21)) : longitude = val(text$(31)) : TimeZone = val(text$(41)) dst = val(text$(46)) select item_index(51) case 01 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Algerian Minister of Religious Affairs and Wakfs case 02 : FajrTwilight = -19.5 : ishaTwilight = -17.5 : ' Egyptian General Authority case 03 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' Egyptian General Authority (Bis) case 04 : FajrTwilight = -12.0 : ishaTwilight = -12.0 : ' France UOIF - Angle 12° case 05 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' France - Angle 15° case 06 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' France - Angle 18° case 07 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Islamic University, Karachi case 08 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' JAKIM (Jabatan Kemajuan Islam Malaysia) case 09 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' MUIS (Majlis Ugama Islam Singapura case 10 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Muslim World League (MWL) case 11 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' North America (ISNA) case 12 : FajrTwilight = -16.0 : ishaTwilight = -14.0 : ' Shia Ithna Ashari (Jafari) case 13 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' SIHAT/KEMENAG (Kementerian Agama RI) case 14 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Tunisian Ministry of Religious Affairs case 15 : FajrTwilight = -19.5 : ' Isha'a: 90 min : ' UAE General Authority of Islamic Affairs And Endowments case 16 : FajrTwilight = -18.5 : ' Isha'a: 90 min : ' Umm Al-Qura, Makkah case 17 : FajrTwilight = -17.7 : ishaTwilight = -15.0 : ' University of Tehran end_select D = (367 * year) - ((year + int((month + 9) / 12)) * 7 / 4) + ((int(275 * month / 9)) + day - 730531.5) L = 280.461 + 0.9856474 * D : L = moreLess360(L) M = 357.528 + (0.9856003) * D : M = moreLess360(M) Lambda = L + 1.915 * sin(degToRad(M)) + 0.02 * sin(degToRad(2 * M)) Lambda = moreLess360(Lambda) Obliquity = 23.439 - 0.0000004 * D Alfa = radToDeg(atn((cos(degToRad(Obliquity)) * tan(degToRad(Lambda))))) Alfa = moreLess360(Alfa) Alfa = Alfa - (360 * (int(Alfa / 360))) Alfa = Alfa + 90 * (int(Lambda / 90) - int(Alfa / 90)) ST = 100.46 + 0.985647352 * D Dec = radToDeg(asin(sin(degToRad(Obliquity)) * sin(degToRad(Lambda)))) a = (sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 : ' le soleil ne se couche pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Durinal_Arc = radToDeg(acos((sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) Noon = Alfa - ST Noon = moreLess360(Noon) UT_Noon = Noon - longitude ' ------------------------------------------------------------------------------ ' Calculating Prayer Times Arcs & Times ' ------------------------------------------------------------------------------ ' Zuhr Time (Local noon) zuhrTime = UT_Noon / 15 + timeZone + dst ' Asr Hanafi ' Asr_Alt = radToDeg(atn(2 + tan(degToRad(abs(latitude - Dec))))) ' Asr Standard (Shafii, Maliki, Hanbali) Asr_Alt = radToDeg(atn(1 + tan(degToRad(abs(latitude - Dec))))) a = (sin(degToRad(90 - Asr_Alt)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Asr_Arc = radToDeg(acos((sin(degToRad(90 - Asr_Alt)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) Asr_Arc = Asr_Arc / 15 ' Asr Time asrTime = zuhrTime + Asr_Arc ' Shorouq Time sunRiseTime = zuhrTime - (Durinal_Arc / 15) ' Maghrib Time maghribTime = zuhrTime + (Durinal_Arc / 15) a = (sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 : ' le soleil ne se lève pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Esha_Arc = radToDeg(acos((sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) ' Isha Time ishaTime = zuhrTime + (Esha_Arc / 15) ' Fajr Time a = (sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Fajr_Arc = radToDeg(acos((sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) fajrTime = zuhrTime - (Fajr_Arc / 15) END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Aide sur le programme" + chr$(13) t$ = t$ + "Au lancement du programme, il affiche les résultat du calcul pour la ville de Moknine (Tunisie) pour le mois en cours" + chr$(13) t$ = t$ + "et propose comme méthode de calcul (dans le COMBO Méthode) celle appliquée en Tunisie (Tunisian Ministry of Religious)" + chr$(13) t$ = t$ + "Pour les autres pays, vous pouvez opter pour l'une des métodes proposées dans le COMBO, surtout si votre ville se situe aux" + chr$(13) t$ = t$ + "altitudes supérieures à 45°"+chr$(13) t$ = t$ + "Il propose un choix parmi 8 pays qui vous permettent d'en choisir une ville parmi celles qui sont proposées." + chr$(13) t$ = t$ + "Si votre ville ne s'y trouve pas, vous avez la possibilité d'entrer manuellement ses coordonnées (Latitude, Longitude, Fuseau, DST)" + chr$(13) t$ = t$ + "Vous pouvez aussi l'ajouter dans le code dans les lignes DATA." + chr$(13) t$ = t$ + "En optant pour l'un des pays proposé, vous activez un COMBO vous permettant de choisir une ville." + chr$(13) t$ = t$ + "Le COMBO DST c'est pour le choix de l'heure d'été (valeurs possibles : 0 pas de passage; 1 passage à l'heure d'été." + chr$(13) t$ = t$ + "Les boutons 'main' indiquant la gauche c'est pour le mois précédent, tandis que celle qui indique la droite c'est pour le mois suivant." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Après chaque modification et pour lancer un nouveau calcul,cliquez sur le bouton 'Calculer' (La Palice ne peut pas dire mieux !)" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "L’horaire de la prière de Ichaa correspond à la disparition du crépuscule (12° à 18°) après le coucher du Soleil." + chr$(13) t$ = t$ + "L'Arabie Séoudite, par exemple ajoute 90 mn à l'heure du Maghrib pour obtenir celle du Icha"+ chr$(13) t$ = t$ + " et ajoute 120 mn pour le mois de Ramadan."+ chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Le programme est fourni comme tel sans aucune garantie des résultats."+chr$(13) t$ = t$ + "En aucun cas je ne serais responsable de dommages résultants de l'utilisation de cette application." message t$ END_SUB rem ============================================================================ SUB Culture() dim_local t$ t$ = "Méthode de calcul des horaires de prières" + chr$(13) t$ = t$ + "Les prières (pour les Musulmans) sont au nombre de cinq par journée." + chr$(13) t$ = t$ + "Les horaires de ces cinq prières varient d'un endroit (ville) à l'autre et d'un jour à l'autre." + chr$(13) t$ = t$ + "Le calcul fait intervenir les heures du crépuscule, mais lequel ?" + chr$(13) t$ = t$ + "Il existe trois types de crépuscules : " + chr$(13) t$ = t$ + "Le crépuscule astronomique : il intervient lorsque le soleil se situe " t$ = t$ + "en dessous de l’horizon à une hauteur de 18°, et il correspond au moment" + chr$(13) t$ = t$ + "où l’obscurité totale s’installe au niveau de cet horizon." + chr$(13) t$ = t$ + "Le crépuscule nautique : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 12°." + chr$(13) t$ = t$ + "Le crépuscule civil : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 06°." + chr$(13) t$ = t$ + "Or, il s’est avéré que le fait de se baser sur le crépuscule astronomique (18°) pour le calcul des heures de prière " t$ = t$ + "pose des difficultés pour les pays d’Europe." + chr$(13) t$ = t$ + "Il est impossible de calculer les horaires de la prière du Fajr à partir du 18° et ce à partir de la mi-mai jusqu’à la mi-juin environ."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "L’écart entre le Fajr et celui du lever du soleil (Chourouk) se creuse pour atteindre un record de 3h40 min en période d’été." + chr$(13) t$ = t$ + "L’écart entre la prière de Ichaa et celle du Fajr se réduit durant des semaines en période d’été." + chr$(13) t$ = t$ + "A titre d’exemple : le 28 mai à Paris en se basant sur le 18°, la prière de Ichaa est à 00h18 et la prière du Fajr est à 02h59 !" + chr$(13) t$ = t$ + "Soit un écart de 2h41mn."+chr$(13) t$ = t$ + "Par contre, retenir le critère du 12° (le crépuscule nautique) permet de surmonter ces difficultés." + chr$(13) t$ = t$ + "D’une part, l’écart entre la prière du Fajr et celle du lever du soleil (Chourouk) n’excède jamais 02 heures durant toute l’année."+chr$(13) t$ = t$ + "D’autre part, l’écart entre la prière du Ichaa et celle du Fajr reste constamment importante."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Le fait d'opter pour ce critère du 12° permet d’alléger la contrainte sur les musulmans vivant en Europe pour cette pratique cultuelle " + chr$(13) t$ = t$ + "et surtout durant le mois de Ramadan et spécialement en période d’été." + chr$(13) t$ = t$ + "L’avantage de ce choix réside dans la possibilité de l’utiliser durant toute l’année, à l’inverse de celui du 18°." + chr$(13) t$ = t$ + "Certains pays ajoutent 5 minutes en plus par précaution pour les horaires de Dhohr et du Maghrib" + chr$(13) t$ = t$ + "L’horaire du Asr est calculé selon la règle islamique où l’ombre de chaque objet devient égale à celui-ci." + chr$(13) t$ = t$ + "Mais certains pays utilisent d'autres critères, ce qui ne facilite pas la tâche !" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "En résumé : " + chr$(13) t$ = t$ + "* Prière de l'aube (matin) (Fajr) : Le début coïncide avec la fin du délai de d'Isha, soit lorsque le soleil remonte à 19 ° sous l'horizon." + chr$(13) t$ = t$ + " La fin est atteinte au lever du soleil avec le limbe supérieur du soleil tangent à l'horizon soit h = - 0,267°"+ chr$(13) t$ = t$ + "* Prière de la mi-journée (midi) (Dhur) : la durée permise commence quand le soleil a traversé le méridien (soit quand l'ombre d'un objet a commencé à " t$ = t$ + " augmenter) et se termine lorsque l'ombre d'un gnomon s'est allongée d'un quart de sa hauteur par rapport à son ombre à midi." + chr$(13) t$ = t$ + "* Prière de l'après-midi ('Asr) : l'intervalle commence lorsque l'augmentation de l'ombre est égale à la longueur du gnomon et se termine quand l'ombre en a atteint le double." + chr$(13) t$ = t$ + "* Prière du coucher de soleil (Maghrib) : Le début coïncide avec la disparition totale du soleil sous l'horizon , soit pour h = -0.267°."+chr$(13) t$ = t$ + " La fin du délai est atteinte à la dernière lueur du crépuscule, soit le soleil à 18° sous l'horizon."+chr$(13) t$ = t$ + " Attention, cette condition peut être irréalisable à certaines dates pour certaines latitudes." + chr$(13) t$ = t$ + "* Prière de la nuit ('Isha) : Le début coïncide avec la fin du délai de Maghrib, soit le soleil à 17° sous l'horizon." + chr$(13) t$ = t$ + " La fin du délai est atteinte avec l'apparition de l'aube lorsque le soleil remonte à 19° sous l'horizon." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "Les opinions divergent sur les angles à utiliser pour le calcul de Fajr et Isha." +chr$(13) t$ = t$ + "La mosquée de Paris retient 15° pour Fajr et 18° pour Isha." + chr$(13) + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Pour des plus amples informations sur le calcul des horaires de prière, référez-vous à : " + chr$(13) t$ = t$ + "http://www.averroes-aveyron.fr/medias/files/methodes-de-calcul.pdf" + chr$(13) message t$ END_SUB rem ============================================================================ ' Liste des pays : nom du pays, fuseau horaire du pays et flag pour heure d'été (1 oui, 0 non) data "Algérie" ,1,0 , "Belgique",1,1 ,"Egypt",2,0 , "France",1,1, "Lybie",2,0 data "Maroc",0 , 0, "Arabie Séoudite",3,0 ,"Tunise",1,0 ' ------------------------------------------------------------------------------ data "Algérie" : ' UTC + 1 ; DST 0 ' ----------- 1: ' Ville Latitude Longitude data "Adrar" , 27.850, -0.317 data "Alger" , 36.833, 3.000 data "Annaba" , 36.917, 7.783 data "Batna" , 35.567, 6.167 data "Bechar" , 31.583, -2.283 data "Bejaia" , 36.817, 5.050 data "Biskra" , 34.833, 5.683 data "Blida" , 36.500, 2.833 data "Boussaada" , 35.167, 4.150 data "Constantine" , 36.367, 6.667 data "El Asnam" , 36.183, 1.350 data "El Djelfa" , 34.717, 3.233 data "Ghardaia" , 32.333, 3.667 data "Laghouat" , 33.817, 2.917 data "Mostaganem" , 35.900, 0.083 data "M'Sila" , 35.667, 4.517 data "Oran" , 35.750, -0.633 data "Ouargla" , 32.000, 5.267 data "Setif" , 36.183, 5.400 data "Sidi-bel-Abbes" , 35.250, -0.650 data "Skikda" , 36.883, 6.900 data "Tamanrasset" , 22.833, 5.467 data "Tebessa" , 35.350, 8.100 data "Tiaret" , 35.333, 1.333 data "Tilimsen" , 34.883, -1.350 data "Tizi-Ouzou" , 36.733, 4.083 data "FIN" ' ------------------------------------------------------------------------------ data "Belgique" : ' UTC + 1 UTC + 2 Heure d'été ' ----------- 2: ' Ville Latitude Longitude data "Antwerp" , 51.217, 4.417 data "Brussels" , 50.850, 4.350 data "Charleroi" , 50.417, 4.450 data "Gent" , 51.033, 3.700 data "Liege" , 50.633, 5.583 data "Ostende" , 51.217, 2.917 data "Mons" , 50.467, 3.967 data "Namur" , 50.467, 4.867 data "FIN" ' ------------------------------------------------------------------------------ data "Egypt" : ' UTC + 2 ' ------------------------------------- 3: ' Ville Latitude Longitude data "Abou Simbel" , 22.317, 31.633 data "Alexandria" , 31.217, 29.917 data "Aswan" , 24.083, 32.933 data "Asyut" , 27.233, 31.117 data "Beni-Souef" , 29.083, 31.083 data "Cairo" , 30.050, 31.250 data "Damanhur" , 31.050, 30.467 data "Dumyat" , 31.433, 31.800 data "El Alamein" , 30.833, 28.950 data "Helwan" , 29.850, 31.333 data "Isma'ilia" , 30.600, 32.250 data "Karnak" , 25.683, 32.667 data "Port Said" , 31.283, 32.300 data "Sohag" , 26.550, 31.700 data "Suez" , 29.983, 32.550 data "Tanta" , 30.800, 31.000 data "Zagazig" , 30.583, 31.500 data "FIN" ' ------------------------------------------------------------------------------- data "France" : ' UTC + 1 UTC + 2 Heure d'été ' ---------- 4: ' Ville Latitude Longitude data "Brest" , 48.383, -4.500 data "Quimper" , 48.000, -4.100 data "Lorient" , 47.750, -3.350 data "St-Brieuc" , 48.517, -2.750 data "Vannes" , 47.667, -2.733 data "St Nazaire" , 47.283, -2.200 data "Rennes" , 48.100, -1.667 data "Cherbourg" , 49.633, -1.617 data "Nantes" , 47.233, -1.583 data "La-Roche-sur-Yon" , 46.633, -1.500 data "Bayonne" , 43.500, -1.467 data "La Rochelle" , 46.167, -1.167 data "St-Lo" , 49.117, -1.083 data "Laval" , 48.067, -0.750 data "Bordeaux" , 44.833, -0.567 data "Angers" , 47.483, -0.533 data "Mont-de-Marsan" , 43.900, -0.500 data "Niort" , 46.317, -0.450 data "Pau" , 43.300, -0.367 data "Caen" , 49.183, -0.367 data "Alençon" , 48.417, 0.083 data "Tarbes" , 43.233, 0.083 data "Le Havre" , 49.500, 0.100 data "Angouleme" , 45.667, 0.167 data "Le Mans" , 48.000, 0.200 data "Poitiers" , 46.583, 0.333 data "Cahors" , 44.467, 0.433 data "Auch" , 43.500, 0.600 data "Agen" , 44.200, 0.633 data "Tours" , 47.383, 0.700 data "Perigueux" , 45.200, 0.733 data "Dieppe" , 49.917, 1.083 data "Rouen" , 49.433, 1.083 data "Evreux" , 49.050, 1.183 data "Limoges" , 45.833, 1.250 data "Montauban" , 44.017, 1.333 data "Blois" , 47.600, 1.333 data "Toulouse" , 43.617, 1.450 data "Chartres" , 48.450, 1.500 data "Foix" , 42.950, 1.583 data "Chateauroux" , 46.817, 1.683 data "Tulle" , 45.267, 1.767 data "Abbeville" , 50.100, 1.850 data "Gueret" , 46.167, 1.866 data "Orleans" , 47.900, 1.900 data "Vierzon" , 47.233, 2.050 data "Pontoise" , 49.050, 2.083 data "Beauvais" , 49.433, 2.083 data "Versailles" , 48.800, 2.133 data "Albi" , 43.933, 2.144 data "Nanterre" , 48.883, 2.217 data "Amiens" , 49.900, 2.300 data "Paris" , 48.833, 2.333 data "Bourges" , 47.083, 2.383 data "Carcassonne" , 43.217, 2.350 data "Dunkerque" , 51.033, 2.383 data "Aurillac" , 44.933, 2.433 data "Bobigny" , 48.917, 2.450 data "Créteil" , 48.783, 2.467 data "Melun" , 48.533, 2.557 data "Evry" , 48.633, 2.567 data "Rodez" , 44.350, 2.567 data "Montlucon" , 46.333, 2.600 data "Arras" , 50.283, 2.767 data "Lens" , 50.433, 2.833 data "Perpignan" , 42.700, 2.900 data "Lille" , 50.650, 3.083 data "Clermont-Ferrand",45.783, 3.083 data "Nevers" , 47.000, 3.150 data "Moulins" , 46.567, 3.333 data "Mende" , 44.533, 3.500 data "Auxerre" , 47.800, 3.583 data "Laon" , 49.567, 3.617 data "Montpellier" , 43.600, 3.883 data "Le Puy" , 45.050, 3.883 data "Avallon" , 47.500, 3.900 data "Reims" , 49.250, 4.033 data "Troyes" , 48.300, 4.083 data "Roanne" , 46.033, 4.083 data "Nimes" , 43.500, 4.350 data "Chalons-S-Marne", 48.967, 4.367 data "St-Etienne" , 45.433, 4.383 data "Privas" , 44.733, 4.600 data "Mezières" , 49.767, 4.733 data "Avignon" , 43.933, 4.800 data "Lyon" , 45.767, 4.833 data "Macon" , 45.300, 4.833 data "Valence" , 44.933, 4.900 data "Dijon" , 47.333, 5.033 data "Chaumont" , 48.117, 5.133 data "Bar-le-Duc" , 48.767, 5.167 data "Bourg" , 46.200, 5.217 data "Observatoire SIRENE" , 44.000, 5.333 data "Marseille " , 43.300, 5.367 data "Lons-le-Saunier", 46.683, 5.550 data "Grenoble" , 45.183, 5.717 data "Toulon" , 43.117, 5.917 data "Chambéry" , 45.567, 5.917 data "Besancon" , 47.250, 5.983 data "Gap" , 44.550, 6.083 data "Annecy" , 45.900, 6.117 data "Metz" , 49.117, 6.183 data "Vesoul" , 47.633, 6.150 data "Nancy" , 48.700, 6.200 data "Digne" , 44.083, 6.233 data "Epinal" , 48.167, 6.467 data "Belfort" , 47.633, 6.867 data "Cannes" , 43.550, 7.000 data "Nice" , 43.700, 7.267 data "Colmar" , 48.083, 7.350 data "Mulhouse" , 47.750, 7.350 data "Strasbourg" , 48.583, 7.750 data "Ajaccio" , 41.917, 8.717 data "Bastia" , 42.683, 9.433 data "FIN" ' ------------------------------------------------------------------------------ data "Libye" :' UTC + 2 ' --------- 5: ' Ville Latitude Longitude data "Sabratah" , 32.833, 12.400 data "Tripoli" , 32.967, 13.200 data "Al Khums" , 32.650, 14.250 data "Sabhah" , 27.050, 14.433 data "Benghazi" , 32.117, 20.083 data "Ajdabiyah" , 30.800, 20.250 data "Al Marj" , 32.500, 20.833 data "Darnah" , 32.767, 22.650 data "Tubruq" , 32.100, 23.933 data "FIN" ' ------------------------------------------------------------------------------
data "Moroc" : ' UTC + 0 ' --------- 6: ' Ville Latitude Longitude data "Agadir" , 30.500, -9.667 data "Safi" , 32.300, -9.333 data "El Jadida" , 33.183, -8.283 data "Marrakech" , 31.817, -8.000 data "Settat" , 33.067, -7.617 data "Casablanca" , 33.650, -7.583 data "Mohammedia" , 33.717, -7.333 data "Khouribga" , 32.900, -6.950 data "Sale" , 34.067, -6.833 data "Kenitra" , 34.333, -6.567 data "Beni Mellal" , 32.367, -6.483 data "Khemisset" , 33.833, -6.050 data "Ksar el Kebir" , 35.067, -5.933 data "Tanger" , 35.800, -5.833 data "Meknes" , 33.883, -5.617 data "Tetouan" , 35.567, -5.367 data "Ceuta" , 35.883, -5.317 data "Fes" , 34.083, -5.000 data "Taza" , 34.267, -4.017 data "Nador" , 35.167, -3.000 data "Oujda" , 34.683, -1.750 data "FIN" ' ------------------------------------------------------------------------------ rem ============================================================================ data "Arabie Séoudite" : ' UTC + 3 ' ---------------- 7: ' Ville Latitude Longitude data "Riyadh" , 24.650, 46.767 data "Al Wajh" , 26.267, 36.467 data "Tabuk" , 28.367, 36.533 data "Yanbu'Al Bahr" , 24.117, 38.067 data "Tayma" , 27.617, 38.500 data "Jiddah" , 21.500, 39.167 data "Khaybar" , 25.800, 39.200 data "Medina" , 24.500, 39.583 data "Mecca" , 21.433, 39.817 data "Al Jawf" , 29.783, 39.867 data "Al Lith" , 20.167, 40.267 data "At Ta'if" , 21.250, 40.350 data "Badanah" , 31.000, 41.083 data "Al Qunfidhah" , 19.150, 41.117 data "Turabah" , 21.250, 41.567 data "Ha'il" , 27.517, 41.750 data "bha" , 18.233, 42.517 data "Jizan" , 16.933, 42.550 data "Buraydah" , 26.333, 43.983 data "Najran" , 17.517, 44.317 data "Shaqra" , 25.300, 45.250 data "Al Artawiyak" , 26.517, 45.350 data "Ad Dilam" , 23.983, 47.100 data "Haradh" , 24.200, 49.117 data "Al Hufuf" , 25.333, 49.567 data "Ad Dammam" , 26.417, 50.100 data "Al Khurmah" , 21.917, 42.033 data "FIN" ' ------------------------------------------------------------------------------ Data "Tunisie" : ' UTC + 1 ' ----------- 8: ' Ville Latitude Longitude data "Gafsa" , 34.467, 8.717 data "Beja" , 36.717, 9.217 data "Bizerte" , 37.300, 9.867 data "Kairouan" , 35.700, 10.017 data "Gabes" , 33.867, 10.100 data "Tunis" , 36.833, 10.217 data "Sousse" , 35.833, 10.633 data "Sfax" , 34.750, 10.717 data "Nabeul" , 36.500, 10.733 data "Moknine" , 35.633, 10.833 data "Monastir", 35.777, 10.826 data "Mahdia" , 35.502, 11.045 data "Jendouba" , 35.501, 08.783 data "Le Kef" , 36.179, 08.714 data "Siliana" , 35.990, 09.278 data "Ariana" , 36.862, 10.195 data "Ben Arous" , 36.743, 10.232 data "Kasserine" , 35.171, 08.828 data "Kebili" , 33.124, 08.836 data "La Manouba" , 36.807, 10.101 data "Medenine" , 33.348, 10.494 data "Sidi Bouzid" , 35.033, 09.5 data "Tataouine" , 32.921, 10.450 data "Zaghouan" , 36.399, 10.147 data "La Soukra" , 36.883, 10.25 data "La Marsa" , 36.876, 10.325
data "FIN" rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&& FIN DU CODE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
Je pense avoir suffisamment blindé mon code contre M. Bourrin, mais sait-on jamais ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Calculateur des heures de prière. Lun 29 Avr 2019 - 6:59 | |
| Bonjour Papydall, Je viens de tester ton programme. Bravo pour cette réalisation. Je suis surpris du nombre de 'méthodes' que tu as relevé. Il est vrai qu'entre les calculs à 12, 15 ou 18 degrés cela laisse des possibilités de calculs différents ! Et cela en plus en fonction de chaque prières... Un grand merci pour ce code que je vais prendre le temps de décoder. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Lun 29 Avr 2019 - 18:55 | |
| Salut Tout le monde. Merci Minibug pour ton intérêt à mon programme. Comme tu as du le constater, les choses ne sont pas si simples avec toutes ces divergences et points de vue sur le calcul des horaires du Salat. Il y a aussi un autre sujet (l’heure du ASR) qui divise les écoles islamiques en deux positions dogmatiques. En effet les trois écoles juridiques Malikite, Hambalite et Shafiite soutiennent que le Asr commence lorsque la taille d’un objet vertical est la taille de son ombre. Cette méthode est celle adoptée généralement dans les communautés du Maghreb (d’obédience Malikite). La quatrième école Hanafite estime que le Asr commence lorsque l’ombre d’un objet vertical est le double de la taille de cet objet. Cette nette différence dogmatique entraîne des écarts dans les horaires de salat sur les calendriers correspondant à un même endroit. J’ai apporté les modifications nécessaires au code pour tenir compte (selon le choix de l’utilisateur) de ces doctrines religieuses (Madh-hab : Shafii, Maliki, Hanbali ou Hanafi). - Code:
-
rem ============================================================================ rem CalcPrayerTimes.bas rem Calculateur des heures de prière par Papydall rem Dernière modification : 30 Avril 2019 rem ============================================================================
Init() Gui() Grille(NbJours(month,year)) Run()
end rem ============================================================================ SUB Init() label clic, change label 1, 2, 3, 4, 5, 6, 7, 8 : ' pour restore_label dim year, month, day dim longitude, latitude, timeZone dim fajrTwilight, ishaTwilight dim fajrTime, sunRiseTime, zuhrTime, asrTime, maghribTime, ishaTime dim d, l, m, lambda, obliquity, alfa, st, dec, durinal_Arc, noon, Ut_Noon dim Asr_Alt, Asr_Arc, Esha_Arc, Fajr_Arc dim prayTime$(5) dim hours, minutes ,h$, m$, a, n, dst, methode, p$, ville$, pays$ dim NbPays : NbPays = 8 : ' 8 c'est le nombre des pays proposés dans le programme dim Fuseau(8), H_Ete(8) dim standard dim nc standard = 1 : ' Pour le calcul du Asr : 1 ---> (Shafii, Maliki, Hanbali) ' 0 ---> Hanafi day = date_day : month = date_month : year = date_year : ' La date courante END_SUB rem ============================================================================ SUB GUI() dim_local i,t$ t$ = " Calculateur des heures de prière par Papydall " color 0,240,255,255 width 0,1100 : height 0,800 : top 0,(screen_y - height(0)) / 2 left 0,(screen_x - width(0))/2 shape 5 : top 5,5 : left 5,450 : width 5,600 : height 5,50 shape_rectangle_rounded 5 : color 5,25,100,50 shape 6 : top 6,5 : left 6,20 : width 6,420 : height 6,50 shape_rectangle_rounded 6 : color 6,25,100,50 alpha 10 : top 10,20 : left 10,40 : font_color 10,250,100,50 font_bold 10 : font_name 10,"tahoma" : font_size 10,12 caption 10,t$ : caption 0,t$ : application_title t$ alpha 20 : top 20,80 : left 20,010 : caption 20,"Latitude : " edit 21 : top 21,80 : left 21,070 : width 21,60 : font_bold 21 : text 21,"35.6333" hint 21,"En degrés décimaux (± 90°) positive au Nord" : on_change 21,change alpha 30 : top 30,80 : left 30,140 : caption 30,"Longitude : " edit 31 : top 31,80 : left 31,210 : width 31,60 : font_bold 31 : text 31,"10.9" hint 31,"En degrés décimaux (± 180°) positive à l'est" : on_change 31,change alpha 40 : top 40,80 : left 40,285 : caption 40,"Fuseau :" spin 41 : top 41,80 : left 41,335 : width 41,60 : min 41,-12 : max 41,12 : font_bold 41 hint 41,"ZoneTime, décalage heure : Valeurs possibles ± 12" : position 41,1 on_change 41,change alpha 45 : top 45,80 : left 45,420 : caption 45,"DST :" : font_bold 45 : font_name 45,"tahoma" combo 46 : top 46,80 : left 46,450 : width 46,50 : hint 46,"Heure d'été" on_change 46,change alpha 50 : top 50,80 : left 50,520 : caption 50,"Méthode :" combo 51 : top 51,80 : left 51,580 : width 51,480 : font_bold 51 : height 51,40 font_name 51,"tahoma" : on_change 51,change hint 51,"convention de calcul utilisé" alpha 55 : top 55,130 : left 55,10 : font_bold 55 : font_name 55,"tahoma" caption 55,"Calcul Asr :" combo 56 : top 56,130 : left 56,80 : font_bold 56 : font_name 56,"tahoma" width 56,220 : hint 56,"Doctrines religieuses" : on_change 56,change item_add 56,"Standard (Shafii, Maliki, Hanbali)" item_add 56,"Hanafi" : item_select 56,1 button 60 : top 60,20 : left 60,950 : caption 60,"Quitter" on_click 60,clic button 70 : top 70,20 : left 70,470 : caption 70,"Calculer" on_click 70,clic button 80 : top 80,120 : left 80,500 : font_bold 80 : font_name 80,"wingdings 2" font_size 80,30 : caption 80,"D" : hint 80,"Mois précédent" : on_click 80,clic button 90 : top 90,120 : left 90,760 : font_bold 90 : font_name 90,"wingdings 2" font_size 90,30 : caption 90,"E" : hint 90,"Mois suivant" : on_click 90,clic alpha 100: top 100,130 : left 100,630 : font_bold 100 : font_name 100,"arial" font_size 100,12 : caption 100,Month_Name$(month) + " " + str$(year) item_add 46,0 : item_add 46,1 : item_select 46,1 for i = 1 to 17 : read t$ : item_add 51,t$ : next i item_select 51,14 for i = 20 to 70 step 10 : font_bold i : font_name i,"tahoma" : next i alpha 110 : top 110,180 : left 110,10 : font_bold 110 : font_size 110,12 font_name 110,"tahoma" : font_color 110, 255,0,0 : caption 110,"Pays : Tunisie" alpha 120 : top 120,180 : left 120,200 : font_bold 120 : font_size 120,12 font_name 120,"tahoma" : font_color 120, 255,0,0 : caption 120,"Ville : Moknine" alpha 130 : top 130,230 : left 130,10 : font_bold 130 : font_name 130,"tahoma" font_size 130,12 : font_color 130,0,0,255 : caption 130,"Choix Pays / Villes" alpha 140 : top 140,260 : left 140,60 : font_bold 140 : font_name 140,"Wingdings" font_size 140,30 : caption 140,"ê" button 150 : top 150,20 : left 150,600 : font_bold 150 : caption 150,"Aide" : on_click 150,clic button 160 : top 160,20 : left 160,740 : font_bold 160 : width 160,150 caption 160,"Pour votre culture" : on_click 160,clic container_option 200 : top 200,300 : left 200,10 : width 200,130 : height 200,35*NbPays +10 color 200,255,255,0 for i = 1 to NbPays option 200+i : parent 200+i,200 : top 200+i,30*i : left 200+i,10 font_bold 200+i : font_name 200+i,"tahoma" : on_click 200+i,clic read p$ : caption 200+i,p$ read fuseau(i) : read H_Ete(i) next i combo 300 : top 300,300 : left 300,160 font_bold 300 : width 300,300 : hide 300 : on_change 300,change END_SUB rem ============================================================================ ' Tracer une grille en fonction du nombre des jours dans le mois en cours SUB Grille(n) grid 1 : top 1,180 : left 1,500 : width 1,342 : height 1,n*18-8 : grid_row 1,n+1 grid_row_fixed 1,1 : grid_row_height 1,16 grid_column 1,7 : grid_column_fixed 1,1 : grid_column_width 1,50 : font_bold 1 grid_fixed_color 1,255,255,0 : grid_one_column_width 1,1,30 color 1,0,255,255 grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" END_SUB rem ============================================================================ SUB Run() dim_local nb nb = NbJours(month,year) for n = 1 to Nb : Go(n) : Affiche(n) : next n END_SUB rem ============================================================================ Change: active 70 for nc = 21 to 41 step 10 : off_change nc : next nc for nc = 46 to 56 step 10 : off_change nc : next nc off_change 300 select number_change case 21 : if text$(21) = "" then text 21,0 case 31 : if text$(31) = "" then text 31,0 case 41 : if text$(41) = "" then text 41,0 if abs(val(text$(41))) > 12 then text 41,0 case 46 : if (text$(46) <> "0") or (text$(46) <> "1") then text 46,0 case 56 : if item_index(56) = 1 then standard = 1 : else : standard = 0 for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n case 300 : New_Coord() end_select for nc = 21 to 41 step 10 : on_change nc,change : next nc for nc = 46 to 56 step 10 : on_change nc,change : next nc on_change 300,change return rem ============================================================================ ' Gestion des clics de l'utilisateur Clic: for nc = 60 to 90 step 10 : off_click nc : next nc for nc = 150 to 160 step 10 : off_click nc : next nc for nc = 201 to 208 : off_click nc : next nc if number_click > 200 then caption 140,"ê î" select number_click case 060 : if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate case 070 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n case 080 : Mois_Precedant() case 090 : Mois_Suivant() case 150 : Aide() case 160 : Culture() case 201 : restore_label 1 : pays$ = "Algérie" : List_Ville(number_click-200) case 202 : restore_label 2 : pays$ = "Belgique" : List_Ville(number_click-200) case 203 : restore_label 3 : pays$ = "Egypte" : List_Ville(number_click-200) case 204 : restore_label 4 : pays$ = "France" : List_Ville(number_click-200) case 205 : restore_label 5 : pays$ = "Lybie" : List_Ville(number_click-200) case 206 : restore_label 6 : pays$ = "Maroc" : List_Ville(number_click-200) case 207 : restore_label 7 : pays$ = "Arabie" : List_Ville(number_click-200) case 208 : restore_label 8 : pays$ = "Tunisie" : List_Ville(number_click-200) end_select for nc = 60 to 90 step 10 : on_click nc,clic : next nc for nc = 150 to 160 step 10 : on_click nc,clic : next nc for nc = 201 to 208 : on_click nc,clic : next nc return rem ============================================================================ SUB Go(day) calcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) NumberToHrMin(fajrTime) : prayTime$(0) = h$ + ":" + m$ NumberToHrMin(SunRiseTime) : prayTime$(1) = h$ + ":" + m$ NumberToHrMin(zuhrTime) : prayTime$(2) = h$ + ":" + m$ NumberToHrMin(AsrTime) : prayTime$(3) = h$ + ":" + m$ NumberToHrMin(MaghribTime) : prayTime$(4) = h$ + ":" + m$ if (item_index(51) = 15) or (item_index(51) = 16) NumberToHrMin(MaghribTime + 1.5) prayTime$(5) = h$ + ":" + m$ else NumberToHrMin(IshaTime) : prayTime$(5) = h$ + ":" + m$ end_if END_SUB rem ============================================================================ SUB New_Coord() dim_local t$,t1$,p t$ = item_read$(300,item_index(300)) p = instr(t$,":") ville$ = left$(t$,p-1) t$ = mid$(t$,p+1,20) p = instr(t$,"/") t1$ = mid$(t$,p+1,20) t$ = left$(t$,p-1) text 21,t$ : text 31,t1$ caption 110,"Pays : " + pays$ caption 120,"Ville : " + ville$ grid_clear 1,NbJours(month,year)+1 ,7 END_SUB rem ============================================================================ SUB List_Ville(p) clear 300 position 41,fuseau(p) item_select 46,H_Ete(p) + 1 read ville$ while ville$ <> "FIN" ville$ = ville$ + " : " read latitude : read longitude item_add 300,ville$ + str$(latitude) + " / " + str$(longitude) read ville$ end_while item_select 300,1 sort_on 300 : show 300 inactive 70 END_SUB rem ============================================================================ ' convertir Degree en Radian FNC degToRad(degree) result ((pi / 180) * degree) END_FNC rem ============================================================================ ' convertir Radian en Degree FNC radToDeg(radian) result (radian * (180/pi)) END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 360 FNC moreLess360(value) while (value > 360) or (value < 0) if value > 360 value = value - 360 else if value < 0 value = value + 360 end_if end_if end_while result value END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 24 FNC moreLess24(value) while (value > 24) or (value < 0) if value > 24 value = value - 24 else if value < 0 value = value + 24 end_if end_if end_while result value END_FNC rem ============================================================================ ' convertir le nombre number en heurs et Minutes SUB NumberToHrMin(number) if number = -1 then h$ = "--" : m$ = "--" : exit_sub hours = int(moreLess24(number)) minutes = int(moreLess24(number - hours) * 60) h$ = str$(hours) : m$ = str$(minutes) if len(h$) < 2 then h$ = "0" + h$ if len(m$) < 2 then m$ = "0" + m$ END_SUB rem ============================================================================ FNC Month_Name$(mois) dim_local m$ select mois case 01 : m$ = "Janvier" case 02 : m$ = "Février" case 03 : m$ = "Mars" case 04 : m$ = "Avril" case 05 : m$ = "Mai" case 06 : m$ = "Juin" case 07 : m$ = "Juillet" case 08 : m$ = "Août" case 09 : m$ = "Septembre" case 10 : m$ = "Octobre" case 11 : m$ = "Novembre" case 12 : m$ = "Décembre" end_select result m$ END_FNC rem ============================================================================ ' Fonction qui retourne 1 si l'argument (annee) représente une année bisextile ' 0 sinon FNC Bisextile(annee) if (mod(annee,4) = 0) and ((mod(annee,100) <> 0) or (mod(annee,400) = 0)) result 1 else result 0 end_if END_FNC rem ============================================================================ ' Déterminer le nombre de jours dans un mois (mois) pour une année (annee) FNC NbJours(mois,annee) dim_local n select mois case 01 : n = 31 case 02 : n = 28 : if bisextile(annee) > 0 then n = n + 1 case 03 : n = 31 case 04 : n = 30 case 05 : n = 31 case 06 : n = 30 case 07 : n = 31 case 08 : n = 31 case 09 : n = 30 case 10 : n = 31 case 11 : n = 30 case 12 : n = 31 end_select result n END_FNC rem ============================================================================ SUB Mois_Precedant() dim_local n,nb month = month-1 if month < 1 then month = 12 : year = year - 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Mois_Suivant() dim_local n,nb month = month+1 if month > 12 then month = 1 : year = year + 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Affiche(n) dim_local i grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" for i = 1 to n : grid_write 1,i+1,1,str$(i) : next i for i = 0 to 5 : grid_write 1,n+1,i+2,prayTime$(i) : next i END_SUB rem ============================================================================ ' Méthodes du calcul selon différentes Ecoles data "Algerian Minister of Religious Affairs and Wakfs : Fajr: 18.0° - Isha'a: 17.0°" data "Egyptian General Authority : Fajr: 19.5° - Isha'a: 17.5°" data "Egyptian General Authority (Bis) : Fajr: 20.0° - Isha'a: 18.0°" data "France UOIF - Angle 12° : Fajr: 12.0° - Isha'a: 12.0°" data "France - Angle 15° : Fajr: 15.0° - Isha'a: 15.0°" data "France - Angle 18° : Fajr: 18.0° - Isha'a: 18.0°" data "Islamic University, Karachi : Fajr: 18.0° - Isha'a: 18.0°" data "JAKIM (Jabatan Kemajuan Islam Malaysia) : Fajr: 20.0° - Isha'a: 18.0°" data "MUIS (Majlis Ugama Islam Singapura : Fajr: 20.0° - Isha'a: 18.0°" data "Muslim World League (MWL) : Fajr: 18.0° - Isha'a: 17.0°" data "North America (ISNA) : Fajr: 15.0° - Isha'a: 15.0°" data "Shia Ithna Ashari (Jafari) : Fajr: 16.0° - Isha'a: 14.0°" data "SIHAT/KEMENAG (Kementerian Agama RI) : Fajr: 20.0° - Isha'a: 18.0°" data "Tunisian Ministry of Religious Affairs : Fajr: 18.0° - Isha'a: 18.0°" data "General Authority of Islamic Affairs And Endowments : Fajr: 19.5° - Isha'a: 90 min" data "Umm Al-Qura, Makkah : Fajr: 18.5° - Isha'a: 90 min" data "University of Tehran : Fajr: 17.7° - Isha'a: 15.0°" rem ============================================================================ ' C'est la procédure qui fait tous les calculs SUB CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) latitude = val(text$(21)) : longitude = val(text$(31)) : TimeZone = val(text$(41)) dst = val(text$(46)) select item_index(51) case 01 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Algerian Minister of Religious Affairs and Wakfs case 02 : FajrTwilight = -19.5 : ishaTwilight = -17.5 : ' Egyptian General Authority case 03 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' Egyptian General Authority (Bis) case 04 : FajrTwilight = -12.0 : ishaTwilight = -12.0 : ' France UOIF - Angle 12° case 05 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' France - Angle 15° case 06 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' France - Angle 18° case 07 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Islamic University, Karachi case 08 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' JAKIM (Jabatan Kemajuan Islam Malaysia) case 09 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' MUIS (Majlis Ugama Islam Singapura case 10 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Muslim World League (MWL) case 11 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' North America (ISNA) case 12 : FajrTwilight = -16.0 : ishaTwilight = -14.0 : ' Shia Ithna Ashari (Jafari) case 13 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' SIHAT/KEMENAG (Kementerian Agama RI) case 14 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Tunisian Ministry of Religious Affairs case 15 : FajrTwilight = -19.5 : ' Isha'a: 90 min : ' UAE General Authority of Islamic Affairs And Endowments case 16 : FajrTwilight = -18.5 : ' Isha'a: 90 min : ' Umm Al-Qura, Makkah case 17 : FajrTwilight = -17.7 : ishaTwilight = -15.0 : ' University of Tehran end_select D = (367 * year) - ((year + int((month + 9) / 12)) * 7 / 4) + ((int(275 * month / 9)) + day - 730531.5) L = 280.461 + 0.9856474 * D : L = moreLess360(L) M = 357.528 + (0.9856003) * D : M = moreLess360(M) Lambda = L + 1.915 * sin(degToRad(M)) + 0.02 * sin(degToRad(2 * M)) Lambda = moreLess360(Lambda) Obliquity = 23.439 - 0.0000004 * D Alfa = radToDeg(atn((cos(degToRad(Obliquity)) * tan(degToRad(Lambda))))) Alfa = moreLess360(Alfa) Alfa = Alfa - (360 * (int(Alfa / 360))) Alfa = Alfa + 90 * (int(Lambda / 90) - int(Alfa / 90)) ST = 100.46 + 0.985647352 * D Dec = radToDeg(asin(sin(degToRad(Obliquity)) * sin(degToRad(Lambda)))) a = (sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 : ' le soleil ne se couche pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Durinal_Arc = radToDeg(acos((sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) Noon = Alfa - ST Noon = moreLess360(Noon) UT_Noon = Noon - longitude ' ------------------------------------------------------------------------------ ' Calculating Prayer Times Arcs & Times ' ------------------------------------------------------------------------------ ' Zuhr Time (Local noon) zuhrTime = UT_Noon / 15 + timeZone + dst if standard = 1 : ' Asr Standard (Shafii, Maliki, Hanbali) Asr_Alt = radToDeg(atn(1 + tan(degToRad(abs(latitude - Dec))))) else : ' Asr Hanafi Asr_Alt = radToDeg(atn(2 + tan(degToRad(abs(latitude - Dec))))) end_if a = (sin(degToRad(90 - Asr_Alt)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Asr_Arc = radToDeg(acos((sin(degToRad(90 - Asr_Alt)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) Asr_Arc = Asr_Arc / 15 ' Asr Time asrTime = zuhrTime + Asr_Arc ' Shorouq Time sunRiseTime = zuhrTime - (Durinal_Arc / 15) ' Maghrib Time maghribTime = zuhrTime + (Durinal_Arc / 15) a = (sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 : ' le soleil ne se lève pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Esha_Arc = radToDeg(acos((sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) ' Isha Time ishaTime = zuhrTime + (Esha_Arc / 15) ' Fajr Time a = (sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Fajr_Arc = radToDeg(acos((sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) fajrTime = zuhrTime - (Fajr_Arc / 15) END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Aide sur le programme" + chr$(13) t$ = t$ + "Au lancement du programme, il affiche les résultats du calcul pour la ville de Moknine (Tunisie) pour le mois en cours" + chr$(13) t$ = t$ + "et propose comme méthode de calcul (dans le COMBO Méthode) celle appliquée en Tunisie (Tunisian Ministry of Religious)" + chr$(13) t$ = t$ + "Pour les autres pays, vous pouvez opter pour l'une des métodes proposées dans le COMBO, surtout si votre ville se situe aux" + chr$(13) t$ = t$ + "altitudes supérieures à 45°"+chr$(13) t$ = t$ + "Il propose un choix parmi 8 pays qui vous permettent d'en choisir une ville parmi celles qui sont proposées." + chr$(13) t$ = t$ + "Si votre ville ne s'y trouve pas, vous avez la possibilité d'entrer manuellement ses coordonnées (Latitude, Longitude, Fuseau, DST)" + chr$(13) t$ = t$ + "Vous pouvez aussi l'ajouter dans le code dans les lignes DATA." + chr$(13) t$ = t$ + "En optant pour l'un des pays proposé, vous activez un COMBO vous permettant de choisir une ville." + chr$(13) t$ = t$ + "Le COMBO DST c'est pour le choix de l'heure d'été (valeurs possibles : 0 pas de passage; 1 passage à l'heure d'été." + chr$(13) t$ = t$ + "Les boutons 'main' indiquant la gauche c'est pour le mois précédent, tandis que celle qui indique la droite c'est pour le mois suivant." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Après chaque modification et pour lancer un nouveau calcul,cliquez sur le bouton 'Calculer' (La Palice ne peut pas dire mieux !)" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "L’horaire de la prière de Ichaa correspond à la disparition du crépuscule (12° à 18°) après le coucher du Soleil." + chr$(13) t$ = t$ + "L'Arabie Saoudite, par exemple ajoute 90 mn à l'heure du Maghrib pour obtenir celle du Icha"+ chr$(13) t$ = t$ + " et ajoute 120 mn pour le mois de Ramadan."+ chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Pour information :" + chr$(13) t$ = t$ + "******************" + chr$(13) t$ = t$ + "La définition de l'heure du salat Asr divise les écoles islamiques en deux positions dogmatiques." + chr$(13) t$ = t$ + "Les trois écoles juridiques Malikite, Hambalite et Shafite soutiennent que le Asr commence lorsque la taille d'un objet vertical est la taille de son ombre." + chr$(13) t$ = t$ + "Cette méthode est celle adoptée généralement dans les communautés du Maghreb (d'obédience Malikite)." + chr$(13) t$ = t$ + "La quatrième école Hanafite estime que le Asr commence lorsque l'ombre d'un objet vertical est le double de la taille de cet objet."+chr$(13) t$ = t$ + "Cette nette différence dogmatique entraîne des écarts dans les horaires de salat sur les calendriers correspondant à un même endroit." + chr$(13) t$ = t$ + "Le programme vous permet de choisir votre doctrine réligieuse (Madh-hab) dans le COMBO 'Calcul Asr'. " + chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Le programme est fourni comme tel sans aucune garantie des résultats."+chr$(13) t$ = t$ + "En aucun cas je ne serais responsable de dommages résultants de l'utilisation de cette application." message t$ END_SUB rem ============================================================================ SUB Culture() dim_local t$ t$ = "Méthode de calcul des horaires de prières" + chr$(13) t$ = t$ + "Les prières (pour les Musulmans) sont au nombre de cinq par journée." + chr$(13) t$ = t$ + "Les horaires de ces cinq prières varient d'un endroit (ville) à l'autre et d'un jour à l'autre." + chr$(13) t$ = t$ + "Le calcul fait intervenir les heures du crépuscule, mais lequel ?" + chr$(13) t$ = t$ + "Il existe trois types de crépuscules : " + chr$(13) t$ = t$ + "Le crépuscule astronomique : il intervient lorsque le soleil se situe " t$ = t$ + "en dessous de l’horizon à une hauteur de 18°, et il correspond au moment" + chr$(13) t$ = t$ + "où l’obscurité totale s’installe au niveau de cet horizon." + chr$(13) t$ = t$ + "Le crépuscule nautique : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 12°." + chr$(13) t$ = t$ + "Le crépuscule civil : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 06°." + chr$(13) t$ = t$ + "Or, il s’est avéré que le fait de se baser sur le crépuscule astronomique (18°) pour le calcul des heures de prière " t$ = t$ + "pose des difficultés pour les pays d’Europe." + chr$(13) t$ = t$ + "Il est impossible de calculer les horaires de la prière du Fajr à partir du 18° et ce à partir de la mi-mai jusqu’à la mi-juin environ."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "L’écart entre le Fajr et celui du lever du soleil (Chourouk) se creuse pour atteindre un record de 3h40 min en période d’été." + chr$(13) t$ = t$ + "L’écart entre la prière de Ichaa et celle du Fajr se réduit durant des semaines en période d’été." + chr$(13) t$ = t$ + "A titre d’exemple : le 28 mai à Paris en se basant sur le 18°, la prière de Ichaa est à 00h18 et la prière du Fajr est à 02h59 !" + chr$(13) t$ = t$ + "Soit un écart de 2h41mn."+chr$(13) t$ = t$ + "Par contre, retenir le critère du 12° (le crépuscule nautique) permet de surmonter ces difficultés." + chr$(13) t$ = t$ + "D’une part, l’écart entre la prière du Fajr et celle du lever du soleil (Chourouk) n’excède jamais 02 heures durant toute l’année."+chr$(13) t$ = t$ + "D’autre part, l’écart entre la prière du Ichaa et celle du Fajr reste constamment importante."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Le fait d'opter pour ce critère du 12° permet d’alléger la contrainte sur les musulmans vivant en Europe pour cette pratique cultuelle " + chr$(13) t$ = t$ + "et surtout durant le mois de Ramadan et spécialement en période d’été." + chr$(13) t$ = t$ + "L’avantage de ce choix réside dans la possibilité de l’utiliser durant toute l’année, à l’inverse de celui du 18°." + chr$(13) t$ = t$ + "Certains pays ajoutent 5 minutes en plus par précaution pour les horaires de Dhohr et du Maghrib" + chr$(13) t$ = t$ + "L’horaire du Asr est calculé selon la règle islamique où l’ombre de chaque objet devient égale à celui-ci." + chr$(13) t$ = t$ + "Mais certains pays utilisent d'autres critères, ce qui ne facilite pas la tâche !" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "En résumé : " + chr$(13) t$ = t$ + "* Prière de l'aube (matin) (Fajr) : Le début coïncide avec la fin du délai de d'Isha, soit lorsque le soleil remonte à 19 ° sous l'horizon." + chr$(13) t$ = t$ + " La fin est atteinte au lever du soleil avec le limbe supérieur du soleil tangent à l'horizon soit h = - 0,267°"+ chr$(13) t$ = t$ + "* Prière de la mi-journée (midi) (Dhur) : la durée permise commence quand le soleil a traversé le méridien (soit quand l'ombre d'un objet a commencé à " t$ = t$ + " augmenter) et se termine lorsque l'ombre d'un gnomon s'est allongée d'un quart de sa hauteur par rapport à son ombre à midi." + chr$(13) t$ = t$ + "* Prière de l'après-midi ('Asr) : l'intervalle commence lorsque l'augmentation de l'ombre est égale à la longueur du gnomon et se termine quand l'ombre en a atteint le double." + chr$(13) t$ = t$ + "* Prière du coucher de soleil (Maghrib) : Le début coïncide avec la disparition totale du soleil sous l'horizon , soit pour h = -0.267°."+chr$(13) t$ = t$ + " La fin du délai est atteinte à la dernière lueur du crépuscule, soit le soleil à 18° sous l'horizon."+chr$(13) t$ = t$ + " Attention, cette condition peut être irréalisable à certaines dates pour certaines latitudes." + chr$(13) t$ = t$ + "* Prière de la nuit ('Isha) : Le début coïncide avec la fin du délai de Maghrib, soit le soleil à 17° sous l'horizon." + chr$(13) t$ = t$ + " La fin du délai est atteinte avec l'apparition de l'aube lorsque le soleil remonte à 19° sous l'horizon." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "Les opinions divergent sur les angles à utiliser pour le calcul de Fajr et Isha." +chr$(13) t$ = t$ + "La mosquée de Paris retient 15° pour Fajr et 18° pour Isha." + chr$(13) + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Pour des plus amples informations sur le calcul des horaires de prière, référez-vous à : " + chr$(13) t$ = t$ + "http://www.averroes-aveyron.fr/medias/files/methodes-de-calcul.pdf" + chr$(13) message t$ END_SUB rem ============================================================================ ' Liste des pays : nom du pays, fuseau horaire du pays et flag pour heure d'été (1 oui, 0 non) data "Algérie" ,1,0 , "Belgique",1,1 ,"Egypte",2,0 , "France",1,1, "Lybie",2,0 data "Maroc",0 , 0, "Arabie Saoudite",3,0 ,"Tunisie",1,0 ' ------------------------------------------------------------------------------ data "Algérie" : ' UTC + 1 ; DST 0 ' ----------- 1: ' Ville Latitude Longitude data "Adrar" , 27.850, -0.317 data "Alger" , 36.833, 3.000 data "Annaba" , 36.917, 7.783 data "Batna" , 35.567, 6.167 data "Bechar" , 31.583, -2.283 data "Bejaia" , 36.817, 5.050 data "Biskra" , 34.833, 5.683 data "Blida" , 36.500, 2.833 data "Boussaada" , 35.167, 4.150 data "Constantine" , 36.367, 6.667 data "El Asnam" , 36.183, 1.350 data "El Djelfa" , 34.717, 3.233 data "Ghardaia" , 32.333, 3.667 data "Laghouat" , 33.817, 2.917 data "Mostaganem" , 35.900, 0.083 data "M'Sila" , 35.667, 4.517 data "Oran" , 35.750, -0.633 data "Ouargla" , 32.000, 5.267 data "Setif" , 36.183, 5.400 data "Sidi-bel-Abbes" , 35.250, -0.650 data "Skikda" , 36.883, 6.900 data "Tamanrasset" , 22.833, 5.467 data "Tebessa" , 35.350, 8.100 data "Tiaret" , 35.333, 1.333 data "Tilimsen" , 34.883, -1.350 data "Tizi-Ouzou" , 36.733, 4.083 data "FIN" ' ------------------------------------------------------------------------------ data "Belgique" : ' UTC + 1 UTC + 2 Heure d'été ' ----------- 2: ' Ville Latitude Longitude data "Antwerp" , 51.217, 4.417 data "Brussels" , 50.850, 4.350 data "Charleroi" , 50.417, 4.450 data "Gent" , 51.033, 3.700 data "Liege" , 50.633, 5.583 data "Ostende" , 51.217, 2.917 data "Mons" , 50.467, 3.967 data "Namur" , 50.467, 4.867 data "FIN" ' ------------------------------------------------------------------------------ data "Egypte" : ' UTC + 2 ' ------------------------------------- 3: ' Ville Latitude Longitude data "Abou Simbel" , 22.317, 31.633 data "Alexandria" , 31.217, 29.917 data "Aswan" , 24.083, 32.933 data "Asyut" , 27.233, 31.117 data "Beni-Souef" , 29.083, 31.083 data "Cairo" , 30.050, 31.250 data "Damanhur" , 31.050, 30.467 data "Dumyat" , 31.433, 31.800 data "El Alamein" , 30.833, 28.950 data "Helwan" , 29.850, 31.333 data "Isma'ilia" , 30.600, 32.250 data "Karnak" , 25.683, 32.667 data "Port Said" , 31.283, 32.300 data "Sohag" , 26.550, 31.700 data "Suez" , 29.983, 32.550 data "Tanta" , 30.800, 31.000 data "Zagazig" , 30.583, 31.500 data "FIN" ' ------------------------------------------------------------------------------- data "France" : ' UTC + 1 UTC + 2 Heure d'été ' ---------- 4: ' Ville Latitude Longitude data "Brest" , 48.383, -4.500 data "Quimper" , 48.000, -4.100 data "Lorient" , 47.750, -3.350 data "St-Brieuc" , 48.517, -2.750 data "Vannes" , 47.667, -2.733 data "St Nazaire" , 47.283, -2.200 data "Rennes" , 48.100, -1.667 data "Cherbourg" , 49.633, -1.617 data "Nantes" , 47.233, -1.583 data "La-Roche-sur-Yon" , 46.633, -1.500 data "Bayonne" , 43.500, -1.467 data "La Rochelle" , 46.167, -1.167 data "St-Lo" , 49.117, -1.083 data "Laval" , 48.067, -0.750 data "Bordeaux" , 44.833, -0.567 data "Angers" , 47.483, -0.533 data "Mont-de-Marsan" , 43.900, -0.500 data "Niort" , 46.317, -0.450 data "Pau" , 43.300, -0.367 data "Caen" , 49.183, -0.367 data "Alençon" , 48.417, 0.083 data "Tarbes" , 43.233, 0.083 data "Le Havre" , 49.500, 0.100 data "Angouleme" , 45.667, 0.167 data "Le Mans" , 48.000, 0.200 data "Poitiers" , 46.583, 0.333 data "Cahors" , 44.467, 0.433 data "Auch" , 43.500, 0.600 data "Agen" , 44.200, 0.633 data "Tours" , 47.383, 0.700 data "Perigueux" , 45.200, 0.733 data "Dieppe" , 49.917, 1.083 data "Rouen" , 49.433, 1.083 data "Evreux" , 49.050, 1.183 data "Limoges" , 45.833, 1.250 data "Montauban" , 44.017, 1.333 data "Blois" , 47.600, 1.333 data "Toulouse" , 43.617, 1.450 data "Chartres" , 48.450, 1.500 data "Foix" , 42.950, 1.583 data "Chateauroux" , 46.817, 1.683 data "Tulle" , 45.267, 1.767 data "Abbeville" , 50.100, 1.850 data "Gueret" , 46.167, 1.866 data "Orleans" , 47.900, 1.900 data "Vierzon" , 47.233, 2.050 data "Pontoise" , 49.050, 2.083 data "Beauvais" , 49.433, 2.083 data "Versailles" , 48.800, 2.133 data "Albi" , 43.933, 2.144 data "Nanterre" , 48.883, 2.217 data "Amiens" , 49.900, 2.300 data "Paris" , 48.833, 2.333 data "Bourges" , 47.083, 2.383 data "Carcassonne" , 43.217, 2.350 data "Dunkerque" , 51.033, 2.383 data "Aurillac" , 44.933, 2.433 data "Bobigny" , 48.917, 2.450 data "Créteil" , 48.783, 2.467 data "Melun" , 48.533, 2.557 data "Evry" , 48.633, 2.567 data "Rodez" , 44.350, 2.567 data "Montlucon" , 46.333, 2.600 data "Arras" , 50.283, 2.767 data "Lens" , 50.433, 2.833 data "Perpignan" , 42.700, 2.900 data "Lille" , 50.650, 3.083 data "Clermont-Ferrand",45.783, 3.083 data "Nevers" , 47.000, 3.150 data "Moulins" , 46.567, 3.333 data "Mende" , 44.533, 3.500 data "Auxerre" , 47.800, 3.583 data "Laon" , 49.567, 3.617 data "Montpellier" , 43.600, 3.883 data "Le Puy" , 45.050, 3.883 data "Avallon" , 47.500, 3.900 data "Reims" , 49.250, 4.033 data "Troyes" , 48.300, 4.083 data "Roanne" , 46.033, 4.083 data "Nimes" , 43.500, 4.350 data "Chalons-S-Marne", 48.967, 4.367 data "St-Etienne" , 45.433, 4.383 data "Privas" , 44.733, 4.600 data "Mezières" , 49.767, 4.733 data "Avignon" , 43.933, 4.800 data "Lyon" , 45.767, 4.833 data "Macon" , 45.300, 4.833 data "Valence" , 44.933, 4.900 data "Dijon" , 47.333, 5.033 data "Chaumont" , 48.117, 5.133 data "Bar-le-Duc" , 48.767, 5.167 data "Bourg" , 46.200, 5.217 data "Observatoire SIRENE" , 44.000, 5.333 data "Marseille " , 43.300, 5.367 data "Lons-le-Saunier", 46.683, 5.550 data "Grenoble" , 45.183, 5.717 data "Toulon" , 43.117, 5.917 data "Chambéry" , 45.567, 5.917 data "Besancon" , 47.250, 5.983 data "Gap" , 44.550, 6.083 data "Annecy" , 45.900, 6.117 data "Metz" , 49.117, 6.183 data "Vesoul" , 47.633, 6.150 data "Nancy" , 48.700, 6.200 data "Digne" , 44.083, 6.233 data "Epinal" , 48.167, 6.467 data "Belfort" , 47.633, 6.867 data "Cannes" , 43.550, 7.000 data "Nice" , 43.700, 7.267 data "Colmar" , 48.083, 7.350 data "Mulhouse" , 47.750, 7.350 data "Strasbourg" , 48.583, 7.750 data "Ajaccio" , 41.917, 8.717 data "Bastia" , 42.683, 9.433 data "FIN" ' ------------------------------------------------------------------------------ data "Libye" :' UTC + 2 ' --------- 5: ' Ville Latitude Longitude data "Sabratah" , 32.833, 12.400 data "Tripoli" , 32.967, 13.200 data "Al Khums" , 32.650, 14.250 data "Sabhah" , 27.050, 14.433 data "Benghazi" , 32.117, 20.083 data "Ajdabiyah" , 30.800, 20.250 data "Al Marj" , 32.500, 20.833 data "Darnah" , 32.767, 22.650 data "Tubruq" , 32.100, 23.933 data "FIN" ' ------------------------------------------------------------------------------
data "Moroc" : ' UTC + 0 ' --------- 6: ' Ville Latitude Longitude data "Agadir" , 30.500, -9.667 data "Safi" , 32.300, -9.333 data "El Jadida" , 33.183, -8.283 data "Marrakech" , 31.817, -8.000 data "Settat" , 33.067, -7.617 data "Casablanca" , 33.650, -7.583 data "Mohammedia" , 33.717, -7.333 data "Khouribga" , 32.900, -6.950 data "Sale" , 34.067, -6.833 data "Kenitra" , 34.333, -6.567 data "Beni Mellal" , 32.367, -6.483 data "Khemisset" , 33.833, -6.050 data "Ksar el Kebir" , 35.067, -5.933 data "Tanger" , 35.800, -5.833 data "Meknes" , 33.883, -5.617 data "Tetouan" , 35.567, -5.367 data "Ceuta" , 35.883, -5.317 data "Fes" , 34.083, -5.000 data "Taza" , 34.267, -4.017 data "Nador" , 35.167, -3.000 data "Oujda" , 34.683, -1.750 data "FIN" ' ------------------------------------------------------------------------------ rem ============================================================================ data "Arabie Saoudite" : ' UTC + 3 ' ---------------- 7: ' Ville Latitude Longitude data "Riyadh" , 24.650, 46.767 data "Al Wajh" , 26.267, 36.467 data "Tabuk" , 28.367, 36.533 data "Yanbu'Al Bahr" , 24.117, 38.067 data "Tayma" , 27.617, 38.500 data "Jiddah" , 21.500, 39.167 data "Khaybar" , 25.800, 39.200 data "Medina" , 24.500, 39.583 data "Mecca" , 21.433, 39.817 data "Al Jawf" , 29.783, 39.867 data "Al Lith" , 20.167, 40.267 data "At Ta'if" , 21.250, 40.350 data "Badanah" , 31.000, 41.083 data "Al Qunfidhah" , 19.150, 41.117 data "Turabah" , 21.250, 41.567 data "Ha'il" , 27.517, 41.750 data "bha" , 18.233, 42.517 data "Jizan" , 16.933, 42.550 data "Buraydah" , 26.333, 43.983 data "Najran" , 17.517, 44.317 data "Shaqra" , 25.300, 45.250 data "Al Artawiyak" , 26.517, 45.350 data "Ad Dilam" , 23.983, 47.100 data "Haradh" , 24.200, 49.117 data "Al Hufuf" , 25.333, 49.567 data "Ad Dammam" , 26.417, 50.100 data "Al Khurmah" , 21.917, 42.033 data "FIN" ' ------------------------------------------------------------------------------ Data "Tunisie" : ' UTC + 1 ' ----------- 8: ' Ville Latitude Longitude data "Gafsa" , 34.467, 8.717 data "Beja" , 36.717, 9.217 data "Bizerte" , 37.300, 9.867 data "Kairouan" , 35.700, 10.017 data "Gabes" , 33.867, 10.100 data "Tunis" , 36.833, 10.217 data "Sousse" , 35.833, 10.633 data "Sfax" , 34.750, 10.717 data "Nabeul" , 36.500, 10.733 data "Moknine" , 35.633, 10.833 data "Monastir", 35.777, 10.826 data "Mahdia" , 35.502, 11.045 data "Jendouba" , 35.501, 08.783 data "Le Kef" , 36.179, 08.714 data "Siliana" , 35.990, 09.278 data "Ariana" , 36.862, 10.195 data "Ben Arous" , 36.743, 10.232 data "Kasserine" , 35.171, 08.828 data "Kebili" , 33.124, 08.836 data "La Manouba" , 36.807, 10.101 data "Medenine" , 33.348, 10.494 data "Sidi Bouzid" , 35.033, 09.5 data "Tataouine" , 32.921, 10.450 data "Zaghouan" , 36.399, 10.147 data "La Soukra" , 36.883, 10.25 data "La Marsa" , 36.876, 10.325
data "FIN" rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&& FIN DU CODE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
Dernière édition par papydall le Mar 30 Avr 2019 - 14:40, édité 2 fois (Raison : Edité pour corriger certaines erreurs détectées par Marc) | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Calculateur des heures de prière. Lun 29 Avr 2019 - 22:56 | |
| Bonsoir Papydall Pour ma part, j'ai réalisé un programme d'appel a la prière il y a 3 ou 4 ans. Mais j'utilise un fichier qui contient les horaires des 5 prières que j’intègre chaque année au 1er janvier. mon fichier semblerai correspondre aux horaires France 12° de ton programme. J'ai donc comparé mon fichier et tes horaires France 12° . J'ai constaté une petite différence : - 4-5 minutes + tard pour Fajr avec ton programme. - 4-5 minutes + tôt pour Dohr, Magreb et Isha avec ton programme. - Pas de différence pour Asr. En fait la différence est entre 4 et 5 minutes et cela sur toute l'année 2018. Je n'ai pas contrôlé chaque jour, mais juste pris quelques points de repères... Janvier, Mars, Mai, Juin, etc. Je reprendrai cela dans les prochains jours... Si tu m'autorise, je reprendrai bien le code pour l'intégrer à mon programme. Et tenter de le rendre entièrement automatique. Plus besoin de m'embêter avec un fichier que je met à jour chaque année... Bravo pour ton programme et encore merci pour le partage.
Dernière édition par Minibug le Mar 30 Avr 2019 - 6:59, édité 2 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculateur des heures de prière. Lun 29 Avr 2019 - 23:32 | |
| Excellent ! Bravo Papydall !
Quel travail !C'est beau ! Même les années bissextiles sont prises en compte ! Je me coucherai moins bête ce soir ! Pardonne-moi ces quelques remarques sans grande importance, je chipote : Je vois que nous n'avons pas la même manière d'écrire certains pays : Tunise : Tunisie Egypt : Egypte Arabie Séoudite : Arabie Saoudite Lors de la navigation de mois en mois (main gauche, main droite) , dans le sens décroissant, le nombre de lignes correspond au nombre de jours. Dans le sens croissant, il y a une ligne en trop en bas du tableau. Si on clique trop vitre sur les mains, c'est à dire avant que le tableau ait fini de s'afficher, le programme plante. - Spoiler:
Dans l'aide, il manque un "s" à la fin du mot "résultat" (2ème ligne) Encore pardon pour ces critiques. "La critique est aisée, mais l'art est difficile." D'autant plus que j'aurais été incapable de faire un tel programme. Merci pour tes partages ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 30 Avr 2019 - 1:47 | |
| Deux petites suggestions - Ajouter un fichier son qui démarre à l' heure de l' appel. - Récupérer la localisation de l'utlilisateur depuis son ordinateur en paramètre par défaut. C'est bon, je sors... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Mar 30 Avr 2019 - 6:34 | |
| Merci à tous ceux qui ont pris la peine de tester mon programme - Minibug a écrit:
- En fait la différence est entre 4 et 5 minutes et cela sur toute l'année 2018.
La convention de l’UIOF (Union des Orgnaisations Islamiques de France) est : un angle de 12° pour Fajr et Icha et une déduction de 5 minutes par mesure de précaution. - Minibug a écrit:
- Si tu m'autorise, je reprendrai bien le code pour l'intégrer à mon programme.
Tu as tous les droits de reprendre le code et de l’utiliser ou le modifier ou l’intégrer dans un autre programme. - Marc a écrit:
- Pardonne-moi ces quelques remarques sans grande importance, je chipote :
Bien au contraire ! Tu participes ainsi pour l’amélioration du programme et je te suis reconnaissant ! Les erreurs (horreurs comme disait Yannick) sont corrigées; j'ai édité mon post précedent pour apporter les corrections utiles au programme. - Marc a écrit:
- il y a une ligne en trop en bas du tableau.
C’est corrigé. - Marc a écrit:
- Si on clique trop vitre sur les mains, c'est à dire avant que le tableau ait fini de s'afficher, le programme plante.
J’ai blindé mon code et maintenant tu peux cliquer aussi vite que ton ombre : le programme ne plante plus. - Yannick a écrit:
- Ajouter un fichier son qui démarre à l' heure de l' appel.
C’est réalisable pourquoi pas ! - Yannick a écrit:
- Récupérer la localisation de l'utlilisateur depuis son ordinateur en paramètre par défaut.
Je ne sais pas comment faire
Dernière édition par papydall le Mar 30 Avr 2019 - 7:00, édité 1 fois | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Calculateur des heures de prière. Mar 30 Avr 2019 - 6:57 | |
| Merci pour ces réponses Papydall. Pour répondre à Yannick, mon programme inclus l'Adhan (Appel à la prière) pour l'appel de chaque prière. Et comme Papydall me donne carte blanche, je vais pouvoir tenté l'intégration de la formule de calcul en lieu et place de mon fichier. Je vais regarder cela durant les prochains jours. Pour l'histoire de la localisation on pourrai peut être envoyer l'utilisateur vers un site ou il tape ensuite le nom de sa ville et peut récupérer les coordonnées (Longitude et latitude). Comme sur google map : https://www.google.fr/mapsVous tapez le lieu en haut à gauche et vous avez le résultat dans l'adresse après le CP et la ville. Comme sur la ligne ci-dessous : google.fr/maps/place/86000+Poitiers/@46.5846126,0.3014298,12z/data=!3m1!4b1!4m5!3m4!1s0x47fdbe724...Sur ce je vous souhaite une très bonne journée à tous ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 30 Avr 2019 - 12:40 | |
| Salut tout le monde ! En fait j'ai pensé à la récup de la localisation pour une version android. Se promener avec sa tour toute la journée...pas très pratique...non ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculateur des heures de prière. Mar 30 Avr 2019 - 13:51 | |
| Bonjour à tous ! @Papydall Il reste deux lignes rebelles : ligne 87 pour la Tunisie : - Spoiler:
et ligne 486 : t$ = t$ + "L'Arabie Séoudite, par exemple ajoute 90 mn à l'heure du Maghrib pour obtenir celle du Icha"+ chr$(13) Encore bravo pour cette réalisation ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Mar 30 Avr 2019 - 14:46 | |
| Merci Marc. J'ai apporté les corrections nécessaires dans le code ci-haut. Je devrai peut-être penser à changer mes lunettes ou (mieux encore) disposer de plus d'une seule et unique paire d'yeux ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Jeu 2 Mai 2019 - 3:34 | |
| Nouvelle version de CalcPrayerTimesAjout d’une fonction pour déterminer la direction de la Kibla à partir du lieu de la prière. Ajout d’une fonction pour calculer la distance orthodromique entre le lieu de la prière et la Mecque où se trouve la Kaaba. Plusieurs orthographes sont permises : Qiblah, Qibla, Kibla Kibla : Point du ciel indiquant la direction de La Mecque, et vers lequel se tournent les musulmans pour prier. Il s’agit de l'orthodromie qui joint le lieu de prière à la Kaaba (en arabe: الكعبة ), dans la cité de La Mecque. L'orthodromie désigne la géodésique, le chemin le plus court, entre deux points d'une sphère. C'est donc l'arc de grand cercle passant par ces deux points. - Code:
-
rem ============================================================================ rem CalcPrayerTimes.bas rem Calculateur des heures de prière par Papydall rem Version 2.0 rem Dernière modification : 02 Mai 2019 rem ============================================================================
Init() Gui() Afficher_Kibla() Grille(NbJours(month,year)) Run()
end rem ============================================================================ SUB Init() label clic, change label 1, 2, 3, 4, 5, 6, 7, 8 : ' pour restore_label dim year, month, day dim longitude, latitude, timeZone dim fajrTwilight, ishaTwilight dim fajrTime, sunRiseTime, zuhrTime, asrTime, maghribTime, ishaTime dim d, l, m, lambda, obliquity, alfa, st, dec, durinal_Arc, noon, Ut_Noon dim Asr_Alt, Asr_Arc, Esha_Arc, Fajr_Arc dim prayTime$(5) dim hours, minutes ,h$, m$, a, n, dst, methode, p$, ville$, pays$ dim NbPays : NbPays = 8 : ' 8 c'est le nombre des pays proposés dans le programme dim Fuseau(8), H_Ete(8) dim standard dim nc standard = 1 : ' Pour le calcul du Asr : 1 ---> (Shafii, Maliki, Hanbali) ' 0 ---> Hanafi day = date_day : month = date_month : year = date_year : ' La date courante END_SUB rem ============================================================================ SUB GUI() dim_local i,t$ t$ = " Calculateur des heures de prière par Papydall " color 0,240,255,255 width 0,1100 : height 0,800 : top 0,(screen_y - height(0)) / 2 left 0,(screen_x - width(0))/2 shape 5 : top 5,5 : left 5,450 : width 5,600 : height 5,50 shape_rectangle_rounded 5 : color 5,25,100,50 shape 6 : top 6,5 : left 6,20 : width 6,420 : height 6,50 shape_rectangle_rounded 6 : color 6,25,100,50 alpha 10 : top 10,20 : left 10,40 : font_color 10,250,100,50 font_bold 10 : font_name 10,"tahoma" : font_size 10,12 caption 10,t$ : caption 0,t$ : application_title t$ alpha 20 : top 20,80 : left 20,010 : caption 20,"Latitude : " edit 21 : top 21,80 : left 21,070 : width 21,60 : font_bold 21 : text 21,"35.633" hint 21,"En degrés décimaux (± 90°) positive au Nord" : on_change 21,change alpha 30 : top 30,80 : left 30,140 : caption 30,"Longitude : " edit 31 : top 31,80 : left 31,210 : width 31,60 : font_bold 31 : text 31,"10.833" hint 31,"En degrés décimaux (± 180°) positive à l'est" : on_change 31,change alpha 40 : top 40,80 : left 40,285 : caption 40,"Fuseau :" spin 41 : top 41,80 : left 41,335 : width 41,60 : min 41,-12 : max 41,12 : font_bold 41 hint 41,"ZoneTime, décalage heure : Valeurs possibles ± 12" : position 41,1 on_change 41,change alpha 45 : top 45,80 : left 45,420 : caption 45,"DST :" : font_bold 45 : font_name 45,"tahoma" combo 46 : top 46,80 : left 46,450 : width 46,50 : hint 46,"Heure d'été" on_change 46,change alpha 50 : top 50,80 : left 50,520 : caption 50,"Méthode :" combo 51 : top 51,80 : left 51,580 : width 51,480 : font_bold 51 : height 51,40 font_name 51,"tahoma" : on_change 51,change hint 51,"convention de calcul utilisé" alpha 55 : top 55,130 : left 55,10 : font_bold 55 : font_name 55,"tahoma" caption 55,"Calcul Asr :" combo 56 : top 56,130 : left 56,80 : font_bold 56 : font_name 56,"tahoma" width 56,220 : hint 56,"Doctrines religieuses" : on_change 56,change item_add 56,"Standard (Shafii, Maliki, Hanbali)" item_add 56,"Hanafi" : item_select 56,1 button 60 : top 60,20 : left 60,950 : caption 60,"Quitter" on_click 60,clic button 70 : top 70,20 : left 70,470 : caption 70,"Calculer" on_click 70,clic : inactive 70 button 80 : top 80,120 : left 80,500 : font_bold 80 : font_name 80,"wingdings 2" font_size 80,30 : caption 80,"D" : hint 80,"Mois précédent" : on_click 80,clic button 90 : top 90,120 : left 90,760 : font_bold 90 : font_name 90,"wingdings 2" font_size 90,30 : caption 90,"E" : hint 90,"Mois suivant" : on_click 90,clic alpha 100: top 100,130 : left 100,630 : font_bold 100 : font_name 100,"arial" font_size 100,12 : caption 100,Month_Name$(month) + " " + str$(year) item_add 46,0 : item_add 46,1 : item_select 46,1 for i = 1 to 17 : read t$ : item_add 51,t$ : next i item_select 51,14 for i = 20 to 70 step 10 : font_bold i : font_name i,"tahoma" : next i alpha 110 : top 110,180 : left 110,10 : font_bold 110 : font_size 110,12 font_name 110,"tahoma" : font_color 110, 255,0,0 : caption 110,"Pays : Tunisie" alpha 120 : top 120,180 : left 120,220 : font_bold 120 : font_size 120,12 font_name 120,"tahoma" : font_color 120, 255,0,0 : caption 120,"Ville : Moknine" alpha 130 : top 130,230 : left 130,10 : font_bold 130 : font_name 130,"tahoma" font_size 130,12 : font_color 130,0,0,255 : caption 130,"Choix Pays / Villes" alpha 140 : top 140,260 : left 140,60 : font_bold 140 : font_name 140,"Wingdings" font_size 140,30 : caption 140,"ê" button 150 : top 150,20 : left 150,600 : font_bold 150 : caption 150,"Aide" : on_click 150,clic button 160 : top 160,20 : left 160,740 : font_bold 160 : width 160,150 caption 160,"Pour votre culture" : on_click 160,clic container_option 200 : top 200,300 : left 200,10 : width 200,130 : height 200,35*NbPays +10 color 200,255,255,0 for i = 1 to NbPays option 200+i : parent 200+i,200 : top 200+i,30*i : left 200+i,10 font_bold 200+i : font_name 200+i,"tahoma" : on_click 200+i,clic read p$ : caption 200+i,p$ read fuseau(i) : read H_Ete(i) next i combo 300 : top 300,300 : left 300,160 font_bold 300 : width 300,300 : hide 300 : on_change 300,change picture 400 : top 400,450 : left 400,170 : width 400,300 : height 400,300 2d_target_is 400 : print_target_is 400 alpha 410 : top 410,600 : left 410,10 : font_bold 410 : font_name 410,"tahoma" font_size 410,10 : font_color 410,255,0,0 t$ = "Direction de la Kibla" + chr$(13) + "depuis Moknine" + chr$(13) + "Tunisie : " caption 410,t$ hint 410,"Angle en ° à partir du Nord" +chr$(13)+"indiquant la direction de la Kibla" alpha 420 : top 420,630 : left 420,130 : font_bold 420 : font_name 420,"tahoma' font_size 420,12 : font_color 420,0,0,0 alpha 430 : top 430, 680 : left 430,1 : font_bold 430 : font_name 430,"tahoma" font_size 430,10 : font_color 430,0,0,255 hint 430,"Distance de la Mecque" END_SUB rem ============================================================================ ' Formule donnant la distance orthdromique entre deux points du globle exprimés ' par leurs coordonnées (latitude et longitude) ' La formule est donnée en assimilant la Terre à une sphère de 40 000 km de circonférence. ' 1.852 : c'est la valeur en km de un mille marin ' 60 : ce nombre provient du fait que le mille marin (1 852 m) correspond à une ' minute d'arc sur un grand cercle de la surface terrestre, et donc 60 milles ' marins correspondent à un degré. FNC Distance_Orthodromique(lat1,lon1) dim_local lat2,lon2,km,d lat2 = 21.433 : lon2 = 39.817 : ' Coordonnées de la Mecque degrees km = 60*1.852 d = km*acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1)) d = int(d) result d END_FNC rem ============================================================================ ' Fonction de calcul de la Kibla ' Elle retourne l'angle partant de la direction du nord et compté dans le sens ' rétrograde (sens des aiguilles d'une montre) FNC Kibla(latitude,longitude) dim_local Lat_Meq : ' Latitude de la Mecque dim_local Lon_Meq : ' Longitude de la Mecque dim_local a,b,c,q,n,d Lat_Meq = 21.433 Lon_Meq = 39.817 a = Lon_Meq - longitude b = latitude c = Lat_Meq degrees n = sin(a) d = cos(b) * tan(c) - sin(b) * cos(a) if d = 0 then result 0 : exit_fnc q = atn(n/d) if sgn(n) <> sgn(q) then q = q + 180 if (sgn(n) < 0) and (sgn(q) < 0) then q = q + 360 result int(q) END_FNC rem ============================================================================ SUB Afficher_Kibla() dim_local la,lo,xc,yc,r,x,y,a,a1,c$,d degrees la = val(text$(21)) : lo = val(text$(31)) xc = width(400)/2 : yc = height(400) / 2 : r = xc-20 color 400,20,100,20 : font_color 400,255,255,0 : font_bold 400 : font_size 400,10 2d_fill_color 200,100,020 : 2d_circle xc,yc,r 2d_pen_width 2 for a = 0 to 360 step 10 2d_line xc,yc,xc+r*cos(a),yc+r*sin(a) next a 2d_fill_color 255,255,255 : 2d_circle xc,yc,r-10 2d_fill_color 0,0,0 : 2d_circle xc,yc,5 a = Kibla(la,lo) : r = r-15 x = xc+r*cos(a-90) : y = yc+r*sin(a-90) 2d_pen_width 2 : 2d_line xc,yc,x,y r = r-15 for a1 = a-80 to a-100 step -1 2d_poly_to xc+r*cos(a1),yc+r*sin(a1) next a1 2d_poly_to x,y 2d_fill_color 20,100,20 print_locate xc-4,2 : print "N" print_locate 2*xc-15,yc-10 : print "E" print_locate xc-4,2*yc-20 : print "S" print_locate 5,yc-10 : print "W" d = Distance_Orthodromique(la,lo) caption 420, str$(a) + "°" caption 430, "Distance orthodromique :" + chr$(13) + str$(d) + " km" END_SUB rem ============================================================================ ' Tracer une grille en fonction du nombre des jours dans le mois en cours SUB Grille(n) grid 1 : top 1,180 : left 1,500 : width 1,342 : height 1,n*18-8 : grid_row 1,n+1 grid_row_fixed 1,1 : grid_row_height 1,16 grid_column 1,7 : grid_column_fixed 1,1 : grid_column_width 1,50 : font_bold 1 grid_fixed_color 1,255,255,0 : grid_one_column_width 1,1,30 color 1,0,255,255 grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" END_SUB rem ============================================================================ SUB Run() dim_local nb nb = NbJours(month,year) for n = 1 to Nb : Go(n) : Affiche(n) : next n END_SUB rem ============================================================================ Change: active 70 : caption 420,"" for nc = 21 to 41 step 10 : off_change nc : next nc for nc = 46 to 56 step 10 : off_change nc : next nc off_change 300 if item_index(56) = 1 then standard = 1 : else : standard = 0 select number_change case 21 : if text$(21) = "" then text 21,0 case 31 : if text$(31) = "" then text 31,0 case 41 : if text$(41) = "" then text 41,0 if abs(val(text$(41))) > 12 then text 41,0 case 46 : if (text$(46) <> "0") or (text$(46) <> "1") then text 46,0 case 51 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 56 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 300 : New_Coord() end_select for nc = 21 to 41 step 10 : on_change nc,change : next nc for nc = 46 to 56 step 10 : on_change nc,change : next nc on_change 300,change return rem ============================================================================ ' Gestion des clics de l'utilisateur Clic: for nc = 60 to 90 step 10 : off_click nc : next nc for nc = 150 to 160 step 10 : off_click nc : next nc for nc = 201 to 208 : off_click nc : next nc if number_click > 200 then caption 140,"ê î" select number_click case 060 : if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate case 070 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() : inactive 70 case 080 : Mois_Precedant() case 090 : Mois_Suivant() case 150 : Aide() case 160 : Culture() case 201 : restore_label 1 : pays$ = "Algérie" : List_Ville(number_click-200) case 202 : restore_label 2 : pays$ = "Belgique" : List_Ville(number_click-200) case 203 : restore_label 3 : pays$ = "Egypte" : List_Ville(number_click-200) case 204 : restore_label 4 : pays$ = "France" : List_Ville(number_click-200) case 205 : restore_label 5 : pays$ = "Lybie" : List_Ville(number_click-200) case 206 : restore_label 6 : pays$ = "Maroc" : List_Ville(number_click-200) case 207 : restore_label 7 : pays$ = "Arabie Saoudite": List_Ville(number_click-200) case 208 : restore_label 8 : pays$ = "Tunisie" : List_Ville(number_click-200) end_select for nc = 60 to 90 step 10 : on_click nc,clic : next nc for nc = 150 to 160 step 10 : on_click nc,clic : next nc for nc = 201 to 208 : on_click nc,clic : next nc return rem ============================================================================ SUB Go(day) calcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) NumberToHrMin(fajrTime) : prayTime$(0) = h$ + ":" + m$ NumberToHrMin(SunRiseTime) : prayTime$(1) = h$ + ":" + m$ NumberToHrMin(zuhrTime) : prayTime$(2) = h$ + ":" + m$ NumberToHrMin(AsrTime) : prayTime$(3) = h$ + ":" + m$ NumberToHrMin(MaghribTime) : prayTime$(4) = h$ + ":" + m$ if (item_index(51) = 15) or (item_index(51) = 16) NumberToHrMin(MaghribTime + 1.5) prayTime$(5) = h$ + ":" + m$ else NumberToHrMin(IshaTime) : prayTime$(5) = h$ + ":" + m$ end_if END_SUB rem ============================================================================ SUB New_Coord() dim_local t$,t1$,p t$ = item_read$(300,item_index(300)) p = instr(t$,":") ville$ = left$(t$,p-1) t$ = mid$(t$,p+1,20) p = instr(t$,"/") t1$ = mid$(t$,p+1,20) t$ = left$(t$,p-1) text 21,t$ : text 31,t1$ caption 110,"Pays : " + pays$ caption 120,"Ville : " + ville$ t$ = "Direction de la Qibla" + chr$(13) + "depuis " t1$ = ville$ + chr$(13) + pays$ + " : " caption 410,t$ + t1$ grid_clear 1,NbJours(month,year)+1 ,7 END_SUB rem ============================================================================ SUB List_Ville(p) clear 300 position 41,fuseau(p) item_select 46,H_Ete(p) + 1 read ville$ while ville$ <> "FIN" ville$ = ville$ + " : " read latitude : read longitude item_add 300,ville$ + str$(latitude) + " / " + str$(longitude) read ville$ end_while item_select 300,1 sort_on 300 : show 300 inactive 70 END_SUB rem ============================================================================ ' convertir Degree en Radian FNC degToRad(degree) result ((pi / 180) * degree) END_FNC rem ============================================================================ ' convertir Radian en Degree FNC radToDeg(radian) result (radian * (180/pi)) END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 360 FNC moreLess360(value) while (value > 360) or (value < 0) if value > 360 value = value - 360 else if value < 0 value = value + 360 end_if end_if end_while result value END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 24 FNC moreLess24(value) while (value > 24) or (value < 0) if value > 24 value = value - 24 else if value < 0 value = value + 24 end_if end_if end_while result value END_FNC rem ============================================================================ ' convertir le nombre number en heurs et Minutes SUB NumberToHrMin(number) if number = -1 then h$ = "--" : m$ = "--" : exit_sub hours = int(moreLess24(number)) minutes = int(moreLess24(number - hours) * 60) h$ = str$(hours) : m$ = str$(minutes) if len(h$) < 2 then h$ = "0" + h$ if len(m$) < 2 then m$ = "0" + m$ END_SUB rem ============================================================================ FNC Month_Name$(mois) dim_local m$ select mois case 01 : m$ = "Janvier" case 02 : m$ = "Février" case 03 : m$ = "Mars" case 04 : m$ = "Avril" case 05 : m$ = "Mai" case 06 : m$ = "Juin" case 07 : m$ = "Juillet" case 08 : m$ = "Août" case 09 : m$ = "Septembre" case 10 : m$ = "Octobre" case 11 : m$ = "Novembre" case 12 : m$ = "Décembre" end_select result m$ END_FNC rem ============================================================================ ' Fonction qui retourne 1 si l'argument (annee) représente une année bisextile ' 0 sinon FNC Bisextile(annee) if (mod(annee,4) = 0) and ((mod(annee,100) <> 0) or (mod(annee,400) = 0)) result 1 else result 0 end_if END_FNC rem ============================================================================ ' Déterminer le nombre de jours dans un mois (mois) pour une année (annee) FNC NbJours(mois,annee) dim_local n select mois case 01 : n = 31 case 02 : n = 28 : if bisextile(annee) > 0 then n = n + 1 case 03 : n = 31 case 04 : n = 30 case 05 : n = 31 case 06 : n = 30 case 07 : n = 31 case 08 : n = 31 case 09 : n = 30 case 10 : n = 31 case 11 : n = 30 case 12 : n = 31 end_select result n END_FNC rem ============================================================================ SUB Mois_Precedant() dim_local n,nb month = month-1 if month < 1 then month = 12 : year = year - 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Mois_Suivant() dim_local n,nb month = month+1 if month > 12 then month = 1 : year = year + 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Affiche(n) dim_local i grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" for i = 1 to n : grid_write 1,i+1,1,str$(i) : next i for i = 0 to 5 : grid_write 1,n+1,i+2,prayTime$(i) : next i inactive 70 END_SUB rem ============================================================================ ' Méthodes du calcul selon différentes Ecoles data "Algerian Minister of Religious Affairs and Wakfs : Fajr: 18.0° - Isha'a: 17.0°" data "Egyptian General Authority : Fajr: 19.5° - Isha'a: 17.5°" data "Egyptian General Authority (Bis) : Fajr: 20.0° - Isha'a: 18.0°" data "France UOIF - Angle 12° : Fajr: 12.0° - Isha'a: 12.0°" data "France - Angle 15° : Fajr: 15.0° - Isha'a: 15.0°" data "France - Angle 18° : Fajr: 18.0° - Isha'a: 18.0°" data "Islamic University, Karachi : Fajr: 18.0° - Isha'a: 18.0°" data "JAKIM (Jabatan Kemajuan Islam Malaysia) : Fajr: 20.0° - Isha'a: 18.0°" data "MUIS (Majlis Ugama Islam Singapura : Fajr: 20.0° - Isha'a: 18.0°" data "Muslim World League (MWL) : Fajr: 18.0° - Isha'a: 17.0°" data "North America (ISNA) : Fajr: 15.0° - Isha'a: 15.0°" data "Shia Ithna Ashari (Jafari) : Fajr: 16.0° - Isha'a: 14.0°" data "SIHAT/KEMENAG (Kementerian Agama RI) : Fajr: 20.0° - Isha'a: 18.0°" data "Tunisian Ministry of Religious Affairs : Fajr: 18.0° - Isha'a: 18.0°" data "General Authority of Islamic Affairs And Endowments : Fajr: 19.5° - Isha'a: 90 min" data "Umm Al-Qura, Makkah : Fajr: 18.5° - Isha'a: 90 min" data "University of Tehran : Fajr: 17.7° - Isha'a: 15.0°" rem ============================================================================ ' C'est la procédure qui fait tous les calculs SUB CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) latitude = val(text$(21)) : longitude = val(text$(31)) : TimeZone = val(text$(41)) : radians dst = val(text$(46)) select item_index(51) case 01 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Algerian Minister of Religious Affairs and Wakfs case 02 : FajrTwilight = -19.5 : ishaTwilight = -17.5 : ' Egyptian General Authority case 03 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' Egyptian General Authority (Bis) case 04 : FajrTwilight = -12.0 : ishaTwilight = -12.0 : ' France UOIF - Angle 12° case 05 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' France - Angle 15° case 06 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' France - Angle 18° case 07 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Islamic University, Karachi case 08 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' JAKIM (Jabatan Kemajuan Islam Malaysia) case 09 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' MUIS (Majlis Ugama Islam Singapura case 10 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Muslim World League (MWL) case 11 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' North America (ISNA) case 12 : FajrTwilight = -16.0 : ishaTwilight = -14.0 : ' Shia Ithna Ashari (Jafari) case 13 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' SIHAT/KEMENAG (Kementerian Agama RI) case 14 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Tunisian Ministry of Religious Affairs case 15 : FajrTwilight = -19.5 : ' Isha'a: 90 min : ' UAE General Authority of Islamic Affairs And Endowments case 16 : FajrTwilight = -18.5 : ' Isha'a: 90 min : ' Umm Al-Qura, Makkah case 17 : FajrTwilight = -17.7 : ishaTwilight = -15.0 : ' University of Tehran end_select D = (367 * year) - ((year + int((month + 9) / 12)) * 7 / 4) + ((int(275 * month / 9)) + day - 730531.5) L = 280.461 + 0.9856474 * D : L = moreLess360(L) M = 357.528 + (0.9856003) * D : M = moreLess360(M) Lambda = L + 1.915 * sin(degToRad(M)) + 0.02 * sin(degToRad(2 * M)) Lambda = moreLess360(Lambda) Obliquity = 23.439 - 0.0000004 * D Alfa = radToDeg(atn((cos(degToRad(Obliquity)) * tan(degToRad(Lambda))))) Alfa = moreLess360(Alfa) Alfa = Alfa - (360 * (int(Alfa / 360))) Alfa = Alfa + 90 * (int(Lambda / 90) - int(Alfa / 90)) ST = 100.46 + 0.985647352 * D Dec = radToDeg(asin(sin(degToRad(Obliquity)) * sin(degToRad(Lambda)))) a = (sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 : ' le soleil ne se couche pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Durinal_Arc = radToDeg(acos((sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) Noon = Alfa - ST Noon = moreLess360(Noon) UT_Noon = Noon - longitude ' ------------------------------------------------------------------------------ ' Calculating Prayer Times Arcs & Times ' ------------------------------------------------------------------------------ ' Zuhr Time (Local noon) zuhrTime = UT_Noon / 15 + timeZone + dst if standard = 1 : ' Asr Standard (Shafii, Maliki, Hanbali) Asr_Alt = radToDeg(atn(1 + tan(degToRad(abs(latitude - Dec))))) else : ' Asr Hanafi Asr_Alt = radToDeg(atn(2 + tan(degToRad(abs(latitude - Dec))))) end_if a = (sin(degToRad(90 - Asr_Alt)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Asr_Arc = radToDeg(acos((sin(degToRad(90 - Asr_Alt)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) Asr_Arc = Asr_Arc / 15 ' Asr Time asrTime = zuhrTime + Asr_Arc ' Shorouq Time sunRiseTime = zuhrTime - (Durinal_Arc / 15) ' Maghrib Time maghribTime = zuhrTime + (Durinal_Arc / 15) a = (sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 : ' le soleil ne se lève pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Esha_Arc = radToDeg(acos((sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) ' Isha Time ishaTime = zuhrTime + (Esha_Arc / 15) ' Fajr Time a = (sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Fajr_Arc = radToDeg(acos((sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))))) fajrTime = zuhrTime - (Fajr_Arc / 15) END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Aide sur le programme" + chr$(13) t$ = t$ + "Au lancement du programme, il affiche les résultats du calcul pour la ville de Moknine (Tunisie) pour le mois en cours" + chr$(13) t$ = t$ + "et propose comme méthode de calcul (dans le COMBO Méthode) celle appliquée en Tunisie (Tunisian Ministry of Religious)" + chr$(13) t$ = t$ + "Pour les autres pays, vous pouvez opter pour l'une des métodes proposées dans le COMBO, surtout si votre ville se situe aux" + chr$(13) t$ = t$ + "altitudes supérieures à 45°"+chr$(13) t$ = t$ + "Il propose un choix parmi 8 pays qui vous permettent d'en choisir une ville parmi celles qui sont proposées." + chr$(13) t$ = t$ + "Si votre ville ne s'y trouve pas, vous avez la possibilité d'entrer manuellement ses coordonnées (Latitude, Longitude, Fuseau, DST)" + chr$(13) t$ = t$ + "Vous pouvez aussi l'ajouter dans le code dans les lignes DATA." + chr$(13) t$ = t$ + "En optant pour l'un des pays proposé, vous activez un COMBO vous permettant de choisir une ville." + chr$(13) t$ = t$ + "Le COMBO DST c'est pour le choix de l'heure d'été (valeurs possibles : 0 pas de passage; 1 passage à l'heure d'été." + chr$(13) t$ = t$ + "Les boutons 'main' indiquant la gauche c'est pour le mois précédent, tandis que celle qui indique la droite c'est pour le mois suivant." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Après chaque modification et pour lancer un nouveau calcul,cliquez sur le bouton 'Calculer' (La Palice ne peut pas dire mieux !)" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "L’horaire de la prière de Ichaa correspond à la disparition du crépuscule (12° à 18°) après le coucher du Soleil." + chr$(13) t$ = t$ + "L'Arabie Saoudite, par exemple ajoute 90 mn à l'heure du Maghrib pour obtenir celle du Icha"+ chr$(13) t$ = t$ + " et ajoute 120 mn pour le mois de Ramadan."+ chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Pour information :" + chr$(13) t$ = t$ + "******************" + chr$(13) t$ = t$ + "La définition de l'heure du salat Asr divise les écoles islamiques en deux positions dogmatiques." + chr$(13) t$ = t$ + "Les trois écoles juridiques Malikite, Hambalite et Shafite soutiennent que le Asr commence lorsque la taille d'un objet vertical est la taille de son ombre." + chr$(13) t$ = t$ + "Cette méthode est celle adoptée généralement dans les communautés du Maghreb (d'obédience Malikite)." + chr$(13) t$ = t$ + "La quatrième école Hanafite estime que le Asr commence lorsque l'ombre d'un objet vertical est le double de la taille de cet objet."+chr$(13) t$ = t$ + "Cette nette différence dogmatique entraîne des écarts dans les horaires de salat sur les calendriers correspondant à un même endroit." + chr$(13) t$ = t$ + "Le programme vous permet de choisir votre doctrine réligieuse (Madh-hab) dans le COMBO 'Calcul Asr'. " + chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Le programme est fourni comme tel sans aucune garantie des résultats."+chr$(13) t$ = t$ + "En aucun cas je ne serais responsable de dommages résultants de l'utilisation de cette application." message t$ END_SUB rem ============================================================================ SUB Culture() dim_local t$ t$ = "Méthode de calcul des horaires de prières" + chr$(13) t$ = t$ + "Les prières (pour les Musulmans) sont au nombre de cinq par journée." + chr$(13) t$ = t$ + "Les horaires de ces cinq prières varient d'un endroit (ville) à l'autre et d'un jour à l'autre." + chr$(13) t$ = t$ + "Le calcul fait intervenir les heures du crépuscule, mais lequel ?" + chr$(13) t$ = t$ + "Il existe trois types de crépuscules : " + chr$(13) t$ = t$ + "Le crépuscule astronomique : il intervient lorsque le soleil se situe " t$ = t$ + "en dessous de l’horizon à une hauteur de 18°, et il correspond au moment" + chr$(13) t$ = t$ + "où l’obscurité totale s’installe au niveau de cet horizon." + chr$(13) t$ = t$ + "Le crépuscule nautique : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 12°." + chr$(13) t$ = t$ + "Le crépuscule civil : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 06°." + chr$(13) t$ = t$ + "Or, il s’est avéré que le fait de se baser sur le crépuscule astronomique (18°) pour le calcul des heures de prière " t$ = t$ + "pose des difficultés pour les pays d’Europe." + chr$(13) t$ = t$ + "Il est impossible de calculer les horaires de la prière du Fajr à partir du 18° et ce à partir de la mi-mai jusqu’à la mi-juin environ."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "L’écart entre le Fajr et celui du lever du soleil (Chourouk) se creuse pour atteindre un record de 3h40 min en période d’été." + chr$(13) t$ = t$ + "L’écart entre la prière de Ichaa et celle du Fajr se réduit durant des semaines en période d’été." + chr$(13) t$ = t$ + "A titre d’exemple : le 28 mai à Paris en se basant sur le 18°, la prière de Ichaa est à 00h18 et la prière du Fajr est à 02h59 !" + chr$(13) t$ = t$ + "Soit un écart de 2h41mn."+chr$(13) t$ = t$ + "Par contre, retenir le critère du 12° (le crépuscule nautique) permet de surmonter ces difficultés." + chr$(13) t$ = t$ + "D’une part, l’écart entre la prière du Fajr et celle du lever du soleil (Chourouk) n’excède jamais 02 heures durant toute l’année."+chr$(13) t$ = t$ + "D’autre part, l’écart entre la prière du Ichaa et celle du Fajr reste constamment importante."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Le fait d'opter pour ce critère du 12° permet d’alléger la contrainte sur les musulmans vivant en Europe pour cette pratique cultuelle " + chr$(13) t$ = t$ + "et surtout durant le mois de Ramadan et spécialement en période d’été." + chr$(13) t$ = t$ + "L’avantage de ce choix réside dans la possibilité de l’utiliser durant toute l’année, à l’inverse de celui du 18°." + chr$(13) t$ = t$ + "Certains pays ajoutent 5 minutes en plus par précaution pour les horaires de Dhohr et du Maghrib" + chr$(13) t$ = t$ + "L’horaire du Asr est calculé selon la règle islamique où l’ombre de chaque objet devient égale à celui-ci." + chr$(13) t$ = t$ + "Mais certains pays utilisent d'autres critères, ce qui ne facilite pas la tâche !" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "En résumé : " + chr$(13) t$ = t$ + "* Prière de l'aube (matin) (Fajr) : Le début coïncide avec la fin du délai de d'Isha, soit lorsque le soleil remonte à 19 ° sous l'horizon." + chr$(13) t$ = t$ + " La fin est atteinte au lever du soleil avec le limbe supérieur du soleil tangent à l'horizon soit h = - 0,267°"+ chr$(13) t$ = t$ + "* Prière de la mi-journée (midi) (Dhur) : la durée permise commence quand le soleil a traversé le méridien (soit quand l'ombre d'un objet a commencé à " t$ = t$ + " augmenter) et se termine lorsque l'ombre d'un gnomon s'est allongée d'un quart de sa hauteur par rapport à son ombre à midi." + chr$(13) t$ = t$ + "* Prière de l'après-midi ('Asr) : l'intervalle commence lorsque l'augmentation de l'ombre est égale à la longueur du gnomon et se termine quand l'ombre en a atteint le double." + chr$(13) t$ = t$ + "* Prière du coucher de soleil (Maghrib) : Le début coïncide avec la disparition totale du soleil sous l'horizon , soit pour h = -0.267°."+chr$(13) t$ = t$ + " La fin du délai est atteinte à la dernière lueur du crépuscule, soit le soleil à 18° sous l'horizon."+chr$(13) t$ = t$ + " Attention, cette condition peut être irréalisable à certaines dates pour certaines latitudes." + chr$(13) t$ = t$ + "* Prière de la nuit ('Isha) : Le début coïncide avec la fin du délai de Maghrib, soit le soleil à 17° sous l'horizon." + chr$(13) t$ = t$ + " La fin du délai est atteinte avec l'apparition de l'aube lorsque le soleil remonte à 19° sous l'horizon." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "Les opinions divergent sur les angles à utiliser pour le calcul de Fajr et Isha." +chr$(13) t$ = t$ + "La mosquée de Paris retient 15° pour Fajr et 18° pour Isha." + chr$(13) + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Pour des plus amples informations sur le calcul des horaires de prière, référez-vous à : " + chr$(13) t$ = t$ + "http://www.averroes-aveyron.fr/medias/files/methodes-de-calcul.pdf" + chr$(13) message t$ END_SUB rem ============================================================================ ' Liste des pays : nom du pays, fuseau horaire du pays et flag pour heure d'été (1 oui, 0 non) data "Algérie" ,1,0 , "Belgique",1,1 ,"Egypte",2,0 , "France",1,1, "Lybie",2,0 data "Maroc",0 , 0, "Arabie Saoudite",3,0 ,"Tunisie",1,0 ' ------------------------------------------------------------------------------ data "Algérie" : ' UTC + 1 ; DST 0 ' ----------- 1: ' Ville Latitude Longitude data "Adrar" , 27.850, -0.317 data "Alger" , 36.833, 3.000 data "Annaba" , 36.917, 7.783 data "Batna" , 35.567, 6.167 data "Bechar" , 31.583, -2.283 data "Bejaia" , 36.817, 5.050 data "Biskra" , 34.833, 5.683 data "Blida" , 36.500, 2.833 data "Boussaada" , 35.167, 4.150 data "Constantine" , 36.367, 6.667 data "El Asnam" , 36.183, 1.350 data "El Djelfa" , 34.717, 3.233 data "Ghardaia" , 32.333, 3.667 data "Laghouat" , 33.817, 2.917 data "Mostaganem" , 35.900, 0.083 data "M'Sila" , 35.667, 4.517 data "Oran" , 35.750, -0.633 data "Ouargla" , 32.000, 5.267 data "Setif" , 36.183, 5.400 data "Sidi-bel-Abbes" , 35.250, -0.650 data "Skikda" , 36.883, 6.900 data "Tamanrasset" , 22.833, 5.467 data "Tebessa" , 35.350, 8.100 data "Tiaret" , 35.333, 1.333 data "Tilimsen" , 34.883, -1.350 data "Tizi-Ouzou" , 36.733, 4.083 data "FIN" ' ------------------------------------------------------------------------------ data "Belgique" : ' UTC + 1 UTC + 2 Heure d'été ' ----------- 2: ' Ville Latitude Longitude data "Antwerp" , 51.217, 4.417 data "Brussels" , 50.850, 4.350 data "Charleroi" , 50.417, 4.450 data "Gent" , 51.033, 3.700 data "Liege" , 50.633, 5.583 data "Ostende" , 51.217, 2.917 data "Mons" , 50.467, 3.967 data "Namur" , 50.467, 4.867 data "FIN" ' ------------------------------------------------------------------------------ data "Egypte" : ' UTC + 2 ' ------------------------------------- 3: ' Ville Latitude Longitude data "Abou Simbel" , 22.317, 31.633 data "Alexandria" , 31.217, 29.917 data "Aswan" , 24.083, 32.933 data "Asyut" , 27.233, 31.117 data "Beni-Souef" , 29.083, 31.083 data "Cairo" , 30.050, 31.250 data "Damanhur" , 31.050, 30.467 data "Dumyat" , 31.433, 31.800 data "El Alamein" , 30.833, 28.950 data "Helwan" , 29.850, 31.333 data "Isma'ilia" , 30.600, 32.250 data "Karnak" , 25.683, 32.667 data "Port Said" , 31.283, 32.300 data "Sohag" , 26.550, 31.700 data "Suez" , 29.983, 32.550 data "Tanta" , 30.800, 31.000 data "Zagazig" , 30.583, 31.500 data "FIN" ' ------------------------------------------------------------------------------- data "France" : ' UTC + 1 UTC + 2 Heure d'été ' ---------- 4: ' Ville Latitude Longitude data "Brest" , 48.383, -4.500 data "Quimper" , 48.000, -4.100 data "Lorient" , 47.750, -3.350 data "St-Brieuc" , 48.517, -2.750 data "Vannes" , 47.667, -2.733 data "St Nazaire" , 47.283, -2.200 data "Rennes" , 48.100, -1.667 data "Cherbourg" , 49.633, -1.617 data "Nantes" , 47.233, -1.583 data "La-Roche-sur-Yon" , 46.633, -1.500 data "Bayonne" , 43.500, -1.467 data "La Rochelle" , 46.167, -1.167 data "St-Lo" , 49.117, -1.083 data "Laval" , 48.067, -0.750 data "Bordeaux" , 44.833, -0.567 data "Angers" , 47.483, -0.533 data "Mont-de-Marsan" , 43.900, -0.500 data "Niort" , 46.317, -0.450 data "Pau" , 43.300, -0.367 data "Caen" , 49.183, -0.367 data "Alençon" , 48.417, 0.083 data "Tarbes" , 43.233, 0.083 data "Le Havre" , 49.500, 0.100 data "Angouleme" , 45.667, 0.167 data "Le Mans" , 48.000, 0.200 data "Poitiers" , 46.583, 0.333 data "Cahors" , 44.467, 0.433 data "Auch" , 43.500, 0.600 data "Agen" , 44.200, 0.633 data "Tours" , 47.383, 0.700 data "Perigueux" , 45.200, 0.733 data "Dieppe" , 49.917, 1.083 data "Rouen" , 49.433, 1.083 data "Evreux" , 49.050, 1.183 data "Limoges" , 45.833, 1.250 data "Montauban" , 44.017, 1.333 data "Blois" , 47.600, 1.333 data "Toulouse" , 43.617, 1.450 data "Chartres" , 48.450, 1.500 data "Foix" , 42.950, 1.583 data "Chateauroux" , 46.817, 1.683 data "Tulle" , 45.267, 1.767 data "Abbeville" , 50.100, 1.850 data "Gueret" , 46.167, 1.866 data "Orleans" , 47.900, 1.900 data "Vierzon" , 47.233, 2.050 data "Pontoise" , 49.050, 2.083 data "Beauvais" , 49.433, 2.083 data "Versailles" , 48.800, 2.133 data "Albi" , 43.933, 2.144 data "Nanterre" , 48.883, 2.217 data "Amiens" , 49.900, 2.300 data "Paris" , 48.833, 2.333 data "Bourges" , 47.083, 2.383 data "Carcassonne" , 43.217, 2.350 data "Dunkerque" , 51.033, 2.383 data "Aurillac" , 44.933, 2.433 data "Bobigny" , 48.917, 2.450 data "Créteil" , 48.783, 2.467 data "Melun" , 48.533, 2.557 data "Evry" , 48.633, 2.567 data "Rodez" , 44.350, 2.567 data "Montlucon" , 46.333, 2.600 data "Arras" , 50.283, 2.767 data "Lens" , 50.433, 2.833 data "Perpignan" , 42.700, 2.900 data "Lille" , 50.650, 3.083 data "Clermont-Ferrand",45.783, 3.083 data "Nevers" , 47.000, 3.150 data "Moulins" , 46.567, 3.333 data "Mende" , 44.533, 3.500 data "Auxerre" , 47.800, 3.583 data "Laon" , 49.567, 3.617 data "Montpellier" , 43.600, 3.883 data "Le Puy" , 45.050, 3.883 data "Avallon" , 47.500, 3.900 data "Reims" , 49.250, 4.033 data "Troyes" , 48.300, 4.083 data "Roanne" , 46.033, 4.083 data "Nimes" , 43.500, 4.350 data "Chalons-S-Marne", 48.967, 4.367 data "St-Etienne" , 45.433, 4.383 data "Privas" , 44.733, 4.600 data "Mezières" , 49.767, 4.733 data "Avignon" , 43.933, 4.800 data "Lyon" , 45.767, 4.833 data "Macon" , 45.300, 4.833 data "Valence" , 44.933, 4.900 data "Dijon" , 47.333, 5.033 data "Chaumont" , 48.117, 5.133 data "Bar-le-Duc" , 48.767, 5.167 data "Bourg" , 46.200, 5.217 data "Observatoire SIRENE" , 44.000, 5.333 data "Marseille " , 43.300, 5.367 data "Lons-le-Saunier", 46.683, 5.550 data "Grenoble" , 45.183, 5.717 data "Toulon" , 43.117, 5.917 data "Chambéry" , 45.567, 5.917 data "Besancon" , 47.250, 5.983 data "Gap" , 44.550, 6.083 data "Annecy" , 45.900, 6.117 data "Metz" , 49.117, 6.183 data "Vesoul" , 47.633, 6.150 data "Nancy" , 48.700, 6.200 data "Digne" , 44.083, 6.233 data "Epinal" , 48.167, 6.467 data "Belfort" , 47.633, 6.867 data "Cannes" , 43.550, 7.000 data "Nice" , 43.700, 7.267 data "Colmar" , 48.083, 7.350 data "Mulhouse" , 47.750, 7.350 data "Strasbourg" , 48.583, 7.750 data "Ajaccio" , 41.917, 8.717 data "Bastia" , 42.683, 9.433 data "FIN" ' ------------------------------------------------------------------------------ data "Libye" :' UTC + 2 ' --------- 5: ' Ville Latitude Longitude data "Sabratah" , 32.833, 12.400 data "Tripoli" , 32.967, 13.200 data "Al Khums" , 32.650, 14.250 data "Sabhah" , 27.050, 14.433 data "Benghazi" , 32.117, 20.083 data "Ajdabiyah" , 30.800, 20.250 data "Al Marj" , 32.500, 20.833 data "Darnah" , 32.767, 22.650 data "Tubruq" , 32.100, 23.933 data "FIN" ' ------------------------------------------------------------------------------
data "Moroc" : ' UTC + 0 ' --------- 6: ' Ville Latitude Longitude data "Agadir" , 30.500, -9.667 data "Safi" , 32.300, -9.333 data "El Jadida" , 33.183, -8.283 data "Marrakech" , 31.817, -8.000 data "Settat" , 33.067, -7.617 data "Casablanca" , 33.650, -7.583 data "Mohammedia" , 33.717, -7.333 data "Khouribga" , 32.900, -6.950 data "Sale" , 34.067, -6.833 data "Kenitra" , 34.333, -6.567 data "Beni Mellal" , 32.367, -6.483 data "Khemisset" , 33.833, -6.050 data "Ksar el Kebir" , 35.067, -5.933 data "Tanger" , 35.800, -5.833 data "Meknes" , 33.883, -5.617 data "Tetouan" , 35.567, -5.367 data "Ceuta" , 35.883, -5.317 data "Fes" , 34.083, -5.000 data "Taza" , 34.267, -4.017 data "Nador" , 35.167, -3.000 data "Oujda" , 34.683, -1.750 data "FIN" ' ------------------------------------------------------------------------------ rem ============================================================================ data "Arabie Saoudite" : ' UTC + 3 ' ---------------- 7: ' Ville Latitude Longitude data "Riyadh" , 24.650, 46.767 data "Al Wajh" , 26.267, 36.467 data "Tabuk" , 28.367, 36.533 data "Yanbu'Al Bahr" , 24.117, 38.067 data "Tayma" , 27.617, 38.500 data "Jiddah" , 21.500, 39.167 data "Khaybar" , 25.800, 39.200 data "Medina" , 24.500, 39.583 data "Mecca" , 21.433, 39.817 data "Al Jawf" , 29.783, 39.867 data "Al Lith" , 20.167, 40.267 data "At Ta'if" , 21.250, 40.350 data "Badanah" , 31.000, 41.083 data "Al Qunfidhah" , 19.150, 41.117 data "Turabah" , 21.250, 41.567 data "Ha'il" , 27.517, 41.750 data "bha" , 18.233, 42.517 data "Jizan" , 16.933, 42.550 data "Buraydah" , 26.333, 43.983 data "Najran" , 17.517, 44.317 data "Shaqra" , 25.300, 45.250 data "Al Artawiyak" , 26.517, 45.350 data "Ad Dilam" , 23.983, 47.100 data "Haradh" , 24.200, 49.117 data "Al Hufuf" , 25.333, 49.567 data "Ad Dammam" , 26.417, 50.100 data "Al Khurmah" , 21.917, 42.033 data "FIN" ' ------------------------------------------------------------------------------ Data "Tunisie" : ' UTC + 1 ' ----------- 8: ' Ville Latitude Longitude data "Gafsa" , 34.467, 8.717 data "Beja" , 36.717, 9.217 data "Bizerte" , 37.300, 9.867 data "Kairouan" , 35.700, 10.017 data "Gabes" , 33.867, 10.100 data "Tunis" , 36.833, 10.217 data "Sousse" , 35.833, 10.633 data "Sfax" , 34.750, 10.717 data "Nabeul" , 36.500, 10.733 data "Moknine" , 35.633, 10.833 data "Monastir", 35.777, 10.826 data "Mahdia" , 35.502, 11.045 data "Jendouba" , 35.501, 08.783 data "Le Kef" , 36.179, 08.714 data "Siliana" , 35.990, 09.278 data "Ariana" , 36.862, 10.195 data "Ben Arous" , 36.743, 10.232 data "Kasserine" , 35.171, 08.828 data "Kebili" , 33.124, 08.836 data "La Manouba" , 36.807, 10.101 data "Medenine" , 33.348, 10.494 data "Sidi Bouzid" , 35.033, 09.5 data "Tataouine" , 32.921, 10.450 data "Zaghouan" , 36.399, 10.147 data "La Soukra" , 36.883, 10.25 data "La Marsa" , 36.876, 10.325
data "FIN" rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&& FIN DU CODE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
Dernière édition par papydall le Jeu 2 Mai 2019 - 20:57, édité 1 fois | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Calculateur des heures de prière. Jeu 2 Mai 2019 - 6:52 | |
| Bonjour papydall ! Je viens de télécharger la nouvelle version. C'est une bonne idée ! Par contre il y a un problème sur les horaires des prières... En choisissant Poitiers (France), puis UOIF 12°, plus rien ne correspond. Je ne sais pas si ça touche les autres méthodes de calculs. Bon courage pour cette correction...
Dernière édition par Minibug le Jeu 2 Mai 2019 - 6:56, édité 1 fois | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Calculateur des heures de prière. Jeu 2 Mai 2019 - 6:55 | |
| erreur de post ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Jeu 2 Mai 2019 - 20:50 | |
| Salut tout le monde Merci Minibug pour le test et surtout pour la découverte d’ un mini-maxibug dû à mon étourderie. En effet dans le calcul de la Kibla, j’utilise des degrés pour le calcul des fonctions trigonométriques tandis que dans CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) les calculs se font en radian. Comme cette unité est prise par défaut par Panoramic, je n’ai pas pensé à la déclarer, or elle a été modifiée en degré dans le calcul de la Kibla. Bref, il suffit d’ajouter la commande radians dans la sub mentionnée ci-haut. - Code:
-
rem ============================================================================ ' C'est la procédure qui fait tous les calculs SUB CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) latitude = val(text$(21)) : longitude = val(text$(31)) : TimeZone = val(text$(41)) dst = val(text$(46)) : radians select item_index(51) .... ...
Une fois de plus, merci à tous ceux qui ont testé. REMARQUEJe n’arrive plus à poster mon code : La longueur de votre message dépasse la limite autorisée. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Jeu 2 Mai 2019 - 20:56 | |
| Je viens de remarquer que Panoramic dispose déjà des fonctions RADIAN_TO_DEGREE(A) et DEGREE_TO_RADIAN(A) Dans mon programme j’ai défini radToDeg() et degToRad() qui font la même chose. Voici le nouveau code modifié. - Code:
-
rem ============================================================================ rem CalcPrayerTimes.bas rem Calculateur des heures de prière par Papydall rem Version 3.0 rem Dernière modification : 02 Mai 2019 rem ============================================================================ Init() Gui() Afficher_Kibla() Grille(NbJours(month,year)) Run() end rem ============================================================================ SUB Init() label clic, change label 1, 2, 3, 4, 5, 6, 7, 8 : ' pour restore_label dim year, month, day dim longitude, latitude, timeZone,fajrTwilight, ishaTwilight dim fajrTime, sunRiseTime, zuhrTime, asrTime, maghribTime, ishaTime dim d, l, m, lambda, obliquity, alfa, st, dec, durinal_Arc, noon, Ut_Noon dim Asr_Alt, Asr_Arc, Esha_Arc, Fajr_Arc dim prayTime$(5), standard,nc,Fuseau(8), H_Ete(8) dim hours, minutes ,h$, m$, a, n, dst, methode, p$, ville$, pays$ dim NbPays : NbPays = 8 : ' 8 c'est le nombre des pays proposés dans le programme standard = 1 : ' Pour le calcul du Asr : 1 ---> (Shafii, Maliki, Hanbali) ' 0 ---> Hanafi day = date_day : month = date_month : year = date_year : ' La date courante END_SUB rem ============================================================================ SUB GUI() dim_local i,t$ t$ = " Calculateur des heures de prière par Papydall " color 0,240,255,255 width 0,1100 : height 0,800 : top 0,(screen_y - height(0)) / 2 left 0,(screen_x - width(0))/2 shape 5 : top 5,5 : left 5,450 : width 5,600 : height 5,50 shape_rectangle_rounded 5 : color 5,25,100,50 shape 6 : top 6,5 : left 6,20 : width 6,420 : height 6,50 shape_rectangle_rounded 6 : color 6,25,100,50 alpha 10 : top 10,20 : left 10,40 : font_color 10,250,100,50 font_bold 10 : font_name 10,"tahoma" : font_size 10,12 caption 10,t$ : caption 0,t$ : application_title t$ alpha 20 : top 20,80 : left 20,010 : caption 20,"Latitude : " edit 21 : top 21,80 : left 21,070 : width 21,60 : font_bold 21 : text 21,"35.633" hint 21,"En degrés décimaux (± 90°) positive au Nord" : on_change 21,change alpha 30 : top 30,80 : left 30,140 : caption 30,"Longitude : " edit 31 : top 31,80 : left 31,210 : width 31,60 : font_bold 31 : text 31,"10.833" hint 31,"En degrés décimaux (± 180°) positive à l'est" : on_change 31,change alpha 40 : top 40,80 : left 40,285 : caption 40,"Fuseau :" spin 41 : top 41,80 : left 41,335 : width 41,60 : min 41,-12 : max 41,12 : font_bold 41 hint 41,"ZoneTime, décalage heure : Valeurs possibles ± 12" : position 41,1 on_change 41,change alpha 45 : top 45,80 : left 45,420 : caption 45,"DST :" : font_bold 45 : font_name 45,"tahoma" combo 46 : top 46,80 : left 46,450 : width 46,50 : hint 46,"Heure d'été" on_change 46,change alpha 50 : top 50,80 : left 50,520 : caption 50,"Méthode :" combo 51 : top 51,80 : left 51,580 : width 51,480 : font_bold 51 : height 51,40 font_name 51,"tahoma" : on_change 51,change hint 51,"convention de calcul utilisé" alpha 55 : top 55,130 : left 55,10 : font_bold 55 : font_name 55,"tahoma" caption 55,"Calcul Asr :" combo 56 : top 56,130 : left 56,80 : font_bold 56 : font_name 56,"tahoma" width 56,220 : hint 56,"Doctrines religieuses" : on_change 56,change item_add 56,"Standard (Shafii, Maliki, Hanbali)" item_add 56,"Hanafi" : item_select 56,1 button 60 : top 60,20 : left 60,950 : caption 60,"Quitter" on_click 60,clic button 70 : top 70,20 : left 70,470 : caption 70,"Calculer" on_click 70,clic : inactive 70 button 80 : top 80,120 : left 80,500 : font_bold 80 : font_name 80,"wingdings 2" font_size 80,30 : caption 80,"D" : hint 80,"Mois précédent" : on_click 80,clic button 90 : top 90,120 : left 90,760 : font_bold 90 : font_name 90,"wingdings 2" font_size 90,30 : caption 90,"E" : hint 90,"Mois suivant" : on_click 90,clic alpha 100: top 100,130 : left 100,630 : font_bold 100 : font_name 100,"arial" font_size 100,12 : caption 100,Month_Name$(month) + " " + str$(year) item_add 46,0 : item_add 46,1 : item_select 46,1 for i = 1 to 17 : read t$ : item_add 51,t$ : next i item_select 51,14 for i = 20 to 70 step 10 : font_bold i : font_name i,"tahoma" : next i alpha 110 : top 110,180 : left 110,10 : font_bold 110 : font_size 110,12 font_name 110,"tahoma" : font_color 110, 255,0,0 : caption 110,"Pays : Tunisie" alpha 120 : top 120,180 : left 120,220 : font_bold 120 : font_size 120,12 font_name 120,"tahoma" : font_color 120, 255,0,0 : caption 120,"Ville : Moknine" alpha 130 : top 130,230 : left 130,10 : font_bold 130 : font_name 130,"tahoma" font_size 130,12 : font_color 130,0,0,255 : caption 130,"Choix Pays / Villes" alpha 140 : top 140,260 : left 140,60 : font_bold 140 : font_name 140,"Wingdings" font_size 140,30 : caption 140,"ê" button 150 : top 150,20 : left 150,600 : font_bold 150 : caption 150,"Aide" : on_click 150,clic button 160 : top 160,20 : left 160,740 : font_bold 160 : width 160,150 caption 160,"Pour votre culture" : on_click 160,clic container_option 200 : top 200,300 : left 200,10 : width 200,130 : height 200,35*NbPays +10 color 200,255,255,0 for i = 1 to NbPays option 200+i : parent 200+i,200 : top 200+i,30*i : left 200+i,10 font_bold 200+i : font_name 200+i,"tahoma" : on_click 200+i,clic read p$ : caption 200+i,p$ read fuseau(i) : read H_Ete(i) next i combo 300 : top 300,300 : left 300,160 font_bold 300 : width 300,300 : hide 300 : on_change 300,change picture 400 : top 400,450 : left 400,170 : width 400,300 : height 400,300 2d_target_is 400 : print_target_is 400 alpha 410 : top 410,600 : left 410,10 : font_bold 410 : font_name 410,"tahoma" font_size 410,10 : font_color 410,255,0,0 t$ = "Direction de la Kibla" + chr$(13) + "depuis Moknine" + chr$(13) + "Tunisie : " caption 410,t$ hint 410,"Angle en ° à partir du Nord" +chr$(13)+"indiquant la direction de la Kibla" alpha 420 : top 420,630 : left 420,130 : font_bold 420 : font_name 420,"tahoma' font_size 420,12 : font_color 420,0,0,0 alpha 430 : top 430, 680 : left 430,1 : font_bold 430 : font_name 430,"tahoma" font_size 430,10 : font_color 430,0,0,255 hint 430,"Distance de la Mecque" END_SUB rem ============================================================================ ' Formule donnant la distance orthdromique entre deux points du globle exprimés ' par leurs coordonnées (latitude et longitude) ' La formule est donnée en assimilant la Terre à une sphère de 40 000 km de circonférence. ' 1.852 : c'est la valeur en km de un mille marin ' 60 : ce nombre provient du fait que le mille marin (1 852 m) correspond à une ' minute d'arc sur un grand cercle de la surface terrestre, et donc 60 milles ' marins correspondent à un degré. FNC Distance_Orthodromique(lat1,lon1) dim_local lat2,lon2,km,d lat2 = 21.433 : lon2 = 39.817 : ' Coordonnées de la Mecque degrees km = 60*1.852 d = km*acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1)) d = int(d) result d END_FNC rem ============================================================================ ' Fonction de calcul de la Kibla ' Elle retourne l'angle partant de la direction du nord et compté dans le sens ' rétrograde (sens des aiguilles d'une montre) FNC Kibla(latitude,longitude) dim_local Lat_Meq : ' Latitude de la Mecque dim_local Lon_Meq : ' Longitude de la Mecque dim_local a,b,c,q,n,d Lat_Meq = 21.433 : Lon_Meq = 39.817 a = Lon_Meq - longitude : b = latitude :c = Lat_Meq degrees n = sin(a) :d = cos(b) * tan(c) - sin(b) * cos(a) if d = 0 then result 0 : exit_fnc q = atn(n/d) if sgn(n) <> sgn(q) then q = q + 180 if (sgn(n) < 0) and (sgn(q) < 0) then q = q + 360 result int(q) END_FNC rem ============================================================================ SUB Afficher_Kibla() dim_local la,lo,xc,yc,r,x,y,a,a1,c$,d degrees la = val(text$(21)) : lo = val(text$(31)) xc = width(400)/2 : yc = height(400) / 2 : r = xc-20 color 400,20,100,20 : font_color 400,255,255,0 : font_bold 400 : font_size 400,10 2d_fill_color 200,100,020 : 2d_circle xc,yc,r 2d_pen_width 2 for a = 0 to 360 step 10 : 2d_line xc,yc,xc+r*cos(a),yc+r*sin(a) : next a 2d_fill_color 255,255,255 : 2d_circle xc,yc,r-10 2d_fill_color 0,0,0 : 2d_circle xc,yc,5 a = Kibla(la,lo) : r = r-15 : x = xc+r*cos(a-90) : y = yc+r*sin(a-90) 2d_pen_width 2 : 2d_line xc,yc,x,y r = r-15 for a1 = a-80 to a-100 step -1 : 2d_poly_to xc+r*cos(a1),yc+r*sin(a1) : next a1 2d_poly_to x,y : 2d_fill_color 20,100,20 print_locate xc-4,2 : print "N" print_locate 2*xc-15,yc-10 : print "E" print_locate xc-4,2*yc-20 : print "S" print_locate 5,yc-10 : print "W" d = Distance_Orthodromique(la,lo) caption 420, str$(a) + "°" caption 430, "Distance orthodromique :" + chr$(13) + str$(d) + " km" END_SUB rem ============================================================================ ' Tracer une grille en fonction du nombre des jours dans le mois en cours SUB Grille(n) grid 1 : top 1,180 : left 1,500 : width 1,342 : height 1,n*18-8 : grid_row 1,n+1 grid_row_fixed 1,1 : grid_row_height 1,16 grid_column 1,7 : grid_column_fixed 1,1 : grid_column_width 1,50 : font_bold 1 grid_fixed_color 1,255,255,0 : grid_one_column_width 1,1,30 color 1,0,255,255 grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" END_SUB rem ============================================================================ SUB Run() dim_local nb nb = NbJours(month,year) for n = 1 to Nb : Go(n) : Affiche(n) : next n END_SUB rem ============================================================================ Change: active 70 : caption 420,"": off_change 300 for nc = 21 to 41 step 10 : off_change nc : next nc for nc = 46 to 56 step 10 : off_change nc : next nc if item_index(56) = 1 then standard = 1 : else : standard = 0 select number_change case 21 : if text$(21) = "" then text 21,0 case 31 : if text$(31) = "" then text 31,0 case 41 : if text$(41) = "" then text 41,0 if abs(val(text$(41))) > 12 then text 41,0 case 46 : if (text$(46) <> "0") or (text$(46) <> "1") then text 46,0 case 51 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 56 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 300 : New_Coord() end_select for nc = 21 to 41 step 10 : on_change nc,change : next nc for nc = 46 to 56 step 10 : on_change nc,change : next nc on_change 300,change return rem ============================================================================ ' Gestion des clics de l'utilisateur Clic: for nc = 60 to 90 step 10 : off_click nc : next nc for nc = 150 to 160 step 10 : off_click nc : next nc for nc = 201 to 208 : off_click nc : next nc if number_click > 200 then caption 140,"ê î" select number_click case 060 : if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate case 070 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() : inactive 70 case 080 : Mois_Precedant() case 090 : Mois_Suivant() case 150 : Aide() case 160 : Culture() case 201 : restore_label 1 : pays$ = "Algérie" : List_Ville(number_click-200) case 202 : restore_label 2 : pays$ = "Belgique" : List_Ville(number_click-200) case 203 : restore_label 3 : pays$ = "Egypte" : List_Ville(number_click-200) case 204 : restore_label 4 : pays$ = "France" : List_Ville(number_click-200) case 205 : restore_label 5 : pays$ = "Lybie" : List_Ville(number_click-200) case 206 : restore_label 6 : pays$ = "Maroc" : List_Ville(number_click-200) case 207 : restore_label 7 : pays$ = "Arabie Saoudite": List_Ville(number_click-200) case 208 : restore_label 8 : pays$ = "Tunisie" : List_Ville(number_click-200) end_select for nc = 60 to 90 step 10 : on_click nc,clic : next nc for nc = 150 to 160 step 10 : on_click nc,clic : next nc for nc = 201 to 208 : on_click nc,clic : next nc return rem ============================================================================ SUB Go(day) calcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) NumberToHrMin(fajrTime) : prayTime$(0) = h$ + ":" + m$ NumberToHrMin(SunRiseTime) : prayTime$(1) = h$ + ":" + m$ NumberToHrMin(zuhrTime) : prayTime$(2) = h$ + ":" + m$ NumberToHrMin(AsrTime) : prayTime$(3) = h$ + ":" + m$ NumberToHrMin(MaghribTime) : prayTime$(4) = h$ + ":" + m$ if (item_index(51) = 15) or (item_index(51) = 16) NumberToHrMin(MaghribTime + 1.5) prayTime$(5) = h$ + ":" + m$ else NumberToHrMin(IshaTime) : prayTime$(5) = h$ + ":" + m$ end_if END_SUB rem ============================================================================ SUB New_Coord() dim_local t$,t1$,p t$ = item_read$(300,item_index(300)) p = instr(t$,":") : ville$ = left$(t$,p-1) : t$ = mid$(t$,p+1,20) p = instr(t$,"/") : t1$ = mid$(t$,p+1,20) : t$ = left$(t$,p-1) text 21,t$ : text 31,t1$ caption 110,"Pays : " + pays$ : caption 120,"Ville : " + ville$ t$ = "Direction de la Qibla" + chr$(13) + "depuis " t1$ = ville$ + chr$(13) + pays$ + " : " caption 410,t$ + t1$ grid_clear 1,NbJours(month,year)+1 ,7 END_SUB rem ============================================================================ SUB List_Ville(p) clear 300 position 41,fuseau(p) item_select 46,H_Ete(p) + 1 read ville$ while ville$ <> "FIN" ville$ = ville$ + " : " read latitude : read longitude item_add 300,ville$ + str$(latitude) + " / " + str$(longitude) read ville$ end_while item_select 300,1 : sort_on 300 : show 300 : inactive 70 END_SUB rem ============================================================================ ' Ramener la valeur de value entre 0 et 360 FNC moreLess360(value) while (value > 360) or (value < 0) if value > 360 value = value - 360 else if value < 0 value = value + 360 end_if end_if end_while result value END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 24 FNC moreLess24(value) while (value > 24) or (value < 0) if value > 24 value = value - 24 else if value < 0 value = value + 24 end_if end_if end_while result value END_FNC rem ============================================================================ ' convertir le nombre number en heurs et Minutes SUB NumberToHrMin(number) if number = -1 then h$ = "--" : m$ = "--" : exit_sub hours = int(moreLess24(number)) minutes = int(moreLess24(number - hours) * 60) h$ = str$(hours) : m$ = str$(minutes) if len(h$) < 2 then h$ = "0" + h$ if len(m$) < 2 then m$ = "0" + m$ END_SUB rem ============================================================================ FNC Month_Name$(mois) dim_local m$ select mois case 01 : m$ = "Janvier" case 02 : m$ = "Février" case 03 : m$ = "Mars" case 04 : m$ = "Avril" case 05 : m$ = "Mai" case 06 : m$ = "Juin" case 07 : m$ = "Juillet" case 08 : m$ = "Août" case 09 : m$ = "Septembre" case 10 : m$ = "Octobre" case 11 : m$ = "Novembre" case 12 : m$ = "Décembre" end_select result m$ END_FNC rem ============================================================================ ' Fonction qui retourne 1 si l'argument (annee) représente une année bisextile ' 0 sinon FNC Bisextile(annee) if (mod(annee,4) = 0) and ((mod(annee,100) <> 0) or (mod(annee,400) = 0)) result 1 else result 0 end_if END_FNC rem ============================================================================ ' Déterminer le nombre de jours dans un mois (mois) pour une année (annee) FNC NbJours(mois,annee) dim_local n select mois case 01 : n = 31 case 02 : n = 28 : if bisextile(annee) > 0 then n = n + 1 case 03 : n = 31 case 04 : n = 30 case 05 : n = 31 case 06 : n = 30 case 07 : n = 31 case 08 : n = 31 case 09 : n = 30 case 10 : n = 31 case 11 : n = 30 case 12 : n = 31 end_select result n END_FNC rem ============================================================================ SUB Mois_Precedant() dim_local n,nb month = month-1 if month < 1 then month = 12 : year = year - 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Mois_Suivant() dim_local n,nb month = month+1 if month > 12 then month = 1 : year = year + 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Affiche(n) dim_local i grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" for i = 1 to n : grid_write 1,i+1,1,str$(i) : next i for i = 0 to 5 : grid_write 1,n+1,i+2,prayTime$(i) : next i inactive 70 END_SUB rem ============================================================================ ' Méthodes du calcul selon différentes Ecoles data "Algerian Minister of Religious Affairs and Wakfs : Fajr: 18.0° - Isha'a: 17.0°" data "Egyptian General Authority : Fajr: 19.5° - Isha'a: 17.5°" data "Egyptian General Authority (Bis) : Fajr: 20.0° - Isha'a: 18.0°" data "France UOIF - Angle 12° : Fajr: 12.0° - Isha'a: 12.0°" data "France - Angle 15° : Fajr: 15.0° - Isha'a: 15.0°" data "France - Angle 18° : Fajr: 18.0° - Isha'a: 18.0°" data "Islamic University, Karachi : Fajr: 18.0° - Isha'a: 18.0°" data "JAKIM (Jabatan Kemajuan Islam Malaysia) : Fajr: 20.0° - Isha'a: 18.0°" data "MUIS (Majlis Ugama Islam Singapura : Fajr: 20.0° - Isha'a: 18.0°" data "Muslim World League (MWL) : Fajr: 18.0° - Isha'a: 17.0°" data "North America (ISNA) : Fajr: 15.0° - Isha'a: 15.0°" data "Shia Ithna Ashari (Jafari) : Fajr: 16.0° - Isha'a: 14.0°" data "SIHAT/KEMENAG (Kementerian Agama RI) : Fajr: 20.0° - Isha'a: 18.0°" data "Tunisian Ministry of Religious Affairs : Fajr: 18.0° - Isha'a: 18.0°" data "General Authority of Islamic Affairs And Endowments : Fajr: 19.5° - Isha'a: 90 min" data "Umm Al-Qura, Makkah : Fajr: 18.5° - Isha'a: 90 min" data "University of Tehran : Fajr: 17.7° - Isha'a: 15.0°" rem ============================================================================ ' C'est la procédure qui fait tous les calculs SUB CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) latitude = val(text$(21)) : longitude = val(text$(31)) : TimeZone = val(text$(41)) dst = val(text$(46)) radians select item_index(51) case 01 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Algerian Minister of Religious Affairs and Wakfs case 02 : FajrTwilight = -19.5 : ishaTwilight = -17.5 : ' Egyptian General Authority case 03 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' Egyptian General Authority (Bis) case 04 : FajrTwilight = -12.0 : ishaTwilight = -12.0 : ' France UOIF - Angle 12° case 05 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' France - Angle 15° case 06 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' France - Angle 18° case 07 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Islamic University, Karachi case 08 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' JAKIM (Jabatan Kemajuan Islam Malaysia) case 09 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' MUIS (Majlis Ugama Islam Singapura case 10 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Muslim World League (MWL) case 11 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' North America (ISNA) case 12 : FajrTwilight = -16.0 : ishaTwilight = -14.0 : ' Shia Ithna Ashari (Jafari) case 13 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' SIHAT/KEMENAG (Kementerian Agama RI) case 14 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Tunisian Ministry of Religious Affairs case 15 : FajrTwilight = -19.5 : ' Isha'a: 90 min : ' UAE General Authority of Islamic Affairs And Endowments case 16 : FajrTwilight = -18.5 : ' Isha'a: 90 min : ' Umm Al-Qura, Makkah case 17 : FajrTwilight = -17.7 : ishaTwilight = -15.0 : ' University of Tehran end_select D = (367 * year) - ((year + int((month + 9) / 12)) * 7 / 4) + ((int(275 * month / 9)) + day - 730531.5) L = 280.461 + 0.9856474 * D : L = moreLess360(L) M = 357.528 + (0.9856003) * D : M = moreLess360(M) Lambda = L + 1.915 * sin(degree_To_Radian(M)) + 0.02 * sin(degree_To_Radian(2 * M)) Lambda = moreLess360(Lambda) Obliquity = 23.439 - 0.0000004 * D Alfa = radian_to_degree(atn((cos(degree_to_radian(Obliquity)) * tan(degree_To_Radian(Lambda))))) Alfa = moreLess360(Alfa) Alfa = Alfa - (360 * (int(Alfa / 360))) Alfa = Alfa + 90 * (int(Lambda / 90) - int(Alfa / 90)) ST = 100.46 + 0.985647352 * D Dec = radian_To_Degree(asin(sin(degree_To_Radian(Obliquity)) * sin(degree_To_Radian(Lambda)))) a = (sin(degree_To_Radian(-0.8333)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 : ' le soleil ne se couche pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Durinal_Arc = radian_To_Degree(acos((sin(degree_To_Radian(-0.8333)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) Noon = Alfa - ST Noon = moreLess360(Noon) UT_Noon = Noon - longitude ' ------------------------------------------------------------------------------ ' Calculating Prayer Times Arcs & Times ' ------------------------------------------------------------------------------ ' Zuhr Time (Local noon) zuhrTime = UT_Noon / 15 + timeZone + dst if standard = 1 : ' Asr Standard (Shafii, Maliki, Hanbali) Asr_Alt = radian_To_Degree(atn(1 + tan(degree_To_Radian(abs(latitude - Dec))))) else : ' Asr Hanafi Asr_Alt = radian_To_Degree(atn(2 + tan(degree_To_Radian(abs(latitude - Dec))))) end_if a = (sin(degree_To_Radian(90 - Asr_Alt)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Asr_Arc = radian_To_Degree(acos((sin(degree_To_Radian(90 - Asr_Alt)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) Asr_Arc = Asr_Arc / 15 ' Asr Time asrTime = zuhrTime + Asr_Arc ' Shorouq Time sunRiseTime = zuhrTime - (Durinal_Arc / 15) ' Maghrib Time maghribTime = zuhrTime + (Durinal_Arc / 15) a = (sin(degree_To_Radian(ishaTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 : ' le soleil ne se lève pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Esha_Arc = radian_To_Degree(acos((sin(degree_To_Radian(ishaTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) ' Isha Time ishaTime = zuhrTime + (Esha_Arc / 15) ' Fajr Time a = (sin(degree_To_Radian(fajrTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Fajr_Arc = radian_To_Degree(acos((sin(degree_To_Radian(fajrTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) fajrTime = zuhrTime - (Fajr_Arc / 15) END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Aide sur le programme" + chr$(13) t$ = t$ + "Au lancement du programme, il affiche les résultats du calcul pour la ville de Moknine (Tunisie) pour le mois en cours" + chr$(13) t$ = t$ + "et propose comme méthode de calcul (dans le COMBO Méthode) celle appliquée en Tunisie (Tunisian Ministry of Religious)" + chr$(13) t$ = t$ + "Pour les autres pays, vous pouvez opter pour l'une des métodes proposées dans le COMBO, surtout si votre ville se situe aux" + chr$(13) t$ = t$ + "altitudes supérieures à 45°"+chr$(13) t$ = t$ + "Il propose un choix parmi 8 pays qui vous permettent d'en choisir une ville parmi celles qui sont proposées." + chr$(13) t$ = t$ + "Si votre ville ne s'y trouve pas, vous avez la possibilité d'entrer manuellement ses coordonnées (Latitude, Longitude, Fuseau, DST)" + chr$(13) t$ = t$ + "Vous pouvez aussi l'ajouter dans le code dans les lignes DATA." + chr$(13) t$ = t$ + "En optant pour l'un des pays proposé, vous activez un COMBO vous permettant de choisir une ville." + chr$(13) t$ = t$ + "Le COMBO DST c'est pour le choix de l'heure d'été (valeurs possibles : 0 pas de passage; 1 passage à l'heure d'été." + chr$(13) t$ = t$ + "Les boutons 'main' indiquant la gauche c'est pour le mois précédent, tandis que celle qui indique la droite c'est pour le mois suivant." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Après chaque modification et pour lancer un nouveau calcul,cliquez sur le bouton 'Calculer' (La Palice ne peut pas dire mieux !)" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "L’horaire de la prière de Ichaa correspond à la disparition du crépuscule (12° à 18°) après le coucher du Soleil." + chr$(13) t$ = t$ + "L'Arabie Saoudite, par exemple ajoute 90 mn à l'heure du Maghrib pour obtenir celle du Icha"+ chr$(13) t$ = t$ + " et ajoute 120 mn pour le mois de Ramadan."+ chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Pour information :" + chr$(13) t$ = t$ + "******************" + chr$(13) t$ = t$ + "La définition de l'heure du salat Asr divise les écoles islamiques en deux positions dogmatiques." + chr$(13) t$ = t$ + "Les trois écoles juridiques Malikite, Hambalite et Shafite soutiennent que le Asr commence lorsque la taille d'un objet vertical est la taille de son ombre." + chr$(13) t$ = t$ + "Cette méthode est celle adoptée généralement dans les communautés du Maghreb (d'obédience Malikite)." + chr$(13) t$ = t$ + "La quatrième école Hanafite estime que le Asr commence lorsque l'ombre d'un objet vertical est le double de la taille de cet objet."+chr$(13) t$ = t$ + "Cette nette différence dogmatique entraîne des écarts dans les horaires de salat sur les calendriers correspondant à un même endroit." + chr$(13) t$ = t$ + "Le programme vous permet de choisir votre doctrine réligieuse (Madh-hab) dans le COMBO 'Calcul Asr'. " + chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Le programme est fourni comme tel sans aucune garantie des résultats."+chr$(13) t$ = t$ + "En aucun cas je ne serais responsable de dommages résultants de l'utilisation de cette application." message t$ END_SUB rem ============================================================================ SUB Culture() dim_local t$ t$ = "Méthode de calcul des horaires de prières" + chr$(13) t$ = t$ + "Les prières (pour les Musulmans) sont au nombre de cinq par journée." + chr$(13) t$ = t$ + "Les horaires de ces cinq prières varient d'un endroit (ville) à l'autre et d'un jour à l'autre." + chr$(13) t$ = t$ + "Le calcul fait intervenir les heures du crépuscule, mais lequel ?" + chr$(13) t$ = t$ + "Il existe trois types de crépuscules : " + chr$(13) t$ = t$ + "Le crépuscule astronomique : il intervient lorsque le soleil se situe " t$ = t$ + "en dessous de l’horizon à une hauteur de 18°, et il correspond au moment" + chr$(13) t$ = t$ + "où l’obscurité totale s’installe au niveau de cet horizon." + chr$(13) t$ = t$ + "Le crépuscule nautique : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 12°." + chr$(13) t$ = t$ + "Le crépuscule civil : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 06°." + chr$(13) t$ = t$ + "Or, il s’est avéré que le fait de se baser sur le crépuscule astronomique (18°) pour le calcul des heures de prière " t$ = t$ + "pose des difficultés pour les pays d’Europe." + chr$(13) t$ = t$ + "Il est impossible de calculer les horaires de la prière du Fajr à partir du 18° et ce à partir de la mi-mai jusqu’à la mi-juin environ."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "L’écart entre le Fajr et celui du lever du soleil (Chourouk) se creuse pour atteindre un record de 3h40 min en période d’été." + chr$(13) t$ = t$ + "L’écart entre la prière de Ichaa et celle du Fajr se réduit durant des semaines en période d’été." + chr$(13) t$ = t$ + "A titre d’exemple : le 28 mai à Paris en se basant sur le 18°, la prière de Ichaa est à 00h18 et la prière du Fajr est à 02h59 !" + chr$(13) t$ = t$ + "Soit un écart de 2h41mn."+chr$(13) t$ = t$ + "Par contre, retenir le critère du 12° (le crépuscule nautique) permet de surmonter ces difficultés." + chr$(13) t$ = t$ + "D’une part, l’écart entre la prière du Fajr et celle du lever du soleil (Chourouk) n’excède jamais 02 heures durant toute l’année."+chr$(13) t$ = t$ + "D’autre part, l’écart entre la prière du Ichaa et celle du Fajr reste constamment importante."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Le fait d'opter pour ce critère du 12° permet d’alléger la contrainte sur les musulmans vivant en Europe pour cette pratique cultuelle " + chr$(13) t$ = t$ + "et surtout durant le mois de Ramadan et spécialement en période d’été." + chr$(13) t$ = t$ + "L’avantage de ce choix réside dans la possibilité de l’utiliser durant toute l’année, à l’inverse de celui du 18°." + chr$(13) t$ = t$ + "Certains pays ajoutent 5 minutes en plus par précaution pour les horaires de Dhohr et du Maghrib" + chr$(13) t$ = t$ + "L’horaire du Asr est calculé selon la règle islamique où l’ombre de chaque objet devient égale à celui-ci." + chr$(13) t$ = t$ + "Mais certains pays utilisent d'autres critères, ce qui ne facilite pas la tâche !" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "En résumé : " + chr$(13) t$ = t$ + "* Prière de l'aube (matin) (Fajr) : Le début coïncide avec la fin du délai de d'Isha, soit lorsque le soleil remonte à 19 ° sous l'horizon." + chr$(13) t$ = t$ + " La fin est atteinte au lever du soleil avec le limbe supérieur du soleil tangent à l'horizon soit h = - 0,267°"+ chr$(13) t$ = t$ + "* Prière de la mi-journée (midi) (Dhur) : la durée permise commence quand le soleil a traversé le méridien (soit quand l'ombre d'un objet a commencé à " t$ = t$ + " augmenter) et se termine lorsque l'ombre d'un gnomon s'est allongée d'un quart de sa hauteur par rapport à son ombre à midi." + chr$(13) t$ = t$ + "* Prière de l'après-midi ('Asr) : l'intervalle commence lorsque l'augmentation de l'ombre est égale à la longueur du gnomon et se termine quand l'ombre en a atteint le double." + chr$(13) t$ = t$ + "* Prière du coucher de soleil (Maghrib) : Le début coïncide avec la disparition totale du soleil sous l'horizon , soit pour h = -0.267°."+chr$(13) t$ = t$ + " La fin du délai est atteinte à la dernière lueur du crépuscule, soit le soleil à 18° sous l'horizon."+chr$(13) t$ = t$ + " Attention, cette condition peut être irréalisable à certaines dates pour certaines latitudes." + chr$(13) t$ = t$ + "* Prière de la nuit ('Isha) : Le début coïncide avec la fin du délai de Maghrib, soit le soleil à 17° sous l'horizon." + chr$(13) t$ = t$ + " La fin du délai est atteinte avec l'apparition de l'aube lorsque le soleil remonte à 19° sous l'horizon." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "Les opinions divergent sur les angles à utiliser pour le calcul de Fajr et Isha." +chr$(13) t$ = t$ + "La mosquée de Paris retient 15° pour Fajr et 18° pour Isha." + chr$(13) + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Pour des plus amples informations sur le calcul des horaires de prière, référez-vous à : " + chr$(13) t$ = t$ + "http://www.averroes-aveyron.fr/medias/files/methodes-de-calcul.pdf" + chr$(13) message t$ END_SUB rem ============================================================================ ' Liste des pays : nom du pays, fuseau horaire du pays et flag pour heure d'été (1 oui, 0 non) data "Algérie" ,1,0 , "Belgique",1,1 ,"Egypte",2,0 , "France",1,1, "Lybie",2,0 data "Maroc",0 , 0, "Arabie Saoudite",3,0 ,"Tunisie",1,0 ' ------------------------------------------------------------------------------ data "Algérie" : ' UTC + 1 ; DST 0 ' ----------- 1: ' Ville Latitude Longitude data "Adrar" , 27.850, -0.317 data "Alger" , 36.833, 3.000 data "Annaba" , 36.917, 7.783 data "Batna" , 35.567, 6.167 data "Bechar" , 31.583, -2.283 data "Bejaia" , 36.817, 5.050 data "Biskra" , 34.833, 5.683 data "Blida" , 36.500, 2.833 data "Boussaada" , 35.167, 4.150 data "Constantine" , 36.367, 6.667 data "El Asnam" , 36.183, 1.350 data "El Djelfa" , 34.717, 3.233 data "Ghardaia" , 32.333, 3.667 data "Laghouat" , 33.817, 2.917 data "Mostaganem" , 35.900, 0.083 data "M'Sila" , 35.667, 4.517 data "Oran" , 35.750, -0.633 data "Ouargla" , 32.000, 5.267 data "Setif" , 36.183, 5.400 data "Sidi-bel-Abbes" , 35.250, -0.650 data "Skikda" , 36.883, 6.900 data "Tamanrasset" , 22.833, 5.467 data "Tebessa" , 35.350, 8.100 data "Tiaret" , 35.333, 1.333 data "Tilimsen" , 34.883, -1.350 data "Tizi-Ouzou" , 36.733, 4.083 data "FIN" ' ------------------------------------------------------------------------------ data "Belgique" : ' UTC + 1 UTC + 2 Heure d'été ' ----------- 2: ' Ville Latitude Longitude data "Antwerp" , 51.217, 4.417 data "Brussels" , 50.850, 4.350 data "Charleroi" , 50.417, 4.450 data "Gent" , 51.033, 3.700 data "Liege" , 50.633, 5.583 data "Ostende" , 51.217, 2.917 data "Mons" , 50.467, 3.967 data "Namur" , 50.467, 4.867 data "FIN" ' ------------------------------------------------------------------------------ data "Egypte" : ' UTC + 2 ' ------------------------------------- 3: ' Ville Latitude Longitude data "Abou Simbel" , 22.317, 31.633 data "Alexandria" , 31.217, 29.917 data "Aswan" , 24.083, 32.933 data "Asyut" , 27.233, 31.117 data "Beni-Souef" , 29.083, 31.083 data "Cairo" , 30.050, 31.250 data "Damanhur" , 31.050, 30.467 data "Dumyat" , 31.433, 31.800 data "El Alamein" , 30.833, 28.950 data "Helwan" , 29.850, 31.333 data "Isma'ilia" , 30.600, 32.250 data "Karnak" , 25.683, 32.667 data "Port Said" , 31.283, 32.300 data "Sohag" , 26.550, 31.700 data "Suez" , 29.983, 32.550 data "Tanta" , 30.800, 31.000 data "Zagazig" , 30.583, 31.500 data "FIN" ' ------------------------------------------------------------------------------- data "France" : ' UTC + 1 UTC + 2 Heure d'été ' ---------- 4: ' Ville Latitude Longitude data "Brest" , 48.383, -4.500 data "Quimper" , 48.000, -4.100 data "Lorient" , 47.750, -3.350 data "St-Brieuc" , 48.517, -2.750 data "Vannes" , 47.667, -2.733 data "St Nazaire" , 47.283, -2.200 data "Rennes" , 48.100, -1.667 data "Cherbourg" , 49.633, -1.617 data "Nantes" , 47.233, -1.583 data "La-Roche-sur-Yon" , 46.633, -1.500 data "Bayonne" , 43.500, -1.467 data "La Rochelle" , 46.167, -1.167 data "St-Lo" , 49.117, -1.083 data "Laval" , 48.067, -0.750 data "Bordeaux" , 44.833, -0.567 data "Angers" , 47.483, -0.533 data "Mont-de-Marsan" , 43.900, -0.500 data "Niort" , 46.317, -0.450 data "Pau" , 43.300, -0.367 data "Caen" , 49.183, -0.367 data "Alençon" , 48.417, 0.083 data "Tarbes" , 43.233, 0.083 data "Le Havre" , 49.500, 0.100 data "Angouleme" , 45.667, 0.167 data "Le Mans" , 48.000, 0.200 data "Poitiers" , 46.583, 0.333 data "Cahors" , 44.467, 0.433 data "Auch" , 43.500, 0.600 data "Agen" , 44.200, 0.633 data "Tours" , 47.383, 0.700 data "Perigueux" , 45.200, 0.733 data "Dieppe" , 49.917, 1.083 data "Rouen" , 49.433, 1.083 data "Evreux" , 49.050, 1.183 data "Limoges" , 45.833, 1.250 data "Montauban" , 44.017, 1.333 data "Blois" , 47.600, 1.333 data "Toulouse" , 43.617, 1.450 data "Chartres" , 48.450, 1.500 data "Foix" , 42.950, 1.583 data "Chateauroux" , 46.817, 1.683 data "Tulle" , 45.267, 1.767 data "Abbeville" , 50.100, 1.850 data "Gueret" , 46.167, 1.866 data "Orleans" , 47.900, 1.900 data "Vierzon" , 47.233, 2.050 data "Pontoise" , 49.050, 2.083 data "Beauvais" , 49.433, 2.083 data "Versailles" , 48.800, 2.133 data "Albi" , 43.933, 2.144 data "Nanterre" , 48.883, 2.217 data "Amiens" , 49.900, 2.300 data "Paris" , 48.833, 2.333 data "Bourges" , 47.083, 2.383 data "Carcassonne" , 43.217, 2.350 data "Dunkerque" , 51.033, 2.383 data "Aurillac" , 44.933, 2.433 data "Bobigny" , 48.917, 2.450 data "Créteil" , 48.783, 2.467 data "Melun" , 48.533, 2.557 data "Evry" , 48.633, 2.567 data "Rodez" , 44.350, 2.567 data "Montlucon" , 46.333, 2.600 data "Arras" , 50.283, 2.767 data "Lens" , 50.433, 2.833 data "Perpignan" , 42.700, 2.900 data "Lille" , 50.650, 3.083 data "Clermont-Ferrand",45.783, 3.083 data "Nevers" , 47.000, 3.150 data "Moulins" , 46.567, 3.333 data "Mende" , 44.533, 3.500 data "Auxerre" , 47.800, 3.583 data "Laon" , 49.567, 3.617 data "Montpellier" , 43.600, 3.883 data "Le Puy" , 45.050, 3.883 data "Avallon" , 47.500, 3.900 data "Reims" , 49.250, 4.033 data "Troyes" , 48.300, 4.083 data "Roanne" , 46.033, 4.083 data "Nimes" , 43.500, 4.350 data "Chalons-S-Marne", 48.967, 4.367 data "St-Etienne" , 45.433, 4.383 data "Privas" , 44.733, 4.600 data "Mezières" , 49.767, 4.733 data "Avignon" , 43.933, 4.800 data "Lyon" , 45.767, 4.833 data "Macon" , 45.300, 4.833 data "Valence" , 44.933, 4.900 data "Dijon" , 47.333, 5.033 data "Chaumont" , 48.117, 5.133 data "Bar-le-Duc" , 48.767, 5.167 data "Bourg" , 46.200, 5.217 data "Observatoire SIRENE" , 44.000, 5.333 data "Marseille " , 43.300, 5.367 data "Lons-le-Saunier", 46.683, 5.550 data "Grenoble" , 45.183, 5.717 data "Toulon" , 43.117, 5.917 data "Chambéry" , 45.567, 5.917 data "Besancon" , 47.250, 5.983 data "Gap" , 44.550, 6.083 data "Annecy" , 45.900, 6.117 data "Metz" , 49.117, 6.183 data "Vesoul" , 47.633, 6.150 data "Nancy" , 48.700, 6.200 data "Digne" , 44.083, 6.233 data "Epinal" , 48.167, 6.467 data "Belfort" , 47.633, 6.867 data "Cannes" , 43.550, 7.000 data "Nice" , 43.700, 7.267 data "Colmar" , 48.083, 7.350 data "Mulhouse" , 47.750, 7.350 data "Strasbourg" , 48.583, 7.750 data "Ajaccio" , 41.917, 8.717 data "Bastia" , 42.683, 9.433 data "FIN" ' ------------------------------------------------------------------------------ data "Libye" :' UTC + 2 ' --------- 5: ' Ville Latitude Longitude data "Sabratah" , 32.833, 12.400 data "Tripoli" , 32.967, 13.200 data "Al Khums" , 32.650, 14.250 data "Sabhah" , 27.050, 14.433 data "Benghazi" , 32.117, 20.083 data "Ajdabiyah" , 30.800, 20.250 data "Al Marj" , 32.500, 20.833 data "Darnah" , 32.767, 22.650 data "Tubruq" , 32.100, 23.933 data "FIN" ' ------------------------------------------------------------------------------
data "Moroc" : ' UTC + 0 ' --------- 6: ' Ville Latitude Longitude data "Agadir" , 30.500, -9.667 data "Safi" , 32.300, -9.333 data "El Jadida" , 33.183, -8.283 data "Marrakech" , 31.817, -8.000 data "Settat" , 33.067, -7.617 data "Casablanca" , 33.650, -7.583 data "Mohammedia" , 33.717, -7.333 data "Khouribga" , 32.900, -6.950 data "Sale" , 34.067, -6.833 data "Kenitra" , 34.333, -6.567 data "Beni Mellal" , 32.367, -6.483 data "Khemisset" , 33.833, -6.050 data "Ksar el Kebir" , 35.067, -5.933 data "Tanger" , 35.800, -5.833 data "Meknes" , 33.883, -5.617 data "Tetouan" , 35.567, -5.367 data "Ceuta" , 35.883, -5.317 data "Fes" , 34.083, -5.000 data "Taza" , 34.267, -4.017 data "Nador" , 35.167, -3.000 data "Oujda" , 34.683, -1.750 data "FIN" ' ------------------------------------------------------------------------------ rem ============================================================================ data "Arabie Saoudite" : ' UTC + 3 ' ---------------- 7: ' Ville Latitude Longitude data "Riyadh" , 24.650, 46.767 data "Al Wajh" , 26.267, 36.467 data "Tabuk" , 28.367, 36.533 data "Yanbu'Al Bahr" , 24.117, 38.067 data "Tayma" , 27.617, 38.500 data "Jiddah" , 21.500, 39.167 data "Khaybar" , 25.800, 39.200 data "Medina" , 24.500, 39.583 data "Mecca" , 21.433, 39.817 data "Al Jawf" , 29.783, 39.867 data "Al Lith" , 20.167, 40.267 data "At Ta'if" , 21.250, 40.350 data "Badanah" , 31.000, 41.083 data "Al Qunfidhah" , 19.150, 41.117 data "Turabah" , 21.250, 41.567 data "Ha'il" , 27.517, 41.750 data "bha" , 18.233, 42.517 data "Jizan" , 16.933, 42.550 data "Buraydah" , 26.333, 43.983 data "Najran" , 17.517, 44.317 data "Shaqra" , 25.300, 45.250 data "Al Artawiyak" , 26.517, 45.350 data "Ad Dilam" , 23.983, 47.100 data "Haradh" , 24.200, 49.117 data "Al Hufuf" , 25.333, 49.567 data "Ad Dammam" , 26.417, 50.100 data "Al Khurmah" , 21.917, 42.033 data "FIN" ' ------------------------------------------------------------------------------ Data "Tunisie" : ' UTC + 1 ' ----------- 8: ' Ville Latitude Longitude data "Gafsa" , 34.467, 8.717 data "Beja" , 36.717, 9.217 data "Bizerte" , 37.300, 9.867 data "Kairouan" , 35.700, 10.017 data "Gabes" , 33.867, 10.100 data "Tunis" , 36.833, 10.217 data "Sousse" , 35.833, 10.633 data "Sfax" , 34.750, 10.717 data "Nabeul" , 36.500, 10.733 data "Moknine" , 35.633, 10.833 data "Monastir", 35.777, 10.826 data "Mahdia" , 35.502, 11.045 data "Jendouba" , 35.501, 08.783 data "Le Kef" , 36.179, 08.714 data "Siliana" , 35.990, 09.278 data "Ariana" , 36.862, 10.195 data "Ben Arous" , 36.743, 10.232 data "Kasserine" , 35.171, 08.828 data "Kebili" , 33.124, 08.836 data "La Manouba" , 36.807, 10.101 data "Medenine" , 33.348, 10.494 data "Sidi Bouzid" , 35.033, 09.5 data "Tataouine" , 32.921, 10.450 data "Zaghouan" , 36.399, 10.147 data "La Soukra" , 36.883, 10.25 data "La Marsa" , 36.876, 10.325
data "FIN" rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&& FIN DU CODE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
- Spoiler:
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculateur des heures de prière. Ven 3 Mai 2019 - 0:04 | |
| Bravo Papydall ! Juste une petite mise à jour à faire : le Maroc a abandonné le système de changement d'heure été/hiver. Le royaume reste définitivement en UTC+1. Ton code-source est riche d'astuces. Merci de ton partage ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Ven 3 Mai 2019 - 1:28 | |
| Merci Marc pour la re-marc sur le Maroc. Code remis à jour pour tenir compte de cette remarque et ajout de deux marques pour marquer le jour courant. - Code:
-
rem ============================================================================ rem CalcPrayerTimes.bas rem Calculateur des heures de prière par Papydall rem Version 3.2 rem Dernière modification : 03 Mai 2019 rem ============================================================================ Init() Gui() Afficher_Kibla() Grille(NbJours(month,year)) Run() end rem ============================================================================ SUB Init() label clic, change label 1, 2, 3, 4, 5, 6, 7, 8 : ' pour restore_label dim year, month, day dim longitude, latitude, timeZone,fajrTwilight, ishaTwilight dim fajrTime, sunRiseTime, zuhrTime, asrTime, maghribTime, ishaTime dim d, l, m, lambda, obliquity, alfa, st, dec, durinal_Arc, noon, Ut_Noon dim Asr_Alt, Asr_Arc, Esha_Arc, Fajr_Arc dim prayTime$(5), standard,nc,Fuseau(8), H_Ete(8) dim hours, minutes ,h$, m$, a, n, dst, methode, p$, ville$, pays$ dim NbPays : NbPays = 8 : ' 8 c'est le nombre des pays proposés dans le programme standard = 1 : ' Pour le calcul du Asr : 1 ---> (Shafii, Maliki, Hanbali) ' 0 ---> Hanafi day = date_day : month = date_month : year = date_year : ' La date courante END_SUB rem ============================================================================ SUB GUI() dim_local i,t$ t$ = " Calculateur des heures de prière par Papydall " color 0,240,255,255 width 0,1100 : height 0,800 : top 0,(screen_y - height(0)) / 2 left 0,(screen_x - width(0))/2 shape 5 : top 5,5 : left 5,450 : width 5,600 : height 5,50 shape_rectangle_rounded 5 : color 5,25,100,50 shape 6 : top 6,5 : left 6,20 : width 6,420 : height 6,50 shape_rectangle_rounded 6 : color 6,25,100,50 alpha 10 : top 10,20 : left 10,40 : font_color 10,250,100,50 font_bold 10 : font_name 10,"tahoma" : font_size 10,12 caption 10,t$ : caption 0,t$ : application_title t$ alpha 20 : top 20,80 : left 20,010 : caption 20,"Latitude : " edit 21 : top 21,80 : left 21,070 : width 21,60 : font_bold 21 : text 21,"35.633" hint 21,"En degrés décimaux (± 90°) positive au Nord" : on_change 21,change alpha 30 : top 30,80 : left 30,140 : caption 30,"Longitude : " edit 31 : top 31,80 : left 31,210 : width 31,60 : font_bold 31 : text 31,"10.833" hint 31,"En degrés décimaux (± 180°) positive à l'est" : on_change 31,change alpha 40 : top 40,80 : left 40,285 : caption 40,"Fuseau :" spin 41 : top 41,80 : left 41,335 : width 41,60 : min 41,-12 : max 41,12 : font_bold 41 hint 41,"ZoneTime, décalage heure : Valeurs possibles ± 12" : position 41,1 on_change 41,change alpha 45 : top 45,80 : left 45,420 : caption 45,"DST :" : font_bold 45 : font_name 45,"tahoma" combo 46 : top 46,80 : left 46,450 : width 46,50 : hint 46,"Heure d'été" on_change 46,change alpha 50 : top 50,80 : left 50,520 : caption 50,"Méthode :" combo 51 : top 51,80 : left 51,580 : width 51,480 : font_bold 51 : height 51,40 font_name 51,"tahoma" : on_change 51,change hint 51,"convention de calcul utilisé" alpha 55 : top 55,130 : left 55,10 : font_bold 55 : font_name 55,"tahoma" caption 55,"Calcul Asr :" combo 56 : top 56,130 : left 56,80 : font_bold 56 : font_name 56,"tahoma" width 56,220 : hint 56,"Doctrines religieuses" : on_change 56,change item_add 56,"Standard (Shafii, Maliki, Hanbali)" item_add 56,"Hanafi" : item_select 56,1 button 60 : top 60,20 : left 60,950 : caption 60,"Quitter" on_click 60,clic button 70 : top 70,20 : left 70,470 : caption 70,"Calculer" on_click 70,clic : inactive 70 button 80 : top 80,120 : left 80,500 : font_bold 80 : font_name 80,"wingdings 2" font_size 80,30 : caption 80,"D" : hint 80,"Mois précédent" : on_click 80,clic button 90 : top 90,120 : left 90,760 : font_bold 90 : font_name 90,"wingdings 2" font_size 90,30 : caption 90,"E" : hint 90,"Mois suivant" : on_click 90,clic alpha 100: top 100,130 : left 100,630 : font_bold 100 : font_name 100,"arial" font_size 100,12 : caption 100,Month_Name$(month) + " " + str$(year) item_add 46,0 : item_add 46,1 : item_select 46,1 for i = 1 to 17 : read t$ : item_add 51,t$ : next i item_select 51,14 for i = 20 to 70 step 10 : font_bold i : font_name i,"tahoma" : next i alpha 110 : top 110,180 : left 110,10 : font_bold 110 : font_size 110,12 font_name 110,"tahoma" : font_color 110, 255,0,0 : caption 110,"Pays : Tunisie" alpha 120 : top 120,180 : left 120,220 : font_bold 120 : font_size 120,12 font_name 120,"tahoma" : font_color 120, 255,0,0 : caption 120,"Ville : Moknine" alpha 130 : top 130,230 : left 130,10 : font_bold 130 : font_name 130,"tahoma" font_size 130,12 : font_color 130,0,0,255 : caption 130,"Choix Pays / Villes" alpha 140 : top 140,260 : left 140,60 : font_bold 140 : font_name 140,"Wingdings" font_size 140,30 : caption 140,"ê" button 150 : top 150,20 : left 150,600 : font_bold 150 : caption 150,"Aide" : on_click 150,clic button 160 : top 160,20 : left 160,740 : font_bold 160 : width 160,150 caption 160,"Pour votre culture" : on_click 160,clic container_option 200 : top 200,300 : left 200,10 : width 200,130 : height 200,35*NbPays +10 color 200,255,255,0 for i = 1 to NbPays option 200+i : parent 200+i,200 : top 200+i,30*i : left 200+i,10 font_bold 200+i : font_name 200+i,"tahoma" : on_click 200+i,clic read p$ : caption 200+i,p$ read fuseau(i) : read H_Ete(i) next i combo 300 : top 300,300 : left 300,160 font_bold 300 : width 300,300 : hide 300 : on_change 300,change picture 400 : top 400,450 : left 400,170 : width 400,300 : height 400,300 2d_target_is 400 : print_target_is 400 alpha 410 : top 410,600 : left 410,10 : font_bold 410 : font_name 410,"tahoma" font_size 410,10 : font_color 410,255,0,0 t$ = "Direction de la Kibla" + chr$(13) + "depuis Moknine" + chr$(13) + "Tunisie : " caption 410,t$ hint 410,"Angle en ° à partir du Nord" +chr$(13)+"indiquant la direction de la Kibla" alpha 420 : top 420,630 : left 420,130 : font_bold 420 : font_name 420,"tahoma' font_size 420,12 : font_color 420,0,0,0 alpha 430 : top 430, 680 : left 430,1 : font_bold 430 : font_name 430,"tahoma" font_size 430,10 : font_color 430,0,0,255 hint 430,"Distance de la Mecque" alpha 500 : top 500,180+17*date_day : left 500,470 : font_name 500,"Wingdings" font_bold 500 : font_size 500,20 : font_color 500,255,0,0 : caption 500,"F" alpha 510 : top 510,180+17*date_day : left 510,840 : font_name 510,"Wingdings" font_bold 510 : font_size 510,20 : font_color 510,255,0,0 : caption 510,"E" hint 500,"Jour courant" : hint 510,"Jour courant" END_SUB rem ============================================================================ ' Formule donnant la distance orthdromique entre deux points du globle exprimés ' par leurs coordonnées (latitude et longitude) ' La formule est donnée en assimilant la Terre à une sphère de 40 000 km de circonférence. ' 1.852 : c'est la valeur en km de un mille marin ' 60 : ce nombre provient du fait que le mille marin (1 852 m) correspond à une ' minute d'arc sur un grand cercle de la surface terrestre, et donc 60 milles ' marins correspondent à un degré. FNC Distance_Orthodromique(lat1,lon1) dim_local lat2,lon2,km,d lat2 = 21.433 : lon2 = 39.817 : ' Coordonnées de la Mecque degrees km = 60*1.852 d = km*acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1)) d = int(d) result d END_FNC rem ============================================================================ ' Fonction de calcul de la Kibla ' Elle retourne l'angle partant de la direction du nord et compté dans le sens ' rétrograde (sens des aiguilles d'une montre) FNC Kibla(latitude,longitude) dim_local Lat_Meq : ' Latitude de la Mecque dim_local Lon_Meq : ' Longitude de la Mecque dim_local a,b,c,q,n,d Lat_Meq = 21.433 : Lon_Meq = 39.817 a = Lon_Meq - longitude : b = latitude :c = Lat_Meq degrees n = sin(a) :d = cos(b) * tan(c) - sin(b) * cos(a) if d = 0 then result 0 : exit_fnc q = atn(n/d) if sgn(n) <> sgn(q) then q = q + 180 if (sgn(n) < 0) and (sgn(q) < 0) then q = q + 360 result int(q) END_FNC rem ============================================================================ SUB Afficher_Kibla() dim_local la,lo,xc,yc,r,x,y,a,a1,c$,d degrees la = val(text$(21)) : lo = val(text$(31)) xc = width(400)/2 : yc = height(400) / 2 : r = xc-20 color 400,20,100,20 : font_color 400,255,255,0 : font_bold 400 : font_size 400,10 2d_fill_color 200,100,020 : 2d_circle xc,yc,r 2d_pen_width 2 for a = 0 to 360 step 10 : 2d_line xc,yc,xc+r*cos(a),yc+r*sin(a) : next a 2d_fill_color 255,255,255 : 2d_circle xc,yc,r-10 2d_fill_color 0,0,0 : 2d_circle xc,yc,5 a = Kibla(la,lo) : r = r-15 : x = xc+r*cos(a-90) : y = yc+r*sin(a-90) 2d_pen_width 2 : 2d_line xc,yc,x,y r = r-15 for a1 = a-80 to a-100 step -1 : 2d_poly_to xc+r*cos(a1),yc+r*sin(a1) : next a1 2d_poly_to x,y : 2d_fill_color 20,100,20 print_locate xc-4,2 : print "N" print_locate 2*xc-15,yc-10 : print "E" print_locate xc-4,2*yc-20 : print "S" print_locate 5,yc-10 : print "W" d = Distance_Orthodromique(la,lo) caption 420, str$(a) + "°" caption 430, "Distance orthodromique :" + chr$(13) + str$(d) + " km" END_SUB rem ============================================================================ ' Tracer une grille en fonction du nombre des jours dans le mois en cours SUB Grille(n) grid 1 : top 1,180 : left 1,500 : width 1,342 : height 1,n*18-8 : grid_row 1,n+1 grid_row_fixed 1,1 : grid_row_height 1,16 grid_column 1,7 : grid_column_fixed 1,1 : grid_column_width 1,50 : font_bold 1 grid_fixed_color 1,255,255,0 : grid_one_column_width 1,1,30 color 1,0,255,255 grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" END_SUB rem ============================================================================ SUB Run() dim_local nb nb = NbJours(month,year) for n = 1 to Nb : Go(n) : Affiche(n) : next n END_SUB rem ============================================================================ Change: active 70 : caption 420,"": off_change 300 for nc = 21 to 41 step 10 : off_change nc : next nc for nc = 46 to 56 step 10 : off_change nc : next nc if item_index(56) = 1 then standard = 1 : else : standard = 0 select number_change case 21 : if text$(21) = "" then text 21,0 case 31 : if text$(31) = "" then text 31,0 case 41 : if text$(41) = "" then text 41,0 if abs(val(text$(41))) > 12 then text 41,0 case 46 : if (text$(46) <> "0") or (text$(46) <> "1") then text 46,0 case 51 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 56 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 300 : New_Coord() end_select for nc = 21 to 41 step 10 : on_change nc,change : next nc for nc = 46 to 56 step 10 : on_change nc,change : next nc on_change 300,change return rem ============================================================================ ' Gestion des clics de l'utilisateur Clic: for nc = 60 to 90 step 10 : off_click nc : next nc for nc = 150 to 160 step 10 : off_click nc : next nc for nc = 201 to 208 : off_click nc : next nc if number_click > 200 then caption 140,"ê î" select number_click case 060 : if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate case 070 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() : inactive 70 case 080 : Mois_Precedant() case 090 : Mois_Suivant() case 150 : Aide() case 160 : Culture() case 201 : restore_label 1 : pays$ = "Algérie" : List_Ville(number_click-200) case 202 : restore_label 2 : pays$ = "Belgique" : List_Ville(number_click-200) case 203 : restore_label 3 : pays$ = "Egypte" : List_Ville(number_click-200) case 204 : restore_label 4 : pays$ = "France" : List_Ville(number_click-200) case 205 : restore_label 5 : pays$ = "Lybie" : List_Ville(number_click-200) case 206 : restore_label 6 : pays$ = "Maroc" : List_Ville(number_click-200) case 207 : restore_label 7 : pays$ = "Arabie Saoudite": List_Ville(number_click-200) case 208 : restore_label 8 : pays$ = "Tunisie" : List_Ville(number_click-200) end_select for nc = 60 to 90 step 10 : on_click nc,clic : next nc for nc = 150 to 160 step 10 : on_click nc,clic : next nc for nc = 201 to 208 : on_click nc,clic : next nc return rem ============================================================================ SUB Go(day) calcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) NumberToHrMin(fajrTime) : prayTime$(0) = h$ + ":" + m$ NumberToHrMin(SunRiseTime) : prayTime$(1) = h$ + ":" + m$ NumberToHrMin(zuhrTime) : prayTime$(2) = h$ + ":" + m$ NumberToHrMin(AsrTime) : prayTime$(3) = h$ + ":" + m$ NumberToHrMin(MaghribTime) : prayTime$(4) = h$ + ":" + m$ if (item_index(51) = 15) or (item_index(51) = 16) NumberToHrMin(MaghribTime + 1.5) prayTime$(5) = h$ + ":" + m$ else NumberToHrMin(IshaTime) : prayTime$(5) = h$ + ":" + m$ end_if END_SUB rem ============================================================================ SUB New_Coord() dim_local t$,t1$,p t$ = item_read$(300,item_index(300)) p = instr(t$,":") : ville$ = left$(t$,p-1) : t$ = mid$(t$,p+1,20) p = instr(t$,"/") : t1$ = mid$(t$,p+1,20) : t$ = left$(t$,p-1) text 21,t$ : text 31,t1$ caption 110,"Pays : " + pays$ : caption 120,"Ville : " + ville$ t$ = "Direction de la Qibla" + chr$(13) + "depuis " t1$ = ville$ + chr$(13) + pays$ + " : " caption 410,t$ + t1$ grid_clear 1,NbJours(month,year)+1 ,7 END_SUB rem ============================================================================ SUB List_Ville(p) clear 300 position 41,fuseau(p) item_select 46,H_Ete(p) + 1 read ville$ while ville$ <> "FIN" ville$ = ville$ + " : " read latitude : read longitude item_add 300,ville$ + str$(latitude) + " / " + str$(longitude) read ville$ end_while item_select 300,1 : sort_on 300 : show 300 : inactive 70 END_SUB rem ============================================================================ ' Ramener la valeur de value entre 0 et 360 FNC moreLess360(value) while (value > 360) or (value < 0) if value > 360 value = value - 360 else if value < 0 value = value + 360 end_if end_if end_while result value END_FNC rem ============================================================================ ' Ramener la valeur de value entre 0 et 24 FNC moreLess24(value) while (value > 24) or (value < 0) if value > 24 value = value - 24 else if value < 0 value = value + 24 end_if end_if end_while result value END_FNC rem ============================================================================ ' convertir le nombre number en heurs et Minutes SUB NumberToHrMin(number) if number = -1 then h$ = "--" : m$ = "--" : exit_sub hours = int(moreLess24(number)) minutes = int(moreLess24(number - hours) * 60) h$ = str$(hours) : m$ = str$(minutes) if len(h$) < 2 then h$ = "0" + h$ if len(m$) < 2 then m$ = "0" + m$ END_SUB rem ============================================================================ FNC Month_Name$(mois) dim_local m$ select mois case 01 : m$ = "Janvier" case 02 : m$ = "Février" case 03 : m$ = "Mars" case 04 : m$ = "Avril" case 05 : m$ = "Mai" case 06 : m$ = "Juin" case 07 : m$ = "Juillet" case 08 : m$ = "Août" case 09 : m$ = "Septembre" case 10 : m$ = "Octobre" case 11 : m$ = "Novembre" case 12 : m$ = "Décembre" end_select result m$ END_FNC rem ============================================================================ ' Fonction qui retourne 1 si l'argument (annee) représente une année bisextile ' 0 sinon FNC Bisextile(annee) if (mod(annee,4) = 0) and ((mod(annee,100) <> 0) or (mod(annee,400) = 0)) result 1 else result 0 end_if END_FNC rem ============================================================================ ' Déterminer le nombre de jours dans un mois (mois) pour une année (annee) FNC NbJours(mois,annee) dim_local n select mois case 01 : n = 31 case 02 : n = 28 : if bisextile(annee) > 0 then n = n + 1 case 03 : n = 31 case 04 : n = 30 case 05 : n = 31 case 06 : n = 30 case 07 : n = 31 case 08 : n = 31 case 09 : n = 30 case 10 : n = 31 case 11 : n = 30 case 12 : n = 31 end_select result n END_FNC rem ============================================================================ SUB Mois_Precedant() dim_local n,nb month = month-1 if month < 1 then month = 12 : year = year - 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Mois_Suivant() dim_local n,nb month = month+1 if month > 12 then month = 1 : year = year + 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Affiche(n) dim_local i grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" for i = 1 to n : grid_write 1,i+1,1,str$(i) : next i for i = 0 to 5 : grid_write 1,n+1,i+2,prayTime$(i) : next i inactive 70 END_SUB rem ============================================================================ ' Méthodes du calcul selon différentes Ecoles data "Algerian Minister of Religious Affairs and Wakfs : Fajr: 18.0° - Isha'a: 17.0°" data "Egyptian General Authority : Fajr: 19.5° - Isha'a: 17.5°" data "Egyptian General Authority (Bis) : Fajr: 20.0° - Isha'a: 18.0°" data "France UOIF - Angle 12° : Fajr: 12.0° - Isha'a: 12.0°" data "France - Angle 15° : Fajr: 15.0° - Isha'a: 15.0°" data "France - Angle 18° : Fajr: 18.0° - Isha'a: 18.0°" data "Islamic University, Karachi : Fajr: 18.0° - Isha'a: 18.0°" data "JAKIM (Jabatan Kemajuan Islam Malaysia) : Fajr: 20.0° - Isha'a: 18.0°" data "MUIS (Majlis Ugama Islam Singapura : Fajr: 20.0° - Isha'a: 18.0°" data "Muslim World League (MWL) : Fajr: 18.0° - Isha'a: 17.0°" data "North America (ISNA) : Fajr: 15.0° - Isha'a: 15.0°" data "Shia Ithna Ashari (Jafari) : Fajr: 16.0° - Isha'a: 14.0°" data "SIHAT/KEMENAG (Kementerian Agama RI) : Fajr: 20.0° - Isha'a: 18.0°" data "Tunisian Ministry of Religious Affairs : Fajr: 18.0° - Isha'a: 18.0°" data "General Authority of Islamic Affairs And Endowments : Fajr: 19.5° - Isha'a: 90 min" data "Umm Al-Qura, Makkah : Fajr: 18.5° - Isha'a: 90 min" data "University of Tehran : Fajr: 17.7° - Isha'a: 15.0°" rem ============================================================================ ' C'est la procédure qui fait tous les calculs SUB CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) latitude = val(text$(21)) : longitude = val(text$(31)) : TimeZone = val(text$(41)) dst = val(text$(46)) radians select item_index(51) case 01 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Algerian Minister of Religious Affairs and Wakfs case 02 : FajrTwilight = -19.5 : ishaTwilight = -17.5 : ' Egyptian General Authority case 03 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' Egyptian General Authority (Bis) case 04 : FajrTwilight = -12.0 : ishaTwilight = -12.0 : ' France UOIF - Angle 12° case 05 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' France - Angle 15° case 06 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' France - Angle 18° case 07 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Islamic University, Karachi case 08 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' JAKIM (Jabatan Kemajuan Islam Malaysia) case 09 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' MUIS (Majlis Ugama Islam Singapura case 10 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Muslim World League (MWL) case 11 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' North America (ISNA) case 12 : FajrTwilight = -16.0 : ishaTwilight = -14.0 : ' Shia Ithna Ashari (Jafari) case 13 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' SIHAT/KEMENAG (Kementerian Agama RI) case 14 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Tunisian Ministry of Religious Affairs case 15 : FajrTwilight = -19.5 : ' Isha'a: 90 min : ' UAE General Authority of Islamic Affairs And Endowments case 16 : FajrTwilight = -18.5 : ' Isha'a: 90 min : ' Umm Al-Qura, Makkah case 17 : FajrTwilight = -17.7 : ishaTwilight = -15.0 : ' University of Tehran end_select D = (367 * year) - ((year + int((month + 9) / 12)) * 7 / 4) + ((int(275 * month / 9)) + day - 730531.5) L = 280.461 + 0.9856474 * D : L = moreLess360(L) M = 357.528 + (0.9856003) * D : M = moreLess360(M) Lambda = L + 1.915 * sin(degree_To_Radian(M)) + 0.02 * sin(degree_To_Radian(2 * M)) Lambda = moreLess360(Lambda) Obliquity = 23.439 - 0.0000004 * D Alfa = radian_to_degree(atn((cos(degree_to_radian(Obliquity)) * tan(degree_To_Radian(Lambda))))) Alfa = moreLess360(Alfa) Alfa = Alfa - (360 * (int(Alfa / 360))) Alfa = Alfa + 90 * (int(Lambda / 90) - int(Alfa / 90)) ST = 100.46 + 0.985647352 * D Dec = radian_To_Degree(asin(sin(degree_To_Radian(Obliquity)) * sin(degree_To_Radian(Lambda)))) a = (sin(degree_To_Radian(-0.8333)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 : ' le soleil ne se couche pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Durinal_Arc = radian_To_Degree(acos((sin(degree_To_Radian(-0.8333)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) Noon = Alfa - ST Noon = moreLess360(Noon) UT_Noon = Noon - longitude ' ------------------------------------------------------------------------------ ' Calculating Prayer Times Arcs & Times ' ------------------------------------------------------------------------------ ' Zuhr Time (Local noon) zuhrTime = UT_Noon / 15 + timeZone + dst if standard = 1 : ' Asr Standard (Shafii, Maliki, Hanbali) Asr_Alt = radian_To_Degree(atn(1 + tan(degree_To_Radian(abs(latitude - Dec))))) else : ' Asr Hanafi Asr_Alt = radian_To_Degree(atn(2 + tan(degree_To_Radian(abs(latitude - Dec))))) end_if a = (sin(degree_To_Radian(90 - Asr_Alt)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Asr_Arc = radian_To_Degree(acos((sin(degree_To_Radian(90 - Asr_Alt)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) Asr_Arc = Asr_Arc / 15 ' Asr Time asrTime = zuhrTime + Asr_Arc ' Shorouq Time sunRiseTime = zuhrTime - (Durinal_Arc / 15) ' Maghrib Time maghribTime = zuhrTime + (Durinal_Arc / 15) a = (sin(degree_To_Radian(ishaTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 : ' le soleil ne se lève pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Esha_Arc = radian_To_Degree(acos((sin(degree_To_Radian(ishaTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) ' Isha Time ishaTime = zuhrTime + (Esha_Arc / 15) ' Fajr Time a = (sin(degree_To_Radian(fajrTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Fajr_Arc = radian_To_Degree(acos((sin(degree_To_Radian(fajrTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) fajrTime = zuhrTime - (Fajr_Arc / 15) END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Aide sur le programme" + chr$(13) t$ = t$ + "Au lancement du programme, il affiche les résultats du calcul pour la ville de Moknine (Tunisie) pour le mois en cours" + chr$(13) t$ = t$ + "et propose comme méthode de calcul (dans le COMBO Méthode) celle appliquée en Tunisie (Tunisian Ministry of Religious)" + chr$(13) t$ = t$ + "Pour les autres pays, vous pouvez opter pour l'une des métodes proposées dans le COMBO, surtout si votre ville se situe aux" + chr$(13) t$ = t$ + "altitudes supérieures à 45°"+chr$(13) t$ = t$ + "Il propose un choix parmi 8 pays qui vous permettent d'en choisir une ville parmi celles qui sont proposées." + chr$(13) t$ = t$ + "Si votre ville ne s'y trouve pas, vous avez la possibilité d'entrer manuellement ses coordonnées (Latitude, Longitude, Fuseau, DST)" + chr$(13) t$ = t$ + "Vous pouvez aussi l'ajouter dans le code dans les lignes DATA." + chr$(13) t$ = t$ + "En optant pour l'un des pays proposé, vous activez un COMBO vous permettant de choisir une ville." + chr$(13) t$ = t$ + "Le COMBO DST c'est pour le choix de l'heure d'été (valeurs possibles : 0 pas de passage; 1 passage à l'heure d'été." + chr$(13) t$ = t$ + "Les boutons 'main' indiquant la gauche c'est pour le mois précédent, tandis que celle qui indique la droite c'est pour le mois suivant." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Après chaque modification et pour lancer un nouveau calcul,cliquez sur le bouton 'Calculer' (La Palice ne peut pas dire mieux !)" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "L’horaire de la prière de Ichaa correspond à la disparition du crépuscule (12° à 18°) après le coucher du Soleil." + chr$(13) t$ = t$ + "L'Arabie Saoudite, par exemple ajoute 90 mn à l'heure du Maghrib pour obtenir celle du Icha"+ chr$(13) t$ = t$ + " et ajoute 120 mn pour le mois de Ramadan."+ chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Pour information :" + chr$(13) t$ = t$ + "******************" + chr$(13) t$ = t$ + "La définition de l'heure du salat Asr divise les écoles islamiques en deux positions dogmatiques." + chr$(13) t$ = t$ + "Les trois écoles juridiques Malikite, Hambalite et Shafite soutiennent que le Asr commence lorsque la taille d'un objet vertical est la taille de son ombre." + chr$(13) t$ = t$ + "Cette méthode est celle adoptée généralement dans les communautés du Maghreb (d'obédience Malikite)." + chr$(13) t$ = t$ + "La quatrième école Hanafite estime que le Asr commence lorsque l'ombre d'un objet vertical est le double de la taille de cet objet."+chr$(13) t$ = t$ + "Cette nette différence dogmatique entraîne des écarts dans les horaires de salat sur les calendriers correspondant à un même endroit." + chr$(13) t$ = t$ + "Le programme vous permet de choisir votre doctrine réligieuse (Madh-hab) dans le COMBO 'Calcul Asr'. " + chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Le programme est fourni comme tel sans aucune garantie des résultats."+chr$(13) t$ = t$ + "En aucun cas je ne serais responsable de dommages résultants de l'utilisation de cette application." message t$ END_SUB rem ============================================================================ SUB Culture() dim_local t$ t$ = "Méthode de calcul des horaires de prières" + chr$(13) t$ = t$ + "Les prières (pour les Musulmans) sont au nombre de cinq par journée." + chr$(13) t$ = t$ + "Les horaires de ces cinq prières varient d'un endroit (ville) à l'autre et d'un jour à l'autre." + chr$(13) t$ = t$ + "Le calcul fait intervenir les heures du crépuscule, mais lequel ?" + chr$(13) t$ = t$ + "Il existe trois types de crépuscules : " + chr$(13) t$ = t$ + "Le crépuscule astronomique : il intervient lorsque le soleil se situe " t$ = t$ + "en dessous de l’horizon à une hauteur de 18°, et il correspond au moment" + chr$(13) t$ = t$ + "où l’obscurité totale s’installe au niveau de cet horizon." + chr$(13) t$ = t$ + "Le crépuscule nautique : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 12°." + chr$(13) t$ = t$ + "Le crépuscule civil : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 06°." + chr$(13) t$ = t$ + "Or, il s’est avéré que le fait de se baser sur le crépuscule astronomique (18°) pour le calcul des heures de prière " t$ = t$ + "pose des difficultés pour les pays d’Europe." + chr$(13) t$ = t$ + "Il est impossible de calculer les horaires de la prière du Fajr à partir du 18° et ce à partir de la mi-mai jusqu’à la mi-juin environ."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "L’écart entre le Fajr et celui du lever du soleil (Chourouk) se creuse pour atteindre un record de 3h40 min en période d’été." + chr$(13) t$ = t$ + "L’écart entre la prière de Ichaa et celle du Fajr se réduit durant des semaines en période d’été." + chr$(13) t$ = t$ + "A titre d’exemple : le 28 mai à Paris en se basant sur le 18°, la prière de Ichaa est à 00h18 et la prière du Fajr est à 02h59 !" + chr$(13) t$ = t$ + "Soit un écart de 2h41mn."+chr$(13) t$ = t$ + "Par contre, retenir le critère du 12° (le crépuscule nautique) permet de surmonter ces difficultés." + chr$(13) t$ = t$ + "D’une part, l’écart entre la prière du Fajr et celle du lever du soleil (Chourouk) n’excède jamais 02 heures durant toute l’année."+chr$(13) t$ = t$ + "D’autre part, l’écart entre la prière du Ichaa et celle du Fajr reste constamment importante."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Le fait d'opter pour ce critère du 12° permet d’alléger la contrainte sur les musulmans vivant en Europe pour cette pratique cultuelle " + chr$(13) t$ = t$ + "et surtout durant le mois de Ramadan et spécialement en période d’été." + chr$(13) t$ = t$ + "L’avantage de ce choix réside dans la possibilité de l’utiliser durant toute l’année, à l’inverse de celui du 18°." + chr$(13) t$ = t$ + "Certains pays ajoutent 5 minutes en plus par précaution pour les horaires de Dhohr et du Maghrib" + chr$(13) t$ = t$ + "L’horaire du Asr est calculé selon la règle islamique où l’ombre de chaque objet devient égale à celui-ci." + chr$(13) t$ = t$ + "Mais certains pays utilisent d'autres critères, ce qui ne facilite pas la tâche !" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "En résumé : " + chr$(13) t$ = t$ + "* Prière de l'aube (matin) (Fajr) : Le début coïncide avec la fin du délai de d'Isha, soit lorsque le soleil remonte à 19 ° sous l'horizon." + chr$(13) t$ = t$ + " La fin est atteinte au lever du soleil avec le limbe supérieur du soleil tangent à l'horizon soit h = - 0,267°"+ chr$(13) t$ = t$ + "* Prière de la mi-journée (midi) (Dhur) : la durée permise commence quand le soleil a traversé le méridien (soit quand l'ombre d'un objet a commencé à " t$ = t$ + " augmenter) et se termine lorsque l'ombre d'un gnomon s'est allongée d'un quart de sa hauteur par rapport à son ombre à midi." + chr$(13) t$ = t$ + "* Prière de l'après-midi ('Asr) : l'intervalle commence lorsque l'augmentation de l'ombre est égale à la longueur du gnomon et se termine quand l'ombre en a atteint le double." + chr$(13) t$ = t$ + "* Prière du coucher de soleil (Maghrib) : Le début coïncide avec la disparition totale du soleil sous l'horizon , soit pour h = -0.267°."+chr$(13) t$ = t$ + " La fin du délai est atteinte à la dernière lueur du crépuscule, soit le soleil à 18° sous l'horizon."+chr$(13) t$ = t$ + " Attention, cette condition peut être irréalisable à certaines dates pour certaines latitudes." + chr$(13) t$ = t$ + "* Prière de la nuit ('Isha) : Le début coïncide avec la fin du délai de Maghrib, soit le soleil à 17° sous l'horizon." + chr$(13) t$ = t$ + " La fin du délai est atteinte avec l'apparition de l'aube lorsque le soleil remonte à 19° sous l'horizon." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "Les opinions divergent sur les angles à utiliser pour le calcul de Fajr et Isha." +chr$(13) t$ = t$ + "La mosquée de Paris retient 15° pour Fajr et 18° pour Isha." + chr$(13) + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Pour des plus amples informations sur le calcul des horaires de prière, référez-vous à : " + chr$(13) t$ = t$ + "http://www.averroes-aveyron.fr/medias/files/methodes-de-calcul.pdf" + chr$(13) message t$ END_SUB rem ============================================================================ ' Liste des pays : nom du pays, fuseau horaire du pays et flag pour heure d'été (1 oui, 0 non) data "Algérie" ,1,0 , "Belgique",1,1 ,"Egypte",2,0 , "France",1,1, "Lybie",2,0 data "Maroc",1 , 0, "Arabie Saoudite",3,0 ,"Tunisie",1,0 ' ------------------------------------------------------------------------------ data "Algérie" : ' UTC + 1 ; DST 0 ' ----------- 1: ' Ville Latitude Longitude data "Adrar" , 27.850, -0.317 data "Alger" , 36.833, 3.000 data "Annaba" , 36.917, 7.783 data "Batna" , 35.567, 6.167 data "Bechar" , 31.583, -2.283 data "Bejaia" , 36.817, 5.050 data "Biskra" , 34.833, 5.683 data "Blida" , 36.500, 2.833 data "Boussaada" , 35.167, 4.150 data "Constantine" , 36.367, 6.667 data "El Asnam" , 36.183, 1.350 data "El Djelfa" , 34.717, 3.233 data "Ghardaia" , 32.333, 3.667 data "Laghouat" , 33.817, 2.917 data "Mostaganem" , 35.900, 0.083 data "M'Sila" , 35.667, 4.517 data "Oran" , 35.750, -0.633 data "Ouargla" , 32.000, 5.267 data "Setif" , 36.183, 5.400 data "Sidi-bel-Abbes" , 35.250, -0.650 data "Skikda" , 36.883, 6.900 data "Tamanrasset" , 22.833, 5.467 data "Tebessa" , 35.350, 8.100 data "Tiaret" , 35.333, 1.333 data "Tilimsen" , 34.883, -1.350 data "Tizi-Ouzou" , 36.733, 4.083 data "FIN" ' ------------------------------------------------------------------------------ data "Belgique" : ' UTC + 1 UTC + 2 Heure d'été ' ----------- 2: ' Ville Latitude Longitude data "Antwerp" , 51.217, 4.417 data "Brussels" , 50.850, 4.350 data "Charleroi" , 50.417, 4.450 data "Gent" , 51.033, 3.700 data "Liege" , 50.633, 5.583 data "Ostende" , 51.217, 2.917 data "Mons" , 50.467, 3.967 data "Namur" , 50.467, 4.867 data "FIN" ' ------------------------------------------------------------------------------ data "Egypte" : ' UTC + 2 ' ------------------------------------- 3: ' Ville Latitude Longitude data "Abou Simbel" , 22.317, 31.633 data "Alexandria" , 31.217, 29.917 data "Aswan" , 24.083, 32.933 data "Asyut" , 27.233, 31.117 data "Beni-Souef" , 29.083, 31.083 data "Cairo" , 30.050, 31.250 data "Damanhur" , 31.050, 30.467 data "Dumyat" , 31.433, 31.800 data "El Alamein" , 30.833, 28.950 data "Helwan" , 29.850, 31.333 data "Isma'ilia" , 30.600, 32.250 data "Karnak" , 25.683, 32.667 data "Port Said" , 31.283, 32.300 data "Sohag" , 26.550, 31.700 data "Suez" , 29.983, 32.550 data "Tanta" , 30.800, 31.000 data "Zagazig" , 30.583, 31.500 data "FIN" ' ------------------------------------------------------------------------------- data "France" : ' UTC + 1 UTC + 2 Heure d'été ' ---------- 4: ' Ville Latitude Longitude data "Brest" , 48.383, -4.500 data "Quimper" , 48.000, -4.100 data "Lorient" , 47.750, -3.350 data "St-Brieuc" , 48.517, -2.750 data "Vannes" , 47.667, -2.733 data "St Nazaire" , 47.283, -2.200 data "Rennes" , 48.100, -1.667 data "Cherbourg" , 49.633, -1.617 data "Nantes" , 47.233, -1.583 data "La-Roche-sur-Yon" , 46.633, -1.500 data "Bayonne" , 43.500, -1.467 data "La Rochelle" , 46.167, -1.167 data "St-Lo" , 49.117, -1.083 data "Laval" , 48.067, -0.750 data "Bordeaux" , 44.833, -0.567 data "Angers" , 47.483, -0.533 data "Mont-de-Marsan" , 43.900, -0.500 data "Niort" , 46.317, -0.450 data "Pau" , 43.300, -0.367 data "Caen" , 49.183, -0.367 data "Alençon" , 48.417, 0.083 data "Tarbes" , 43.233, 0.083 data "Le Havre" , 49.500, 0.100 data "Angouleme" , 45.667, 0.167 data "Le Mans" , 48.000, 0.200 data "Poitiers" , 46.583, 0.333 data "Cahors" , 44.467, 0.433 data "Auch" , 43.500, 0.600 data "Agen" , 44.200, 0.633 data "Tours" , 47.383, 0.700 data "Perigueux" , 45.200, 0.733 data "Dieppe" , 49.917, 1.083 data "Rouen" , 49.433, 1.083 data "Evreux" , 49.050, 1.183 data "Limoges" , 45.833, 1.250 data "Montauban" , 44.017, 1.333 data "Blois" , 47.600, 1.333 data "Toulouse" , 43.617, 1.450 data "Chartres" , 48.450, 1.500 data "Foix" , 42.950, 1.583 data "Chateauroux" , 46.817, 1.683 data "Tulle" , 45.267, 1.767 data "Abbeville" , 50.100, 1.850 data "Gueret" , 46.167, 1.866 data "Orleans" , 47.900, 1.900 data "Vierzon" , 47.233, 2.050 data "Pontoise" , 49.050, 2.083 data "Beauvais" , 49.433, 2.083 data "Versailles" , 48.800, 2.133 data "Albi" , 43.933, 2.144 data "Nanterre" , 48.883, 2.217 data "Amiens" , 49.900, 2.300 data "Paris" , 48.833, 2.333 data "Bourges" , 47.083, 2.383 data "Carcassonne" , 43.217, 2.350 data "Dunkerque" , 51.033, 2.383 data "Aurillac" , 44.933, 2.433 data "Bobigny" , 48.917, 2.450 data "Créteil" , 48.783, 2.467 data "Melun" , 48.533, 2.557 data "Evry" , 48.633, 2.567 data "Rodez" , 44.350, 2.567 data "Montlucon" , 46.333, 2.600 data "Arras" , 50.283, 2.767 data "Lens" , 50.433, 2.833 data "Perpignan" , 42.700, 2.900 data "Lille" , 50.650, 3.083 data "Clermont-Ferrand",45.783, 3.083 data "Nevers" , 47.000, 3.150 data "Moulins" , 46.567, 3.333 data "Mende" , 44.533, 3.500 data "Auxerre" , 47.800, 3.583 data "Laon" , 49.567, 3.617 data "Montpellier" , 43.600, 3.883 data "Le Puy" , 45.050, 3.883 data "Avallon" , 47.500, 3.900 data "Reims" , 49.250, 4.033 data "Troyes" , 48.300, 4.083 data "Roanne" , 46.033, 4.083 data "Nimes" , 43.500, 4.350 data "Chalons-S-Marne", 48.967, 4.367 data "St-Etienne" , 45.433, 4.383 data "Privas" , 44.733, 4.600 data "Mezières" , 49.767, 4.733 data "Avignon" , 43.933, 4.800 data "Lyon" , 45.767, 4.833 data "Macon" , 45.300, 4.833 data "Valence" , 44.933, 4.900 data "Dijon" , 47.333, 5.033 data "Chaumont" , 48.117, 5.133 data "Bar-le-Duc" , 48.767, 5.167 data "Bourg" , 46.200, 5.217 data "Observatoire SIRENE" , 44.000, 5.333 data "Marseille " , 43.300, 5.367 data "Lons-le-Saunier", 46.683, 5.550 data "Grenoble" , 45.183, 5.717 data "Toulon" , 43.117, 5.917 data "Chambéry" , 45.567, 5.917 data "Besancon" , 47.250, 5.983 data "Gap" , 44.550, 6.083 data "Annecy" , 45.900, 6.117 data "Metz" , 49.117, 6.183 data "Vesoul" , 47.633, 6.150 data "Nancy" , 48.700, 6.200 data "Digne" , 44.083, 6.233 data "Epinal" , 48.167, 6.467 data "Belfort" , 47.633, 6.867 data "Cannes" , 43.550, 7.000 data "Nice" , 43.700, 7.267 data "Colmar" , 48.083, 7.350 data "Mulhouse" , 47.750, 7.350 data "Strasbourg" , 48.583, 7.750 data "Ajaccio" , 41.917, 8.717 data "Bastia" , 42.683, 9.433 data "FIN" ' ------------------------------------------------------------------------------ data "Libye" :' UTC + 2 ' --------- 5: ' Ville Latitude Longitude data "Sabratah" , 32.833, 12.400 data "Tripoli" , 32.967, 13.200 data "Al Khums" , 32.650, 14.250 data "Sabhah" , 27.050, 14.433 data "Benghazi" , 32.117, 20.083 data "Ajdabiyah" , 30.800, 20.250 data "Al Marj" , 32.500, 20.833 data "Darnah" , 32.767, 22.650 data "Tubruq" , 32.100, 23.933 data "FIN" ' ------------------------------------------------------------------------------
data "Moroc" : ' UTC + 1 ' --------- 6: ' Ville Latitude Longitude data "Agadir" , 30.500, -9.667 data "Safi" , 32.300, -9.333 data "El Jadida" , 33.183, -8.283 data "Marrakech" , 31.817, -8.000 data "Settat" , 33.067, -7.617 data "Casablanca" , 33.650, -7.583 data "Mohammedia" , 33.717, -7.333 data "Khouribga" , 32.900, -6.950 data "Sale" , 34.067, -6.833 data "Kenitra" , 34.333, -6.567 data "Beni Mellal" , 32.367, -6.483 data "Khemisset" , 33.833, -6.050 data "Ksar el Kebir" , 35.067, -5.933 data "Tanger" , 35.800, -5.833 data "Meknes" , 33.883, -5.617 data "Tetouan" , 35.567, -5.367 data "Ceuta" , 35.883, -5.317 data "Fes" , 34.083, -5.000 data "Taza" , 34.267, -4.017 data "Nador" , 35.167, -3.000 data "Oujda" , 34.683, -1.750 data "FIN" ' ------------------------------------------------------------------------------ rem ============================================================================ data "Arabie Saoudite" : ' UTC + 3 ' ---------------- 7: ' Ville Latitude Longitude data "Riyadh" , 24.650, 46.767 data "Al Wajh" , 26.267, 36.467 data "Tabuk" , 28.367, 36.533 data "Yanbu'Al Bahr" , 24.117, 38.067 data "Tayma" , 27.617, 38.500 data "Jiddah" , 21.500, 39.167 data "Khaybar" , 25.800, 39.200 data "Medina" , 24.500, 39.583 data "Mecca" , 21.433, 39.817 data "Al Jawf" , 29.783, 39.867 data "Al Lith" , 20.167, 40.267 data "At Ta'if" , 21.250, 40.350 data "Badanah" , 31.000, 41.083 data "Al Qunfidhah" , 19.150, 41.117 data "Turabah" , 21.250, 41.567 data "Ha'il" , 27.517, 41.750 data "bha" , 18.233, 42.517 data "Jizan" , 16.933, 42.550 data "Buraydah" , 26.333, 43.983 data "Najran" , 17.517, 44.317 data "Shaqra" , 25.300, 45.250 data "Al Artawiyak" , 26.517, 45.350 data "Ad Dilam" , 23.983, 47.100 data "Haradh" , 24.200, 49.117 data "Al Hufuf" , 25.333, 49.567 data "Ad Dammam" , 26.417, 50.100 data "Al Khurmah" , 21.917, 42.033 data "FIN" ' ------------------------------------------------------------------------------ Data "Tunisie" : ' UTC + 1 ' ----------- 8: ' Ville Latitude Longitude data "Gafsa" , 34.467, 8.717 data "Beja" , 36.717, 9.217 data "Bizerte" , 37.300, 9.867 data "Kairouan" , 35.700, 10.017 data "Gabes" , 33.867, 10.100 data "Tunis" , 36.833, 10.217 data "Sousse" , 35.833, 10.633 data "Sfax" , 34.750, 10.717 data "Nabeul" , 36.500, 10.733 data "Moknine" , 35.633, 10.833 data "Monastir", 35.777, 10.826 data "Mahdia" , 35.502, 11.045 data "Jendouba" , 35.501, 08.783 data "Le Kef" , 36.179, 08.714 data "Siliana" , 35.990, 09.278 data "Ariana" , 36.862, 10.195 data "Ben Arous" , 36.743, 10.232 data "Kasserine" , 35.171, 08.828 data "Kebili" , 33.124, 08.836 data "La Manouba" , 36.807, 10.101 data "Medenine" , 33.348, 10.494 data "Sidi Bouzid" , 35.033, 09.5 data "Tataouine" , 32.921, 10.450 data "Zaghouan" , 36.399, 10.147 data "La Soukra" , 36.883, 10.25 data "La Marsa" , 36.876, 10.325
data "FIN" rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&& FIN DU CODE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculateur des heures de prière. Ven 3 Mai 2019 - 10:24 | |
| Bonjour Papydall ! Sauf erreur de ma part, je pense que la fonction moreLess360 peut être remplacée par la fonction Panoramic WRAP_VALUE(). | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Ven 3 Mai 2019 - 23:51 | |
| C’est tout à fait exact, Marc. Nouvelle version : Remplacement de moreLess360() par WRAP_VALUE() et ajout d’un gadget pour afficher la date (prononcée par Virginie si vous avez déjà installé la voix française. ) - Code:
-
rem ============================================================================ rem CalcPrayerTimes.bas rem Calculateur des heures de prière par Papydall rem Version 3.3 rem Dernière modification : 04 Mai 2019 rem ============================================================================ Demarrer() end rem ============================================================================ SUB Demarrer() Init() Gui() Afficher_Kibla() Grille(NbJours(month,year)) Run() on_timer 720,Afficher_Horloge Parler() END_SUB rem ============================================================================ SUB Init() label clic, change, Afficher_Horloge label 1, 2, 3, 4, 5, 6, 7, 8 : ' pour restore_label dim year, month, day dim longitude, latitude, timeZone,fajrTwilight, ishaTwilight dim fajrTime, sunRiseTime, zuhrTime, asrTime, maghribTime, ishaTime dim d, l, m, lambda, obliquity, alfa, st, dec, durinal_Arc, noon, Ut_Noon dim Asr_Alt, Asr_Arc, Esha_Arc, Fajr_Arc dim prayTime$(5), standard,nc dim hours, minutes ,h$, m$, a, n, dst, methode, p$, ville$, pays$ dim NbPays : NbPays = 8 : ' 8 c'est le nombre des pays proposés dans le programme dim Fuseau(NbPays), H_Ete(NbPays) standard = 1 : ' Pour le calcul du Asr : 1 ---> (Shafii, Maliki, Hanbali) ' 0 ---> Hanafi day = date_day : month = date_month : year = date_year : ' La date courante END_SUB rem ============================================================================ SUB GUI() dim_local i,t$ t$ = " Calculateur des heures de prière par Papydall " color 0,240,255,255 width 0,1100 : height 0,800 : top 0,(screen_y - height(0)) / 2 left 0,(screen_x - width(0))/2 shape 5 : top 5,5 : left 5,450 : width 5,600 : height 5,50 shape_rectangle_rounded 5 : color 5,25,100,50 shape 6 : top 6,5 : left 6,20 : width 6,420 : height 6,50 shape_rectangle_rounded 6 : color 6,25,100,50 alpha 10 : top 10,20 : left 10,40 : font_color 10,250,100,50 font_bold 10 : font_name 10,"tahoma" : font_size 10,12 caption 10,t$ : caption 0,t$ : application_title t$ alpha 20 : top 20,80 : left 20,010 : caption 20,"Latitude : " edit 21 : top 21,80 : left 21,070 : width 21,60 : font_bold 21 : text 21,"35.633" hint 21,"En degrés décimaux (± 90°) positive au Nord" : on_change 21,change alpha 30 : top 30,80 : left 30,140 : caption 30,"Longitude : " edit 31 : top 31,80 : left 31,210 : width 31,60 : font_bold 31 : text 31,"10.833" hint 31,"En degrés décimaux (± 180°) positive à l'est" : on_change 31,change alpha 40 : top 40,80 : left 40,285 : caption 40,"Fuseau :" spin 41 : top 41,80 : left 41,335 : width 41,60 : min 41,-12 : max 41,12 : font_bold 41 hint 41,"ZoneTime, décalage heure : Valeurs possibles ± 12" : position 41,1 on_change 41,change alpha 45 : top 45,80 : left 45,420 : caption 45,"DST :" : font_bold 45 : font_name 45,"tahoma" combo 46 : top 46,80 : left 46,450 : width 46,50 : hint 46,"Heure d'été" on_change 46,change alpha 50 : top 50,80 : left 50,520 : caption 50,"Méthode :" combo 51 : top 51,80 : left 51,580 : width 51,480 : font_bold 51 : height 51,40 font_name 51,"tahoma" : on_change 51,change hint 51,"convention de calcul utilisé" alpha 55 : top 55,130 : left 55,10 : font_bold 55 : font_name 55,"tahoma" caption 55,"Calcul Asr :" combo 56 : top 56,130 : left 56,80 : font_bold 56 : font_name 56,"tahoma" width 56,220 : hint 56,"Doctrines religieuses" : on_change 56,change item_add 56,"Standard (Shafii, Maliki, Hanbali)" item_add 56,"Hanafi" : item_select 56,1 button 60 : top 60,20 : left 60,950 : caption 60,"Quitter" on_click 60,clic button 70 : top 70,20 : left 70,470 : caption 70,"Calculer" on_click 70,clic : inactive 70 button 80 : top 80,120 : left 80,500 : font_bold 80 : font_name 80,"wingdings 2" font_size 80,30 : caption 80,"D" : hint 80,"Mois précédent" : on_click 80,clic button 90 : top 90,120 : left 90,760 : font_bold 90 : font_name 90,"wingdings 2" font_size 90,30 : caption 90,"E" : hint 90,"Mois suivant" : on_click 90,clic alpha 100: top 100,130 : left 100,630 : font_bold 100 : font_name 100,"arial" font_size 100,12 : caption 100,Month_Name$(month) + " " + str$(year) item_add 46,0 : item_add 46,1 : item_select 46,1 for i = 1 to 17 : read t$ : item_add 51,t$ : next i item_select 51,14 for i = 20 to 70 step 10 : font_bold i : font_name i,"tahoma" : next i alpha 110 : top 110,180 : left 110,10 : font_bold 110 : font_size 110,12 font_name 110,"tahoma" : font_color 110, 255,0,0 : caption 110,"Pays : Tunisie" alpha 120 : top 120,180 : left 120,220 : font_bold 120 : font_size 120,12 font_name 120,"tahoma" : font_color 120, 255,0,0 : caption 120,"Ville : Moknine" alpha 130 : top 130,230 : left 130,10 : font_bold 130 : font_name 130,"tahoma" font_size 130,12 : font_color 130,0,0,255 : caption 130,"Choix Pays / Villes" alpha 140 : top 140,260 : left 140,60 : font_bold 140 : font_name 140,"Wingdings" font_size 140,30 : caption 140,"ê" button 150 : top 150,20 : left 150,600 : font_bold 150 : caption 150,"Aide" : on_click 150,clic button 160 : top 160,20 : left 160,740 : font_bold 160 : width 160,150 caption 160,"Pour votre culture" : on_click 160,clic container_option 200 : top 200,300 : left 200,10 : width 200,130 : height 200,35*NbPays +10 color 200,255,255,0 for i = 1 to NbPays option 200+i : parent 200+i,200 : top 200+i,30*i : left 200+i,10 font_bold 200+i : font_name 200+i,"tahoma" : on_click 200+i,clic read p$ : caption 200+i,p$ read fuseau(i) : read H_Ete(i) next i combo 300 : top 300,300 : left 300,160 font_bold 300 : width 300,300 : hide 300 : on_change 300,change picture 400 : top 400,450 : left 400,170 : width 400,300 : height 400,300 2d_target_is 400 : print_target_is 400 alpha 410 : top 410,600 : left 410,10 : font_bold 410 : font_name 410,"tahoma" font_size 410,10 : font_color 410,255,0,0 t$ = "Direction de la Kibla" + chr$(13) + "depuis Moknine" + chr$(13) + "Tunisie : " caption 410,t$ hint 410,"Angle en ° à partir du Nord" +chr$(13)+"indiquant la direction de la Kibla" alpha 420 : top 420,630 : left 420,130 : font_bold 420 : font_name 420,"tahoma' font_size 420,12 : font_color 420,0,0,0 alpha 430 : top 430, 680 : left 430,1 : font_bold 430 : font_name 430,"tahoma" font_size 430,10 : font_color 430,0,0,255 hint 430,"Distance de la Mecque" alpha 500 : top 500,180+17*date_day : left 500,470 : font_name 500,"Wingdings" font_bold 500 : font_size 500,20 : font_color 500,255,0,0 : caption 500,"F" alpha 510 : top 510,180+17*date_day : left 510,840 : font_name 510,"Wingdings" font_bold 510 : font_size 510,20 : font_color 510,255,0,0 : caption 510,"E" hint 500,"Jour courant" : hint 510,"Jour courant" shape 599 : top 599,280 : left 599,870 : width 599,210 : height 599,250 shape_rectangle_rounded 599 : color 599,0,0,0 alpha 600 : top 600,310 : left 600,880 : font_color 600,255,255,0 font_italic 600 : color 600,20,100,20 : font_bold 600 : font_size 600,12 caption 600," NOUS SOMMES LE : " alpha 610 : top 610,340 : left 610,910 : font_color 610,255,0,0 font_italic 610 : color 610,255,255,0 : font_bold 610 : font_size 610,18 alpha 700 : top 700,430 : left 700, 940 : font_color 700,255,255,0 font_italic 700 : color 700,20,100,20 : font_bold 700 : font_size 700,12 caption 700,"IL EST :" alpha 710 : top 710,460 : left 710,930 : font_color 710,255,0,0 font_italic 710 : color 710,255,255,0 : font_bold 710 : font_size 710,18 caption 610,date$ : caption 710,time$ timer 720 END_SUB rem ============================================================================ Afficher_Horloge: caption 610,date$ : caption 710,time$ return rem ============================================================================ SUB Parler() timer_off 720 file_open_write 9999,"parler.vbs" file_writeln 9999,"Dim speaks, speech" file_writeln 9999,"speaks="+chr$(34)+ "Bonjour ! cher utilisateur. Nous sommes, le " + chr$(34) + "& date()" file_writeln 9999,"Set speech=CreateObject("+chr$(34)+"sapi.spvoice"+chr$(34)+")" file_writeln 9999,"speech.Speak speaks" file_writeln 9999,"speaks="+chr$(34)+"Il est,"+chr$(34)+"& time()" file_writeln 9999,"speech.Speak speaks" file_close 9999 execute_wait "parler.vbs" file_delete "parler.vbs" timer_on 720 END_SUB rem ============================================================================ ' Formule donnant la distance orthdromique entre deux points du globle exprimés ' par leurs coordonnées (latitude et longitude) ' La formule est donnée en assimilant la Terre à une sphère de 40 000 km de circonférence. ' 1.852 : c'est la valeur en km de un mille marin ' 60 : ce nombre provient du fait que le mille marin (1 852 m) correspond à une ' minute d'arc sur un grand cercle de la surface terrestre, et donc 60 milles ' marins correspondent à un degré. FNC Distance_Orthodromique(lat1,lon1) dim_local lat2,lon2,km,d lat2 = 21.433 : lon2 = 39.817 : ' Coordonnées de la Mecque degrees km = 60*1.852 d = km*acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1)) d = int(d) result d END_FNC rem ============================================================================ ' Fonction de calcul de la Kibla ' Elle retourne l'angle partant de la direction du nord et compté dans le sens ' rétrograde (sens des aiguilles d'une montre) FNC Kibla(latitude,longitude) dim_local Lat_Meq : ' Latitude de la Mecque dim_local Lon_Meq : ' Longitude de la Mecque dim_local a,b,c,q,n,d Lat_Meq = 21.433 : Lon_Meq = 39.817 a = Lon_Meq - longitude : b = latitude :c = Lat_Meq degrees n = sin(a) :d = cos(b) * tan(c) - sin(b) * cos(a) if d = 0 then result 0 : exit_fnc q = atn(n/d) if sgn(n) <> sgn(q) then q = q + 180 if (sgn(n) < 0) and (sgn(q) < 0) then q = q + 360 result int(q) END_FNC rem ============================================================================ SUB Afficher_Kibla() dim_local la,lo,xc,yc,r,x,y,a,a1,c$,d degrees la = val(text$(21)) : lo = val(text$(31)) xc = width(400)/2 : yc = height(400) / 2 : r = xc-20 color 400,20,100,20 : font_color 400,255,255,0 : font_bold 400 : font_size 400,10 2d_fill_color 200,100,020 : 2d_circle xc,yc,r 2d_pen_width 2 for a = 0 to 360 step 10 : 2d_line xc,yc,xc+r*cos(a),yc+r*sin(a) : next a 2d_fill_color 255,255,255 : 2d_circle xc,yc,r-10 2d_fill_color 0,0,0 : 2d_circle xc,yc,5 a = Kibla(la,lo) : r = r-15 : x = xc+r*cos(a-90) : y = yc+r*sin(a-90) 2d_pen_width 2 : 2d_line xc,yc,x,y r = r-15 for a1 = a-80 to a-100 step -1 : 2d_poly_to xc+r*cos(a1),yc+r*sin(a1) : next a1 2d_poly_to x,y : 2d_fill_color 20,100,20 print_locate xc-4,2 : print "N" print_locate 2*xc-15,yc-10 : print "E" print_locate xc-4,2*yc-20 : print "S" print_locate 5,yc-10 : print "W" d = Distance_Orthodromique(la,lo) caption 420, str$(a) + "°" caption 430, "Distance orthodromique :" + chr$(13) + str$(d) + " km" END_SUB rem ============================================================================ ' Tracer une grille en fonction du nombre des jours dans le mois en cours SUB Grille(n) grid 1 : top 1,180 : left 1,500 : width 1,342 : height 1,n*18-8 : grid_row 1,n+1 grid_row_fixed 1,1 : grid_row_height 1,16 grid_column 1,7 : grid_column_fixed 1,1 : grid_column_width 1,50 : font_bold 1 grid_fixed_color 1,255,255,0 : grid_one_column_width 1,1,30 color 1,0,255,255 grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" END_SUB rem ============================================================================ SUB Run() dim_local nb nb = NbJours(month,year) for n = 1 to Nb : Go(n) : Affiche(n) : next n END_SUB rem ============================================================================ Change: timer_off 720 active 70 : caption 420,"": off_change 300 for nc = 21 to 41 step 10 : off_change nc : next nc for nc = 46 to 56 step 10 : off_change nc : next nc if item_index(56) = 1 then standard = 1 : else : standard = 0 select number_change case 21 : if text$(21) = "" then text 21,0 case 31 : if text$(31) = "" then text 31,0 case 41 : if text$(41) = "" then text 41,0 if abs(val(text$(41))) > 12 then text 41,0 case 46 : if (text$(46) <> "0") or (text$(46) <> "1") then text 46,0 case 51 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 56 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() case 300 : New_Coord() end_select for nc = 21 to 41 step 10 : on_change nc,change : next nc for nc = 46 to 56 step 10 : on_change nc,change : next nc on_change 300,change : timer_on 720 return rem ============================================================================ ' Gestion des clics de l'utilisateur Clic: timer_off 720 for nc = 60 to 90 step 10 : off_click nc : next nc for nc = 150 to 160 step 10 : off_click nc : next nc for nc = 201 to 208 : off_click nc : next nc if number_click > 200 then caption 140,"ê î" select number_click case 060 : if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate case 070 : for n = 1 to NbJours(month,year) Go(n) : Affiche(n) : ' Calculer next n Afficher_Kibla() : inactive 70 case 080 : Mois_Precedant() case 090 : Mois_Suivant() case 150 : Aide() case 160 : Culture() case 201 : restore_label 1 : pays$ = "Algérie" : List_Ville(number_click-200) case 202 : restore_label 2 : pays$ = "Belgique" : List_Ville(number_click-200) case 203 : restore_label 3 : pays$ = "Egypte" : List_Ville(number_click-200) case 204 : restore_label 4 : pays$ = "France" : List_Ville(number_click-200) case 205 : restore_label 5 : pays$ = "Lybie" : List_Ville(number_click-200) case 206 : restore_label 6 : pays$ = "Maroc" : List_Ville(number_click-200) case 207 : restore_label 7 : pays$ = "Arabie Saoudite": List_Ville(number_click-200) case 208 : restore_label 8 : pays$ = "Tunisie" : List_Ville(number_click-200) end_select for nc = 60 to 90 step 10 : on_click nc,clic : next nc for nc = 150 to 160 step 10 : on_click nc,clic : next nc for nc = 201 to 208 : on_click nc,clic : next nc timer_on 720 return rem ============================================================================ SUB Go(day) calcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) NumberToHrMin(fajrTime) : prayTime$(0) = h$ + ":" + m$ NumberToHrMin(SunRiseTime) : prayTime$(1) = h$ + ":" + m$ NumberToHrMin(zuhrTime) : prayTime$(2) = h$ + ":" + m$ NumberToHrMin(AsrTime) : prayTime$(3) = h$ + ":" + m$ NumberToHrMin(MaghribTime) : prayTime$(4) = h$ + ":" + m$ if (item_index(51) = 15) or (item_index(51) = 16) NumberToHrMin(MaghribTime + 1.5) prayTime$(5) = h$ + ":" + m$ else NumberToHrMin(IshaTime) : prayTime$(5) = h$ + ":" + m$ end_if END_SUB rem ============================================================================ SUB New_Coord() dim_local t$,t1$,p t$ = item_read$(300,item_index(300)) p = instr(t$,":") : ville$ = left$(t$,p-1) : t$ = mid$(t$,p+1,20) p = instr(t$,"/") : t1$ = mid$(t$,p+1,20) : t$ = left$(t$,p-1) text 21,t$ : text 31,t1$ caption 110,"Pays : " + pays$ : caption 120,"Ville : " + ville$ t$ = "Direction de la Qibla" + chr$(13) + "depuis " t1$ = ville$ + chr$(13) + pays$ + " : " caption 410,t$ + t1$ grid_clear 1,NbJours(month,year)+1 ,7 END_SUB rem ============================================================================ SUB List_Ville(p) clear 300 position 41,fuseau(p) item_select 46,H_Ete(p) + 1 read ville$ while ville$ <> "FIN" ville$ = ville$ + " : " read latitude : read longitude item_add 300,ville$ + str$(latitude) + " / " + str$(longitude) read ville$ end_while item_select 300,1 : sort_on 300 : show 300 : inactive 70 END_SUB rem ============================================================================ ' Ramener la valeur de value entre 0 et 24 FNC moreLess24(value) while (value > 24) or (value < 0) if value > 24 value = value - 24 else if value < 0 value = value + 24 end_if end_if end_while result value END_FNC rem ============================================================================ ' convertir le nombre number en heurs et Minutes SUB NumberToHrMin(number) if number = -1 then h$ = "--" : m$ = "--" : exit_sub hours = int(moreLess24(number)) minutes = int(moreLess24(number - hours) * 60) h$ = str$(hours) : m$ = str$(minutes) if len(h$) < 2 then h$ = "0" + h$ if len(m$) < 2 then m$ = "0" + m$ END_SUB rem ============================================================================ FNC Month_Name$(mois) dim_local m$ select mois case 01 : m$ = "Janvier" case 02 : m$ = "Février" case 03 : m$ = "Mars" case 04 : m$ = "Avril" case 05 : m$ = "Mai" case 06 : m$ = "Juin" case 07 : m$ = "Juillet" case 08 : m$ = "Août" case 09 : m$ = "Septembre" case 10 : m$ = "Octobre" case 11 : m$ = "Novembre" case 12 : m$ = "Décembre" end_select result m$ END_FNC rem ============================================================================ ' Fonction qui retourne 1 si l'argument (annee) représente une année bisextile ' 0 sinon FNC Bisextile(annee) if (mod(annee,4) = 0) and ((mod(annee,100) <> 0) or (mod(annee,400) = 0)) result 1 else result 0 end_if END_FNC rem ============================================================================ ' Déterminer le nombre de jours dans un mois (mois) pour une année (annee) FNC NbJours(mois,annee) dim_local n select mois case 01 : n = 31 case 02 : n = 28 : if bisextile(annee) > 0 then n = n + 1 case 03 : n = 31 case 04 : n = 30 case 05 : n = 31 case 06 : n = 30 case 07 : n = 31 case 08 : n = 31 case 09 : n = 30 case 10 : n = 31 case 11 : n = 30 case 12 : n = 31 end_select result n END_FNC rem ============================================================================ SUB Mois_Precedant() dim_local n,nb month = month-1 if month < 1 then month = 12 : year = year - 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Mois_Suivant() dim_local n,nb month = month+1 if month > 12 then month = 1 : year = year + 1 caption 100,Month_Name$(month) + " " + str$(year) nb = NbJours(month,year) delete 1 : Grille(nb) Run() END_SUB rem ============================================================================ SUB Affiche(n) dim_local i grid_write 1,1,1,"Jour" grid_write 1,1,2," Farjr" grid_write 1,1,3,"Sunrise" grid_write 1,1,4," Dhuhr" grid_write 1,1,5," Asr" grid_write 1,1,6,"Maghrib" grid_write 1,1,7," Isha" for i = 1 to n : grid_write 1,i+1,1,str$(i) : next i for i = 0 to 5 : grid_write 1,n+1,i+2,prayTime$(i) : next i inactive 70 END_SUB rem ============================================================================ ' Méthodes du calcul selon différentes Ecoles data "Algerian Minister of Religious Affairs and Wakfs : Fajr: 18.0° - Isha'a: 17.0°" data "Egyptian General Authority : Fajr: 19.5° - Isha'a: 17.5°" data "Egyptian General Authority (Bis) : Fajr: 20.0° - Isha'a: 18.0°" data "France UOIF - Angle 12° : Fajr: 12.0° - Isha'a: 12.0°" data "France - Angle 15° : Fajr: 15.0° - Isha'a: 15.0°" data "France - Angle 18° : Fajr: 18.0° - Isha'a: 18.0°" data "Islamic University, Karachi : Fajr: 18.0° - Isha'a: 18.0°" data "JAKIM (Jabatan Kemajuan Islam Malaysia) : Fajr: 20.0° - Isha'a: 18.0°" data "MUIS (Majlis Ugama Islam Singapura : Fajr: 20.0° - Isha'a: 18.0°" data "Muslim World League (MWL) : Fajr: 18.0° - Isha'a: 17.0°" data "North America (ISNA) : Fajr: 15.0° - Isha'a: 15.0°" data "Shia Ithna Ashari (Jafari) : Fajr: 16.0° - Isha'a: 14.0°" data "SIHAT/KEMENAG (Kementerian Agama RI) : Fajr: 20.0° - Isha'a: 18.0°" data "Tunisian Ministry of Religious Affairs : Fajr: 18.0° - Isha'a: 18.0°" data "General Authority of Islamic Affairs And Endowments : Fajr: 19.5° - Isha'a: 90 min" data "Umm Al-Qura, Makkah : Fajr: 18.5° - Isha'a: 90 min" data "University of Tehran : Fajr: 17.7° - Isha'a: 15.0°" rem ============================================================================ ' C'est la procédure qui fait tous les calculs SUB CalcPrayerTimes(day,month,year,fajrTwilight,ishaTwilight) latitude = val(text$(21)) : longitude = val(text$(31)) : TimeZone = val(text$(41)) dst = val(text$(46)) radians select item_index(51) case 01 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Algerian Minister of Religious Affairs and Wakfs case 02 : FajrTwilight = -19.5 : ishaTwilight = -17.5 : ' Egyptian General Authority case 03 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' Egyptian General Authority (Bis) case 04 : FajrTwilight = -12.0 : ishaTwilight = -12.0 : ' France UOIF - Angle 12° case 05 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' France - Angle 15° case 06 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' France - Angle 18° case 07 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Islamic University, Karachi case 08 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' JAKIM (Jabatan Kemajuan Islam Malaysia) case 09 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' MUIS (Majlis Ugama Islam Singapura case 10 : FajrTwilight = -18.0 : ishaTwilight = -17.0 : ' Muslim World League (MWL) case 11 : FajrTwilight = -15.0 : ishaTwilight = -15.0 : ' North America (ISNA) case 12 : FajrTwilight = -16.0 : ishaTwilight = -14.0 : ' Shia Ithna Ashari (Jafari) case 13 : FajrTwilight = -20.0 : ishaTwilight = -18.0 : ' SIHAT/KEMENAG (Kementerian Agama RI) case 14 : FajrTwilight = -18.0 : ishaTwilight = -18.0 : ' Tunisian Ministry of Religious Affairs case 15 : FajrTwilight = -19.5 : ' Isha'a: 90 min : ' UAE General Authority of Islamic Affairs And Endowments case 16 : FajrTwilight = -18.5 : ' Isha'a: 90 min : ' Umm Al-Qura, Makkah case 17 : FajrTwilight = -17.7 : ishaTwilight = -15.0 : ' University of Tehran end_select D = (367 * year) - ((year + int((month + 9) / 12)) * 7 / 4) + ((int(275 * month / 9)) + day - 730531.5) L = 280.461 + 0.9856474 * D : L = wrap_value(L) M = 357.528 + (0.9856003) * D : M = wrap_value(M) Lambda = L + 1.915 * sin(degree_To_Radian(M)) + 0.02 * sin(degree_To_Radian(2 * M)) Lambda = wrap_value(Lambda) Obliquity = 23.439 - 0.0000004 * D Alfa = radian_to_degree(atn((cos(degree_to_radian(Obliquity)) * tan(degree_To_Radian(Lambda))))) Alfa = wrap_value(Alfa) Alfa = Alfa - (360 * (int(Alfa / 360))) Alfa = Alfa + 90 * (int(Lambda / 90) - int(Alfa / 90)) ST = 100.46 + 0.985647352 * D Dec = radian_To_Degree(asin(sin(degree_To_Radian(Obliquity)) * sin(degree_To_Radian(Lambda)))) a = (sin(degree_To_Radian(-0.8333)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 : ' le soleil ne se couche pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Durinal_Arc = radian_To_Degree(acos((sin(degree_To_Radian(-0.8333)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) Noon = Alfa - ST Noon = wrap_value(Noon) UT_Noon = Noon - longitude ' ------------------------------------------------------------------------------ ' Calculating Prayer Times Arcs & Times ' ------------------------------------------------------------------------------ ' Zuhr Time (Local noon) zuhrTime = UT_Noon / 15 + timeZone + dst if standard = 1 : ' Asr Standard (Shafii, Maliki, Hanbali) Asr_Alt = radian_To_Degree(atn(1 + tan(degree_To_Radian(abs(latitude - Dec))))) else : ' Asr Hanafi Asr_Alt = radian_To_Degree(atn(2 + tan(degree_To_Radian(abs(latitude - Dec))))) end_if a = (sin(degree_To_Radian(90 - Asr_Alt)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Asr_Arc = radian_To_Degree(acos((sin(degree_To_Radian(90 - Asr_Alt)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) Asr_Arc = Asr_Arc / 15 ' Asr Time asrTime = zuhrTime + Asr_Arc ' Shorouq Time sunRiseTime = zuhrTime - (Durinal_Arc / 15) ' Maghrib Time maghribTime = zuhrTime + (Durinal_Arc / 15) a = (sin(degree_To_Radian(ishaTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 : ' le soleil ne se lève pas FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Esha_Arc = radian_To_Degree(acos((sin(degree_To_Radian(ishaTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) ' Isha Time ishaTime = zuhrTime + (Esha_Arc / 15) ' Fajr Time a = (sin(degree_To_Radian(fajrTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))) if abs(a) > 1 FajrTime = -1 : sunRiseTime = -1 asrTime = -1 : maghribTime = -1 : ishaTime = -1 exit_sub end_if Fajr_Arc = radian_To_Degree(acos((sin(degree_To_Radian(fajrTwilight)) - sin(degree_To_Radian(Dec)) * sin(degree_To_Radian(latitude))) / (cos(degree_To_Radian(Dec)) * cos(degree_To_Radian(latitude))))) fajrTime = zuhrTime - (Fajr_Arc / 15) END_SUB rem ============================================================================ SUB Aide() dim_local t$ t$ = "Aide sur le programme" + chr$(13) t$ = t$ + "Au lancement du programme, il affiche les résultats du calcul pour la ville de Moknine (Tunisie) pour le mois en cours" + chr$(13) t$ = t$ + "et propose comme méthode de calcul (dans le COMBO Méthode) celle appliquée en Tunisie (Tunisian Ministry of Religious)" + chr$(13) t$ = t$ + "Pour les autres pays, vous pouvez opter pour l'une des métodes proposées dans le COMBO, surtout si votre ville se situe aux" + chr$(13) t$ = t$ + "altitudes supérieures à 45°"+chr$(13) t$ = t$ + "Il propose un choix parmi 8 pays qui vous permettent d'en choisir une ville parmi celles qui sont proposées." + chr$(13) t$ = t$ + "Si votre ville ne s'y trouve pas, vous avez la possibilité d'entrer manuellement ses coordonnées (Latitude, Longitude, Fuseau, DST)" + chr$(13) t$ = t$ + "Vous pouvez aussi l'ajouter dans le code dans les lignes DATA." + chr$(13) t$ = t$ + "En optant pour l'un des pays proposé, vous activez un COMBO vous permettant de choisir une ville." + chr$(13) t$ = t$ + "Le COMBO DST c'est pour le choix de l'heure d'été (valeurs possibles : 0 pas de passage; 1 passage à l'heure d'été." + chr$(13) t$ = t$ + "Les boutons 'main' indiquant la gauche c'est pour le mois précédent, tandis que celle qui indique la droite c'est pour le mois suivant." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Après chaque modification et pour lancer un nouveau calcul,cliquez sur le bouton 'Calculer' (La Palice ne peut pas dire mieux !)" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "L’horaire de la prière de Ichaa correspond à la disparition du crépuscule (12° à 18°) après le coucher du Soleil." + chr$(13) t$ = t$ + "L'Arabie Saoudite, par exemple ajoute 90 mn à l'heure du Maghrib pour obtenir celle du Icha"+ chr$(13) t$ = t$ + " et ajoute 120 mn pour le mois de Ramadan."+ chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Pour information :" + chr$(13) t$ = t$ + "******************" + chr$(13) t$ = t$ + "La définition de l'heure du salat Asr divise les écoles islamiques en deux positions dogmatiques." + chr$(13) t$ = t$ + "Les trois écoles juridiques Malikite, Hambalite et Shafite soutiennent que le Asr commence lorsque la taille d'un objet vertical est la taille de son ombre." + chr$(13) t$ = t$ + "Cette méthode est celle adoptée généralement dans les communautés du Maghreb (d'obédience Malikite)." + chr$(13) t$ = t$ + "La quatrième école Hanafite estime que le Asr commence lorsque l'ombre d'un objet vertical est le double de la taille de cet objet."+chr$(13) t$ = t$ + "Cette nette différence dogmatique entraîne des écarts dans les horaires de salat sur les calendriers correspondant à un même endroit." + chr$(13) t$ = t$ + "Le programme vous permet de choisir votre doctrine réligieuse (Madh-hab) dans le COMBO 'Calcul Asr'. " + chr$(13) t$ = t$ + chr$(13) + chr$(13) t$ = t$ + "Le programme est fourni comme tel sans aucune garantie des résultats."+chr$(13) t$ = t$ + "En aucun cas je ne serais responsable de dommages résultants de l'utilisation de cette application." message t$ END_SUB rem ============================================================================ SUB Culture() dim_local t$ t$ = "Méthode de calcul des horaires de prières" + chr$(13) t$ = t$ + "Les prières (pour les Musulmans) sont au nombre de cinq par journée." + chr$(13) t$ = t$ + "Les horaires de ces cinq prières varient d'un endroit (ville) à l'autre et d'un jour à l'autre." + chr$(13) t$ = t$ + "Le calcul fait intervenir les heures du crépuscule, mais lequel ?" + chr$(13) t$ = t$ + "Il existe trois types de crépuscules : " + chr$(13) t$ = t$ + "Le crépuscule astronomique : il intervient lorsque le soleil se situe " t$ = t$ + "en dessous de l’horizon à une hauteur de 18°, et il correspond au moment" + chr$(13) t$ = t$ + "où l’obscurité totale s’installe au niveau de cet horizon." + chr$(13) t$ = t$ + "Le crépuscule nautique : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 12°." + chr$(13) t$ = t$ + "Le crépuscule civil : il intervient lorsque le soleil se situe en dessous de l’horizon à une hauteur de 06°." + chr$(13) t$ = t$ + "Or, il s’est avéré que le fait de se baser sur le crépuscule astronomique (18°) pour le calcul des heures de prière " t$ = t$ + "pose des difficultés pour les pays d’Europe." + chr$(13) t$ = t$ + "Il est impossible de calculer les horaires de la prière du Fajr à partir du 18° et ce à partir de la mi-mai jusqu’à la mi-juin environ."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "L’écart entre le Fajr et celui du lever du soleil (Chourouk) se creuse pour atteindre un record de 3h40 min en période d’été." + chr$(13) t$ = t$ + "L’écart entre la prière de Ichaa et celle du Fajr se réduit durant des semaines en période d’été." + chr$(13) t$ = t$ + "A titre d’exemple : le 28 mai à Paris en se basant sur le 18°, la prière de Ichaa est à 00h18 et la prière du Fajr est à 02h59 !" + chr$(13) t$ = t$ + "Soit un écart de 2h41mn."+chr$(13) t$ = t$ + "Par contre, retenir le critère du 12° (le crépuscule nautique) permet de surmonter ces difficultés." + chr$(13) t$ = t$ + "D’une part, l’écart entre la prière du Fajr et celle du lever du soleil (Chourouk) n’excède jamais 02 heures durant toute l’année."+chr$(13) t$ = t$ + "D’autre part, l’écart entre la prière du Ichaa et celle du Fajr reste constamment importante."+chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Le fait d'opter pour ce critère du 12° permet d’alléger la contrainte sur les musulmans vivant en Europe pour cette pratique cultuelle " + chr$(13) t$ = t$ + "et surtout durant le mois de Ramadan et spécialement en période d’été." + chr$(13) t$ = t$ + "L’avantage de ce choix réside dans la possibilité de l’utiliser durant toute l’année, à l’inverse de celui du 18°." + chr$(13) t$ = t$ + "Certains pays ajoutent 5 minutes en plus par précaution pour les horaires de Dhohr et du Maghrib" + chr$(13) t$ = t$ + "L’horaire du Asr est calculé selon la règle islamique où l’ombre de chaque objet devient égale à celui-ci." + chr$(13) t$ = t$ + "Mais certains pays utilisent d'autres critères, ce qui ne facilite pas la tâche !" + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "En résumé : " + chr$(13) t$ = t$ + "* Prière de l'aube (matin) (Fajr) : Le début coïncide avec la fin du délai de d'Isha, soit lorsque le soleil remonte à 19 ° sous l'horizon." + chr$(13) t$ = t$ + " La fin est atteinte au lever du soleil avec le limbe supérieur du soleil tangent à l'horizon soit h = - 0,267°"+ chr$(13) t$ = t$ + "* Prière de la mi-journée (midi) (Dhur) : la durée permise commence quand le soleil a traversé le méridien (soit quand l'ombre d'un objet a commencé à " t$ = t$ + " augmenter) et se termine lorsque l'ombre d'un gnomon s'est allongée d'un quart de sa hauteur par rapport à son ombre à midi." + chr$(13) t$ = t$ + "* Prière de l'après-midi ('Asr) : l'intervalle commence lorsque l'augmentation de l'ombre est égale à la longueur du gnomon et se termine quand l'ombre en a atteint le double." + chr$(13) t$ = t$ + "* Prière du coucher de soleil (Maghrib) : Le début coïncide avec la disparition totale du soleil sous l'horizon , soit pour h = -0.267°."+chr$(13) t$ = t$ + " La fin du délai est atteinte à la dernière lueur du crépuscule, soit le soleil à 18° sous l'horizon."+chr$(13) t$ = t$ + " Attention, cette condition peut être irréalisable à certaines dates pour certaines latitudes." + chr$(13) t$ = t$ + "* Prière de la nuit ('Isha) : Le début coïncide avec la fin du délai de Maghrib, soit le soleil à 17° sous l'horizon." + chr$(13) t$ = t$ + " La fin du délai est atteinte avec l'apparition de l'aube lorsque le soleil remonte à 19° sous l'horizon." + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Note :" + chr$(13) t$ = t$ + "Les opinions divergent sur les angles à utiliser pour le calcul de Fajr et Isha." +chr$(13) t$ = t$ + "La mosquée de Paris retient 15° pour Fajr et 18° pour Isha." + chr$(13) + chr$(13) t$ = t$ + chr$(13) t$ = t$ + "Pour des plus amples informations sur le calcul des horaires de prière, référez-vous à : " + chr$(13) t$ = t$ + "http://www.averroes-aveyron.fr/medias/files/methodes-de-calcul.pdf" + chr$(13) message t$ END_SUB rem ============================================================================ ' Liste des pays : nom du pays, fuseau horaire du pays et flag pour heure d'été (1 oui, 0 non) data "Algérie" ,1,0 , "Belgique",1,1 ,"Egypte",2,0 , "France",1,1, "Lybie",2,0 data "Maroc",1 , 0, "Arabie Saoudite",3,0 ,"Tunisie",1,0 ' ------------------------------------------------------------------------------ data "Algérie" : ' UTC + 1 ; DST 0 ' ----------- 1: ' Ville Latitude Longitude data "Adrar" , 27.850, -0.317 data "Alger" , 36.833, 3.000 data "Annaba" , 36.917, 7.783 data "Batna" , 35.567, 6.167 data "Bechar" , 31.583, -2.283 data "Bejaia" , 36.817, 5.050 data "Biskra" , 34.833, 5.683 data "Blida" , 36.500, 2.833 data "Boussaada" , 35.167, 4.150 data "Constantine" , 36.367, 6.667 data "El Asnam" , 36.183, 1.350 data "El Djelfa" , 34.717, 3.233 data "Ghardaia" , 32.333, 3.667 data "Laghouat" , 33.817, 2.917 data "Mostaganem" , 35.900, 0.083 data "M'Sila" , 35.667, 4.517 data "Oran" , 35.750, -0.633 data "Ouargla" , 32.000, 5.267 data "Setif" , 36.183, 5.400 data "Sidi-bel-Abbes" , 35.250, -0.650 data "Skikda" , 36.883, 6.900 data "Tamanrasset" , 22.833, 5.467 data "Tebessa" , 35.350, 8.100 data "Tiaret" , 35.333, 1.333 data "Tilimsen" , 34.883, -1.350 data "Tizi-Ouzou" , 36.733, 4.083 data "FIN" ' ------------------------------------------------------------------------------ data "Belgique" : ' UTC + 1 UTC + 2 Heure d'été ' ----------- 2: ' Ville Latitude Longitude data "Antwerp" , 51.217, 4.417 data "Brussels" , 50.850, 4.350 data "Charleroi" , 50.417, 4.450 data "Gent" , 51.033, 3.700 data "Liege" , 50.633, 5.583 data "Ostende" , 51.217, 2.917 data "Mons" , 50.467, 3.967 data "Namur" , 50.467, 4.867 data "FIN" ' ------------------------------------------------------------------------------ data "Egypte" : ' UTC + 2 ' ------------------------------------- 3: ' Ville Latitude Longitude data "Abou Simbel" , 22.317, 31.633 data "Alexandria" , 31.217, 29.917 data "Aswan" , 24.083, 32.933 data "Asyut" , 27.233, 31.117 data "Beni-Souef" , 29.083, 31.083 data "Cairo" , 30.050, 31.250 data "Damanhur" , 31.050, 30.467 data "Dumyat" , 31.433, 31.800 data "El Alamein" , 30.833, 28.950 data "Helwan" , 29.850, 31.333 data "Isma'ilia" , 30.600, 32.250 data "Karnak" , 25.683, 32.667 data "Port Said" , 31.283, 32.300 data "Sohag" , 26.550, 31.700 data "Suez" , 29.983, 32.550 data "Tanta" , 30.800, 31.000 data "Zagazig" , 30.583, 31.500 data "FIN" ' ------------------------------------------------------------------------------- data "France" : ' UTC + 1 UTC + 2 Heure d'été ' ---------- 4: ' Ville Latitude Longitude data "Brest" , 48.383, -4.500 data "Quimper" , 48.000, -4.100 data "Lorient" , 47.750, -3.350 data "St-Brieuc" , 48.517, -2.750 data "Vannes" , 47.667, -2.733 data "St Nazaire" , 47.283, -2.200 data "Rennes" , 48.100, -1.667 data "Cherbourg" , 49.633, -1.617 data "Nantes" , 47.233, -1.583 data "La-Roche-sur-Yon" , 46.633, -1.500 data "Bayonne" , 43.500, -1.467 data "La Rochelle" , 46.167, -1.167 data "St-Lo" , 49.117, -1.083 data "Laval" , 48.067, -0.750 data "Bordeaux" , 44.833, -0.567 data "Angers" , 47.483, -0.533 data "Mont-de-Marsan" , 43.900, -0.500 data "Niort" , 46.317, -0.450 data "Pau" , 43.300, -0.367 data "Caen" , 49.183, -0.367 data "Alençon" , 48.417, 0.083 data "Tarbes" , 43.233, 0.083 data "Le Havre" , 49.500, 0.100 data "Angouleme" , 45.667, 0.167 data "Le Mans" , 48.000, 0.200 data "Poitiers" , 46.583, 0.333 data "Cahors" , 44.467, 0.433 data "Auch" , 43.500, 0.600 data "Agen" , 44.200, 0.633 data "Tours" , 47.383, 0.700 data "Perigueux" , 45.200, 0.733 data "Dieppe" , 49.917, 1.083 data "Rouen" , 49.433, 1.083 data "Evreux" , 49.050, 1.183 data "Limoges" , 45.833, 1.250 data "Montauban" , 44.017, 1.333 data "Blois" , 47.600, 1.333 data "Toulouse" , 43.617, 1.450 data "Chartres" , 48.450, 1.500 data "Foix" , 42.950, 1.583 data "Chateauroux" , 46.817, 1.683 data "Tulle" , 45.267, 1.767 data "Abbeville" , 50.100, 1.850 data "Gueret" , 46.167, 1.866 data "Orleans" , 47.900, 1.900 data "Vierzon" , 47.233, 2.050 data "Pontoise" , 49.050, 2.083 data "Beauvais" , 49.433, 2.083 data "Versailles" , 48.800, 2.133 data "Albi" , 43.933, 2.144 data "Nanterre" , 48.883, 2.217 data "Amiens" , 49.900, 2.300 data "Paris" , 48.833, 2.333 data "Bourges" , 47.083, 2.383 data "Carcassonne" , 43.217, 2.350 data "Dunkerque" , 51.033, 2.383 data "Aurillac" , 44.933, 2.433 data "Bobigny" , 48.917, 2.450 data "Créteil" , 48.783, 2.467 data "Melun" , 48.533, 2.557 data "Evry" , 48.633, 2.567 data "Rodez" , 44.350, 2.567 data "Montlucon" , 46.333, 2.600 data "Arras" , 50.283, 2.767 data "Lens" , 50.433, 2.833 data "Perpignan" , 42.700, 2.900 data "Lille" , 50.650, 3.083 data "Clermont-Ferrand",45.783, 3.083 data "Nevers" , 47.000, 3.150 data "Moulins" , 46.567, 3.333 data "Mende" , 44.533, 3.500 data "Auxerre" , 47.800, 3.583 data "Laon" , 49.567, 3.617 data "Montpellier" , 43.600, 3.883 data "Le Puy" , 45.050, 3.883 data "Avallon" , 47.500, 3.900 data "Reims" , 49.250, 4.033 data "Troyes" , 48.300, 4.083 data "Roanne" , 46.033, 4.083 data "Nimes" , 43.500, 4.350 data "Chalons-S-Marne", 48.967, 4.367 data "St-Etienne" , 45.433, 4.383 data "Privas" , 44.733, 4.600 data "Mezières" , 49.767, 4.733 data "Avignon" , 43.933, 4.800 data "Lyon" , 45.767, 4.833 data "Macon" , 45.300, 4.833 data "Valence" , 44.933, 4.900 data "Dijon" , 47.333, 5.033 data "Chaumont" , 48.117, 5.133 data "Bar-le-Duc" , 48.767, 5.167 data "Bourg" , 46.200, 5.217 data "Observatoire SIRENE" , 44.000, 5.333 data "Marseille " , 43.300, 5.367 data "Lons-le-Saunier", 46.683, 5.550 data "Grenoble" , 45.183, 5.717 data "Toulon" , 43.117, 5.917 data "Chambéry" , 45.567, 5.917 data "Besancon" , 47.250, 5.983 data "Gap" , 44.550, 6.083 data "Annecy" , 45.900, 6.117 data "Metz" , 49.117, 6.183 data "Vesoul" , 47.633, 6.150 data "Nancy" , 48.700, 6.200 data "Digne" , 44.083, 6.233 data "Epinal" , 48.167, 6.467 data "Belfort" , 47.633, 6.867 data "Cannes" , 43.550, 7.000 data "Nice" , 43.700, 7.267 data "Colmar" , 48.083, 7.350 data "Mulhouse" , 47.750, 7.350 data "Strasbourg" , 48.583, 7.750 data "Ajaccio" , 41.917, 8.717 data "Bastia" , 42.683, 9.433 data "FIN" ' ------------------------------------------------------------------------------ data "Libye" :' UTC + 2 ' --------- 5: ' Ville Latitude Longitude data "Sabratah" , 32.833, 12.400 data "Tripoli" , 32.967, 13.200 data "Al Khums" , 32.650, 14.250 data "Sabhah" , 27.050, 14.433 data "Benghazi" , 32.117, 20.083 data "Ajdabiyah" , 30.800, 20.250 data "Al Marj" , 32.500, 20.833 data "Darnah" , 32.767, 22.650 data "Tubruq" , 32.100, 23.933 data "FIN" ' ------------------------------------------------------------------------------
data "Moroc" : ' UTC + 1 ' --------- 6: ' Ville Latitude Longitude data "Agadir" , 30.500, -9.667 data "Safi" , 32.300, -9.333 data "El Jadida" , 33.183, -8.283 data "Marrakech" , 31.817, -8.000 data "Settat" , 33.067, -7.617 data "Casablanca" , 33.650, -7.583 data "Mohammedia" , 33.717, -7.333 data "Khouribga" , 32.900, -6.950 data "Sale" , 34.067, -6.833 data "Kenitra" , 34.333, -6.567 data "Beni Mellal" , 32.367, -6.483 data "Khemisset" , 33.833, -6.050 data "Ksar el Kebir" , 35.067, -5.933 data "Tanger" , 35.800, -5.833 data "Meknes" , 33.883, -5.617 data "Tetouan" , 35.567, -5.367 data "Ceuta" , 35.883, -5.317 data "Fes" , 34.083, -5.000 data "Taza" , 34.267, -4.017 data "Nador" , 35.167, -3.000 data "Oujda" , 34.683, -1.750 data "FIN" ' ------------------------------------------------------------------------------ rem ============================================================================ data "Arabie Saoudite" : ' UTC + 3 ' ---------------- 7: ' Ville Latitude Longitude data "Riyadh" , 24.650, 46.767 data "Al Wajh" , 26.267, 36.467 data "Tabuk" , 28.367, 36.533 data "Yanbu'Al Bahr" , 24.117, 38.067 data "Tayma" , 27.617, 38.500 data "Jiddah" , 21.500, 39.167 data "Khaybar" , 25.800, 39.200 data "Medina" , 24.500, 39.583 data "Mecca" , 21.433, 39.817 data "Al Jawf" , 29.783, 39.867 data "Al Lith" , 20.167, 40.267 data "At Ta'if" , 21.250, 40.350 data "Badanah" , 31.000, 41.083 data "Al Qunfidhah" , 19.150, 41.117 data "Turabah" , 21.250, 41.567 data "Ha'il" , 27.517, 41.750 data "bha" , 18.233, 42.517 data "Jizan" , 16.933, 42.550 data "Buraydah" , 26.333, 43.983 data "Najran" , 17.517, 44.317 data "Shaqra" , 25.300, 45.250 data "Al Artawiyak" , 26.517, 45.350 data "Ad Dilam" , 23.983, 47.100 data "Haradh" , 24.200, 49.117 data "Al Hufuf" , 25.333, 49.567 data "Ad Dammam" , 26.417, 50.100 data "Al Khurmah" , 21.917, 42.033 data "FIN" ' ------------------------------------------------------------------------------ Data "Tunisie" : ' UTC + 1 ' ----------- 8: ' Ville Latitude Longitude data "Gafsa" , 34.467, 8.717 data "Beja" , 36.717, 9.217 data "Bizerte" , 37.300, 9.867 data "Kairouan" , 35.700, 10.017 data "Gabes" , 33.867, 10.100 data "Tunis" , 36.833, 10.217 data "Sousse" , 35.833, 10.633 data "Sfax" , 34.750, 10.717 data "Nabeul" , 36.500, 10.733 data "Moknine" , 35.633, 10.833 data "Monastir", 35.777, 10.826 data "Mahdia" , 35.502, 11.045 data "Jendouba" , 35.501, 08.783 data "Le Kef" , 36.179, 08.714 data "Siliana" , 35.990, 09.278 data "Ariana" , 36.862, 10.195 data "Ben Arous" , 36.743, 10.232 data "Kasserine" , 35.171, 08.828 data "Kebili" , 33.124, 08.836 data "La Manouba" , 36.807, 10.101 data "Medenine" , 33.348, 10.494 data "Sidi Bouzid" , 35.033, 09.5 data "Tataouine" , 32.921, 10.450 data "Zaghouan" , 36.399, 10.147 data "La Soukra" , 36.883, 10.25 data "La Marsa" , 36.876, 10.325 data "FIN" rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&& FIN DU CODE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculateur des heures de prière. Dim 5 Mai 2019 - 12:54 | |
| Salut à tous ! - Papydall a écrit:
- Code remis à jour pour tenir compte de cette remarque et ajout de deux marques pour marquer le jour courant.
Suggestion : Supprimer les deux marques quand le mois affiché ne correspond pas à celui en cours. Autre suggestion pour l'énoncé vocal de l'heure : scinder l'heure en morceau pour intercaler au bon endroit les mots " heure, minute et seconde". Bonne continuation ! EDIT : Je viens de voir que MiniBug avait fait, avant moi, la même remarque* au sujet des "marques" journalières lorsque le mois affiché n'est pas celui en cours. *Voir dans le sujet " comment-selectionner-une-ligne-d-un-grid" | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Dim 5 Mai 2019 - 16:15 | |
| - Marc a écrit:
- Suggestion : Supprimer les deux marques quand le mois affiché ne correspond pas à celui en cours.
C’est fait ! - Marc a écrit:
- Autre suggestion pour l'énoncé vocal de l'heure : scinder l'heure en morceau pour intercaler au bon endroit les mots "heure, minute et seconde".
Là, ce n’est pas évident ! La Virginie prononce le texte de la variable système " time()" du VBS et je ne vois pas trop comment intervenir pour le modifier. De toutes les façons ce n’est qu’un petit plus qu’apporte la voix de Virginie. Le forum ne veut plus accepter la nouvelle version, revue et corrigée (avec aussi un petit plus ) pour cause : " La longueur de votre message dépasse la limite autorisée."J'ai déposé sur mon webdev CalcPrayerTimes_3_4.zip que vous pouvez télécharger. Cette nouvelle version corrige le bug de deux marques, ajoute le pays (et certaines villes de l') Italie, et aussi un petit plus pour quitter l'application | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculateur des heures de prière. Dim 5 Mai 2019 - 16:40 | |
| - Papydall a écrit:
- La Virginie prononce le texte de la variable système " time()" du VBS et je ne vois pas trop comment intervenir pour le modifier.
Par exemple : - Code:
-
file_writeln 9999,"speaks="+chr$(34)+"Il est,"+chr$(34)+CHR$(34)+STR$(TIME_HOUR)+"heure"+STR$(TIME_MINUTE)+CHR$(34)
Ce qui fait donne sous la forme auditive : "il est 16 heure 30" | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Calculateur des heures de prière. Dim 5 Mai 2019 - 17:02 | |
| Merci Marc. C’est fait et la virginie a appris sa leçon : il est 16 heures, zéro minute 45 secondes. C’est sur mon webdav | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 6 Mai 2019 - 18:23 | |
| Après un passage par Wikipédia, me voilà avec une petite remarque voir deux. Pas tous les musulmans habite Moknine... Cela serait bien si les petit outils s' adaptait à la localisation géographique. D'autre part, cela serait bien si les calculs se refaisait automatiquement à chaque changement. Bon, ca va, je sors... | |
| | | Contenu sponsorisé
| Sujet: Re: Calculateur des heures de prière. | |
| |
| | | | Calculateur des heures de prière. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |