לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי         אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #9  
ישן 14-02-2014, 13:04
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,303
בתגובה להודעה מספר 8 שנכתבה על ידי fap שמתחילה ב "כי c++ הכי יפה. ואם כבר אז..."

כיוון שהקוד שאתה הבאת לא קריא בעליל למי שאינו מכיר את השפה (מה זה שמות של אותיות ביוונית באמצע היום? טווחים ואורך מערך?) - אני אנחש שמדובר ב Python...

דחיפת מספר פונקציות לשורה אחת לא עושה קוד קריא יותר, ואין בכך שום דבר מגניב יותר או חוזק של שפה. רק משהו שבנאדם צריך לחשוב יותר כדי להבין... אני לא מאמין במימרא "If it was hard to write, it should be hard to read."

נ.ב. הקוד שלך לא מדפיס את המספר הסודר של הערכים במערך התוצאה כפי שהיה בדוגמה המקורית. למעשה, הקוד שלך גם לא מייצר מערך נוסף שהוא ממויין כפי שהתבקש בהודעה המקורית. וכל זה בנוסף לזה שזה לא קריא כפסבדו-קוד עם כל כך הרבה חוסרים...

נ.ב.2. גם אני יכול לקרוא לכמה פונקציות באותה שורה ולהתעלם ממשאלת פותח האשכול.
קוד PHP:
<?php
$a 
= array(4, -5976776324, -987);
asort($aSORT_NUMERIC); echo implode(', 'array_keys($a));
?>


אני אפילו יכול לזרוק את הכל בשורה אחת אם ממש בא לי... (can you? one-liners on shell are awesome, try that once!)
קוד PHP:
<?php $a = array(4, -5976776324, -987); asort($aSORT_NUMERIC); echo implode(', 'array_keys($a))."\n"?>

אבל כאמור המטרה היא ליצור משהו קריא שעונה על הדרישות...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 14-02-2014, 16:01
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,303
בתגובה להודעה מספר 10 שנכתבה על ידי fap שמתחילה ב "הקוד שלך בטוח לא יותר קריא..."

אני יכול להניח ש asort היא פעולת sort, כפי שאני מניח בשפה שלך ש "sorted" היא פעולת sort, למרות שהיא לא ב"ציווי" כפי שבד"כ נוהגים לתת שמות לפונקציות. SORT_NUMERIC - אנגלית - מיין לפי מספר (כיצד שלך ממיין? אין לדעת. לא כתוב...)

מדוע צריך לציין אינדקס להשמה? תיכף תגיד שחייבים לציין אורך של מחרוזת כשמציבים אותה לתוך מחרוזת ב C (רגע, שם כנראה [] זה בסדר כדי להגיד "תוסיף כמה שצריך"...)

אשר ל"מה זה key"? - כשתענה על אותה השאלה בדיוק בקוד שלך, תדע את התשובה. זה אותו key בדיוק, מסתבר.

לא דיברתי על הדרישה שהאינדקסים יתחילו ב 1 - גם אצלי הם לא. זו באמת דרישה טפשית. אבל בקוד שלך בכלל לא הייתה הצגת אינדקסים - והוא רצה אינדקסים, לפחות לפי הדוגמה שלו. לכך התכוונתי.

אין ספק שהסינטקס של foreach ב PHP הזוי. בייחוד שמשווים אותו לשפות נפוצות אחרות כיום, כגון ג'אווה: http://stackoverflow.com/questions/...-each-loop-work
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #19  
ישן 16-02-2014, 17:51
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,303
בתגובה להודעה מספר 18 שנכתבה על ידי Idjo שמתחילה ב "אני לא מבין מה אתה מנסה לומר...."

אני לא צופה שמי שלא מכיר את השפה יבין את משמעות החץ (והאמת היא שאין לו הרבה משמעות, למעט ... ויזואליות - ש בכל איטרציה של foreach אז איבר מן המערך הופך ל: מפתח => הערך של המפתח הזה במערך. אגב, גם בהגדרה של מערך, ניתן להשתמש באופרטור הזה באותה הצורה כדי לשייך ערך למפתח כלשהו...) - אלא מה סביר שהקוד עושה, פשוט מהקריאה. אם אתה חושב שזה יותר ברור:
קוד:
range(len(a)), key=lambda i: a[i]

או בתרגום: טווח (בעל מספר אחד, שהוא האורך של a, שזה קצת מוזר, טווח זה בד"כ בין a ל b, לא?), מפתח שווה ל lambda i שהוא בעצם a[i] (אז למה אי אפשר בעצם לציין ישר key=a[i] ?)... אולי זה טווח בין גודל המערך a לבין משהו אחר? אבל זה קצת מוזר, הייתי מצפה שהטווח יתחיל מלמטה... בני אדם נוטים תמיד לספור מלמטה למעלה אא"כ אמרו להם אחרת, לא יודע למה.

ולכל מה שכתבתי בפיסקה הקודמת יש משמעות, בייחוד למי שלא ראה lambda מימיו... והמשמעות הזו יותר ברורה מ"עבור כל מה שיש ב a קח את המפתח ואת הערך שלו", אז אני לא אתווכח...

והטענה שלי היא שמבין כל הדברים המוצגים כאן, דווקא ל lambda יש את הסבירות הכי גבוהה להיות לא מובן (ואם אתה מבין את זה, יש סיכוי לא רע שזה בגלל שאתה כבר יודע את זה, ואילו אני מתייחס לקהל שאין לו רקע בתכנות וקורא משהו שהכי קרוב לאנגלית שאפשר...)

לא טענתי שהבנת את הקוד שלי ולא הבנת את שלו. אם אמרת שהבנת, אז הבנת. אשריך. איכשהו הסטטיסטיקות של השימוש בעולם נוטות לטובת השפה שקשה לך יותר להבין... כנראה שלהרבה אנשים היא בכל זאת קלה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 19-02-2014, 00:36
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,647
בתגובה להודעה מספר 19 שנכתבה על ידי שימי שמתחילה ב "אני לא צופה שמי שלא מכיר את..."

ציטוט:
במקור נכתב על ידי שימי
אני לא צופה שמי שלא מכיר את השפה יבין את משמעות החץ (והאמת היא שאין לו הרבה משמעות, למעט ... ויזואליות - ש בכל איטרציה של foreach אז איבר מן המערך הופך ל: מפתח => הערך של המפתח הזה במערך. אגב, גם בהגדרה של מערך, ניתן להשתמש באופרטור הזה באותה הצורה כדי לשייך ערך למפתח כלשהו...) - אלא מה סביר שהקוד עושה, פשוט מהקריאה.
לא, זה לא ברור.
דווקא ההשמה באמצעות חץ היא תחביר ברור ומוכר (מפרל, למשל).
מערך = {"מפתח" => "ערך", "עוד מפתח" => "עוד ערך"}
זה ברור.
מה קשור החץ בלולאה זה לא ברור. באופן מעניין, גם פרל וגם הרבה שפות אחרות בחרו בתחביר הברור בסגנון:
for (key, value) in dict/hash/map {
do something with a pair of key and value
}
בפרל זו הפונקציה each, בפייתון וב-C# אתה מקבל מפתח וערך אם אתה אומר שאתה רוצה זוג in ה-dict (ורק את הערך אם אתה אומר משתנה בודד in ה-dict).

כמובן שבכלל לא מדובר במערך, אלא ב-map או ב-dictionary. לפעמים הדבר הזה נקרא "מערך אסוציאטיבי", אבל מי שלא יודע מה זה למבדה גם לא ידע מה זה מערך אסוציאטיבי.

ציטוט:
במקור נכתב על ידי שימי
אם אתה חושב שזה יותר ברור:
קוד:
range(len(a)), key=lambda i: a[i]

או בתרגום: טווח (בעל מספר אחד, שהוא האורך של a, שזה קצת מוזר, טווח זה בד"כ בין a ל b, לא?)
וברור שהקצה התחתון של הטווח הוא אפס. זה ברור לכולם חוץ מלמתכנתי Visual Basic שבעולם המוזר שלהם אפשר להגדיר מערכים בסגנון Dim arr(5 To 12, 16 To 43) As String. אפילו אצלם ברור שאם לא מצוין טווח תחתון הוא 0 או 1. כי ברור לכולם שאם אומרים "לך תביא לי עוד 5 כוסות קפה" לא שואלים "חח רגע מאיפה מתחילים לספור חח?!!"

ציטוט:
במקור נכתב על ידי שימי
מפתח שווה ל lambda i שהוא בעצם a[i] (אז למה אי אפשר בעצם לציין ישר key=a[i] ?)...
כי הוא לא רוצה שיבצעו evaluation של a[i]‎ ברגע הקריאה ל-sorted ויעבירו לה את התוצאה של זה, אלא הוא רוצה שיעבירו ל-sorted פונקציה (שמקבלת משתנה ומחזירה את הערך ב-a שיושב תחת המפתח שמתואר בארגומנט של הפונקציה). לא שבכלל יש משתנה בשם i בשלב הזה שאפשר לכתוב key=a[i]‎...

ציטוט:
במקור נכתב על ידי שימי
ולכל מה שכתבתי בפיסקה הקודמת יש משמעות, בייחוד למי שלא ראה lambda מימיו... והמשמעות הזו יותר ברורה מ"עבור כל מה שיש ב a קח את המפתח ואת הערך שלו", אז אני לא אתווכח...

והטענה שלי היא שמבין כל הדברים המוצגים כאן, דווקא ל lambda יש את הסבירות הכי גבוהה להיות לא מובן (ואם אתה מבין את זה, יש סיכוי לא רע שזה בגלל שאתה כבר יודע את זה, ואילו אני מתייחס לקהל שאין לו רקע בתכנות וקורא משהו שהכי קרוב לאנגלית שאפשר...)
כל מי שיודע C++ או C# או Haskell או LISP יודע מה זה למבדה (ההוא שיודע האסקל גם יודע מה המקור של השם). מה קשור החץ? רק מתכנתי PHP יודעים.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 19-02-2014, 04:36
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,647
בתגובה להודעה מספר 6 שנכתבה על ידי fap שמתחילה ב "יפהפה"

זה די נורא אחשלגבר.

להשתמש ב-contexpr ובלולאות for חדשות עם... qsort? מזעזע.
יש לך std::sort למיון ו-std::iota כדי למלא מערך במספרים 1-n.
ככה זה אמור להראות ב-C++11 באמת: http://ideone.com/JI7cUU

קוד:
#include <vector> #include <algorithm> #include <iostream> int main() { std::vector<int> a{ 4, -5, 976, 776, 324, -987 }; std::vector<int> b(a.size()); std::iota(begin(b), end(b), 0); std::sort(begin(b), end(b), [&](int i, int j) { return a[i] < a[j]; }); for (const auto& e : b) { std::cout << e << std::endl; } return 0; }

(קרדיט לחבר לא מפרש שהתלונן על זה ותירגם ל-C++11)

שים לב שברגע שעוברים ל-std::sort אין cast-ים מזעזעים.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #23  
ישן 20-02-2014, 23:06
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,647
בתגובה להודעה מספר 22 שנכתבה על ידי fap שמתחילה ב "טוב, ניצחת. אני צריך ללמוד..."

ציטוט:
במקור נכתב על ידי fap
טוב, ניצחת.
אני צריך ללמוד c++11 קצת יותר.



דווקא std::sort קיים ב-C++98 והיה ב-STL המקורי של SGI.
פשוט כל עוד לא היו לך למבדות היית צריך לכתוב פונקציה ממש או functor בצורה קצת יותר verbose (כלומר: מחלקה ו-operator()‎ שמקבל שני פרמטרים מסוג הדבר שמשווים ומחזיר bool).

std::iota זה חדש ב-C++11 (אפילו שגם זה היה ב-STL של SGI; משום מה זה לא נכנס ל-C++98...), אבל קל לעשות את זה בלעדיה, לדוגמה ככה:
קוד:
std::vector<int> b(a.size()); std::generate_n(begin(b), b.size(), [&i] { static int i = 0; return i++; });
אם יש לך מימוש טוב שלא מקצה זיכרון לוקטור לפני שצריך, אפשר לכתוב פונקציה מגניבה שחוסכת את האתחול הכפול שיש בדוגמה למעלה (קודם לאתחל את הוקטור באפסים, ואז לשים את הערכים של iota), ככה:
קוד:
std::vector<int> create_iota(size_t size) { int value = 0; std::vector<int> v(0); v.reserve(size); std::generate_n(std::back_inserter(v), size, [&value] { return value++; }); return v; }
גגג
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 13:21

הדף נוצר ב 0.27 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2019 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר