Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Presbiopia - la 43 ani ?

Termen transcriere autovehicul

Cazare Timisoara pe 4-5 zile

Primele zile ale internetului per...
 Ditra 25

Casti USB-C ptr A-54

Aplicatie medicala / asistent med...

De ce vor atația politicieni...
 ERR_ADDRESS_UNREACHABLE

Legea 18/1968 Se mai aplica?

Digi conectare 2 routere prin fir

Succesiune notar versus instanta ...
 Montaj aer conditionat in balcon ...

Cont curent mulți valuta far...

Sugestii plan casa

Experiente cu firme care cumpara ...
 

[Provocare] Cum afli zodia pornind de la zi/luna

- - - - -
  • Please log in to reply
44 replies to this topic

#1
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Plecand de la codul din alta postare https://forum.softpe.../#entry25343076 cum ati scrie voi mai simplu logica din acele if-uri? Orice limbaj e permis.

Attached File  Untitled.png   95.25K   34 downloads

Edited by dani.user, 11 October 2019 - 17:29.


#2
Phobos

Phobos

    Guru Member

  • Grup: Senior Members
  • Posts: 16,017
  • Înscris: 23.09.2005

 dani.user, on 09 octombrie 2019 - 17:27, said:

[Provocare] Cum aflii zodia pornind de la zi/luna

Cel mai tare ar fi sa afli ziua/luna pornind de la zodie. :D

#3
karax

karax

    Guru Member

  • Grup: Senior Members
  • Posts: 21,839
  • Înscris: 14.10.2017
nu stiu cod, banuiesc ca cel mai usor ar fi facand o bucla cu while sau for prin care se trece la fiecare numar/cifra a zilei/lunii si se asigneaza ca sa zic asa la zodia potrivita , zodiile fiind scrie intr-o lista exact in ordine incepand de la intaia zi a anului
asfel de exemplu zodia scorpion sa fie asignata la al 8-ptulea interval din an adica 23 octombrie – 21 noiembrie

#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005
var zodii = ["Sagetator","Capricorn","Varsator","Pesti","Berbec", "Taur","Gemeni","Rac","Leu","Feciora","Balanta","Scorpion"];
ziua = 1
luna = 9
if (( luna == 2 && ziua >= 20 && ziua <=31 ) ||
( (luna == 1 || luna ==3 || luna == 4) && (ziua >=21 && ziua <=31) )||
( (luna == 6 || luna == 11 || luna == 12 ) && (ziua >=22 && ziua <=31) )||
( (luna => 7 && luna <=10 ) && (ziua >= 23 && ziua <=31)))
{
luna+=1
}
document.getElementById("zodie").innerHTML = zodii[luna%12];


Quote

zodiile fiind scrie intr-o lista exact in ordine incepand de la intaia zi a anului
exact cu ai banuit, prima zodie din an pica pe pozitia 1 din lista, doar ca lista noastra incepe de la 0

Edited by MarianG, 09 October 2019 - 19:51.


#5
Argv

Argv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,496
  • Înscris: 25.10.2007
N-am testat dar ceva de genul

Month si Day sunt datele introduse

struct Sign {
int dayFrom;
int dayTo;
const char *name;
};

const Sign signs[] = {
{ 1, 20, "Capricorn" },
{ 21, 49, "Varsator" },
{ 50, 79, "Pesti" },
{ 80, 110, "Berbec" },
{ 111, 141, "Taur" },
{ 142, 172, "Gemeni" },
{ 173, 202, "Rac" },
{ 203, 234, "Leu" },
{ 235, 265, "Fecioara" },
{ 266, 295, "Balanta" },
{ 296, 325, "Scorpion" },
{ 326, 355, "Sagetator" },
{ 356, 365, "Capricorn" },
{ 0, 0, "???" },
};

int Days[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };

int DayOfYear = Days[Month - 1] + Day;
Sign *pSign = &signs[0];
while (pSign->dayFrom != 0) {
if ((pSign->dayFrom <= DayOfYear) && (DayOfYear <= pSign->dayFrom)) {
break;
}
pSign ++;
}

Numele zodiei este in pSign->name

... elementele fiind ordonate probabil se poate renunta la limita inferioara

Edited by Argv, 09 October 2019 - 20:09.


#6
karax

karax

    Guru Member

  • Grup: Senior Members
  • Posts: 21,839
  • Înscris: 14.10.2017

 MarianG, on 09 octombrie 2019 - 19:36, said:

var zodii = ["Sagetator","Capricorn","Varsator","Pesti","Berbec", "Taur","Gemeni","Rac","Leu","Feciora","Balanta","Scorpion"];
ziua = 1
luna = 9
if (( luna == 2 && ziua >= 20 && ziua <=31 ) ||
( (luna == 1 || luna ==3 || luna == 4) && (ziua >=21 && ziua <=31) )||
( (luna == 6 || luna == 11 || luna == 12 ) && (ziua >=22 && ziua <=31) )||
( (luna => 7 && luna <=10 ) && (ziua >= 23 && ziua <=31)))
{
luna+=1
}
document.getElementById("zodie").innerHTML = zodii[luna%12];



exact cu ai banuit, prima zodie din an pica pe pozitia 1 din lista, doar ca lista noastra incepe de la 0
pacat ca nu tin minte ca altfel am exprimat exact cum ar trebui sa fie....

#7
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005

 Argv, on 09 octombrie 2019 - 20:05, said:

... elementele fiind ordonate probabil se poate renunta la limita inferioara
cum functioneaza DayOfYear in anii bisecti ?

#8
Petrecristi

Petrecristi

    Senior Member

  • Grup: Senior Members
  • Posts: 2,367
  • Înscris: 19.12.2009
O fi bine, o fi rau, eu asa as face:

package com.company;
import java.util.Scanner;

public class Zodiac {
	Scanner scanner=new Scanner(System.in);
	int ziuaCititaNr =1;
	int lunaCititaNr =1;
   String zodie[] = {
		   "Vărsător : 20 ianuarie - 18 februarie",
		   "Pești : 19 februarie - 20 martie",
			"Berbec: 21 martie - 20 aprilie",
			"Taur : 21 aprilie - 21 mai",
			"Gemeni : 22 mai - 21 iunie",
			"Rac : 22 iunie - 22 iulie",
			"Leu : 23 iulie - 22 august",
			"Fecioară : 23 august - 22 septembrie",
			"Balanță : 23 septembrie - 22 octombrie",
			"Scorpion : 23 octombrie - 21 noiembrie",
			"Săgetator : 22 noiembrie - 21 decembrie",
			"Capricorn : 22 decembrie - 19 ianuarie"
	};
   int primaZiZodie[]={20,19,21,21,22,22,23,23,23,23,22,22};
   public void citiesteZiuaN(){
		System.out.println("Ziua in care te-ai nascut");
		ziuaCititaNr =scanner.nextInt();
	}
	public void citesteLunaN(){
		System.out.println("Numarul lunii in care te-ai nascut (intre 1 si 12)");
		lunaCititaNr =scanner.nextInt();
	}
	public void afiseaza(){
		int numarZodie=1;
		//daca ziua in care te-ai nascut este egala
		// sau mai mare cu ziua in care incepe zodia din luna ta
	   if(ziuaCititaNr>=primaZiZodie[lunaCititaNr-1]){
		numarZodie= lunaCititaNr;
	   }else{
		   numarZodie=lunaCititaNr-1;
	   }
	   System.out.println("Esti " + zodie[numarZodie-1] );
	}

}



public class Main {
	public static void main(String[] args) {
Zodiac zodiac=new Zodiac();
//zodiac.as();
zodiac.citiesteZiuaN();
zodiac.citesteLunaN();
zodiac.afiseaza();
System.out.println(""+zodiac.lunaCititaNr);
	}
}




#9
Argv

Argv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,496
  • Înscris: 25.10.2007

 MarianG, on 09 octombrie 2019 - 20:34, said:

cum functioneaza DayOfYear in anii bisecti ?

Da, in acest caz 29 feb pica in interval

Edited by Argv, 09 October 2019 - 20:43.


#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005
29 feb este ziua 60 -- dupa ea restul zodiilor sunt deplasate cu o zi

Edited by MarianG, 09 October 2019 - 20:50.


#11
Argv

Argv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,496
  • Înscris: 25.10.2007
Dar nu are importanta, datele de intrare sunt luna si zi:

29.02 = 31 + 29 = 60 --> Pesti
20.03 = 59 + 20 = 79 --> Pesti
21.03 = 59 + 21 = 80 --> Berbec
20.04 = 90 + 20 = 110 --> Berbec
21.04 = 90 + 21 = 111 --> Taur

Practic ne bazam ca 28.02, 29.02, 01.03.. sunt toate in aceeasi zodie si nu mai e nevoie sa tratam cazul anului bisect

Edited by Argv, 09 October 2019 - 21:03.


#12
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005
deci 29 02 este tratat ca 01 03 ?

#13
Argv

Argv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,496
  • Înscris: 25.10.2007
Da:

int Days[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };

29.02 = 31 + 29 = 60
01.03 = 59 +   1 = 60

#14
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Varianta mea

Attached File  zodii.png   292.25K   28 downloads

#15
Petrecristi

Petrecristi

    Senior Member

  • Grup: Senior Members
  • Posts: 2,367
  • Înscris: 19.12.2009
Poti sa postezi si tu codul? Nu doar poza...

#16
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
#include <array>
#include <iostream>
#include <tuple>
const char* zodie(int luna, int zi) {
	static const std::array<std::tuple<int, const char*>, 13> data{{
		{ 21, "CAPRICORN" },
		{ 20, "VARSATOR" },
		{ 21, "PESTI" },
		{ 21, "BERBEC" },
		{ 22, "TAUR" },
		{ 22, "GEMENI" },
		{ 23, "RAC" },
		{ 23, "LEU" },
		{ 23, "FECIOARA" },
		{ 23, "BALANTA" },
		{ 22, "SCORPION" },
		{ 22, "SAGETATOR" },
		{ 21, "CAPRICORN" }
	}};
	return std::get<1>(data.at(zi < std::get<0>(data.at(luna - 1)) ? luna - 1 : luna));
}
int main() {
   
	std::cout << zodie(1, 1) << '\n';
	std::cout << zodie(1, 21) << '\n';
}



#17
LOLkekLOL

LOLkekLOL

    Senior Member

  • Grup: Senior Members
  • Posts: 2,348
  • Înscris: 29.07.2019
Logica mai simpla nu exista decat daca folosesti structuri de date dedicate si eventual comparator custom(iar o parte de complicatie se transfera acolo). Cred ca voiai sa intrebi altceva(cod mai scurt?)

Pentru cazul de fata, in opinia mea, codul din pastebin este foarte bun, mai clar si mai mentenabil decat ce aveti voi aici(sigur, la niste zodii fixe nu se pune problema de mentenanta presupun, dar in alte cazuri cu logica asemanatoare, da).

Cod mai lung nu inseamna neaparat complicat sau greu de inteles, adesea e contrariul. In schimb smecheriile scurte sunt adesea greu de citit/inteles.

#18
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005

Quote

Logica mai simpla nu exista decat daca folosesti structuri de date dedicate si eventual comparator custom(iar o parte de complicatie se transfera acolo).
Vorbesti pe cod sau nu existi.

 LOLkekLOL, on 11 octombrie 2019 - 11:04, said:

Cred ca voiai sa intrebi altceva(cod mai scurt?)
Crezi gresit si faci afirmatii pe baza acestor parareri.

Edited by MarianG, 11 October 2019 - 15:02.


Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate