Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Renovare garsoniera 40 m.p. - ins...

Amorsa

Catel gasit pe strada

Arhiva tar - descarcare nesigura ...
 Racord flexibil gaz in loc de apa

Microsoft Office versiune optima

Dezmenbrare teren - cedare drum l...

Zilele cataloagelor Americane
 Poate Rh-ul negativ afecta o viit...

Solutie Backup pentru Server Linux

Laptop CS 2

AirGPU (cloud gaming)
 KAZA Univisa

Reciclare hard disk-uri defecte v...

Vacanta 7-10 zile auto

Procedura inmatriculare auto din UE
 

[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,225
  • Î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: 15,989
  • Î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,413
  • Î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,492
  • Î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,413
  • Î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,492
  • Î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,413
  • Î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,492
  • Î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,413
  • Înscris: 10.08.2005
deci 29 02 este tratat ca 01 03 ?

#13
Argv

Argv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,492
  • Î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,225
  • Î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,225
  • Î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,413
  • Î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

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

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