Chạy đồng thời hai vòng lặp C++

Nếu điều này dành cho dòng Power Automate, hãy sử dụng điều khiển đồng thời trong cài đặt của vòng lặp mà bạn muốn chạy đồng thời, nếu không và ý bạn là chạy hai vòng lặp trong Power Automate Desktop (PAD) cùng lúc, bạn không thể, không . Bạn phải thông minh với những thứ như danh sách có thể tránh hoàn toàn các vòng lặp

Giống như nếu tôi muốn kiểm tra xem một chuỗi có phải là một bảng màu hay không, làm cách nào tôi có thể Triển khai nó bằng cách sử dụng hai vòng lặp đồng thời để có thể thực hiện nó với số lượng dòng ngắn nhất?

Giải pháp tốt nhất

Vì đây gần như chắc chắn là một bài tập về nhà, đây là giải thích về cách tiếp cận không có mã

Bạn không cần hai vòng lặp, bạn cần hai biến vòng lặp. Bắt đầu ký tự đầu tiên ở đầu từ và ký tự thứ hai ở cuối, so sánh các ký tự tại các chỉ mục vòng lặp và trả về false nếu chúng khác nhau. Nếu các ký tự giống nhau, hãy chuyển sang lần lặp tiếp theo bằng cách đẩy chỉ số phía trước về phía trước và chỉ số phía sau lùi lại. Dừng khi chỉ số phía trước bằng hoặc lớn hơn chỉ số phía sau

Đây là cú pháp cho phép bạn sử dụng hai biến vòng lặp trong một vòng lặp

for (int front = 0, back = s.size() ; front < back ; front++, back--) ...

Giải pháp liên quan

C# – Cách liệt kê một enum

foreach (Suit suit in (Suit[]) Enum.GetValues(typeof(Suit)))
{
}

Ghi chú. Việc truyền tới (Suit[]) là không thực sự cần thiết, nhưng nó làm cho mã 0. nhanh hơn 5 ns

Python – Truy cập chỉ mục trong vòng lặp ‘for’

Việc sử dụng một biến trạng thái bổ sung, chẳng hạn như biến chỉ mục (mà bạn thường sử dụng trong các ngôn ngữ như C hoặc PHP), được coi là không phải Pythonic

Trang web này sử dụng cookie để lưu trữ thông tin trên máy tính của bạn. Bằng cách tiếp tục sử dụng trang web của chúng tôi, bạn đồng ý với cookie của chúng tôi. Nếu bạn không hài lòng với việc sử dụng các cookie này, vui lòng xem lại Chính sách cookie của chúng tôi để tìm hiểu cách vô hiệu hóa chúng. Bằng cách tắt cookie, một số tính năng của trang web sẽ không hoạt động

Chấp nhận và ẩn tin nhắn này

đây là thời gian đếm, hai chữ số cho phút và 1 chữ số cho giây. vòng lặp đầu tiên dành cho chữ số thứ hai, phần còn lại dành cho phút có thể đếm đến 99. nhưng mã này không hoạt động. Bạn co thể giup tôi được không?

//SSD is Seven-Segment Display

void setup()
{
  for (int i = 0; i <= 19; i++)
    pinMode(i, OUTPUT); //Set all pins from 0 to 19 as OUTPUT
}
//Aşağıdaki satır, 0'dan 9'a kadar bir SSD'deki rakamlar için tüm ikili sayıları içeren diziyi oluşturma çabalarının ürünüdür :) (ssd =seven segment display)
const int number[11] = {0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010, 0b0000010, 0b1111000, 0b0000000, 0b0010000};


void loop()
{
      digitalWrite(14,LOW); //a
    digitalWrite(15,LOW);//b
    digitalWrite(16,LOW);//c
    digitalWrite(17,LOW);//d
    digitalWrite(18,LOW);//e
    digitalWrite(19,LOW);//f
    digitalWrite(20,HIGH);//g
    

    delay(1000);//1 saniye bekletiyoruz

// 1 olması için sadece b ve c yanık olması gerekir

    digitalWrite(14,HIGH); //a
    digitalWrite(15,LOW);//b
    digitalWrite(16,LOW);//c
    digitalWrite(17,HIGH);//d
    digitalWrite(18,HIGH);//e
    digitalWrite(19,HIGH);//f
    digitalWrite(20,HIGH);//g

    delay(1000); //1 saniye bekletiyoruz


//2 rakamını oluşturabilmemiz için a,b,d,e,g harflerinin yakmamız gerekir 
    digitalWrite(14,LOW); //a
    digitalWrite(15,LOW);//b
    digitalWrite(16,HIGH);//c
    digitalWrite(17,LOW);//d
    digitalWrite(18,LOW);//e
    digitalWrite(19,HIGH);//f
    digitalWrite(20,LOW);//g

    delay(1000); //1 saniye bekletiyoruz



//3 rakamını oluşturabilmemiz için a,b,c,d,g harflerini yakmamız gerekir
    digitalWrite(14,LOW); //a
    digitalWrite(15,LOW);//b
    digitalWrite(16,LOW);//c
    digitalWrite(17,LOW);//d
    digitalWrite(18,HIGH);//e
    digitalWrite(19,HIGH);//f
    digitalWrite(20,LOW);//g

   delay(1000); //1 saniye bekletiyoruz



//4 rakamını oluşturabilmemiz için b,c,f,g harflerini yakmamız gerekir
    digitalWrite(14,HIGH); //a
    digitalWrite(15,LOW);//b.
    digitalWrite(16,LOW);//c.
    digitalWrite(17,HIGH);//d
    digitalWrite(18,HIGH);//e
    digitalWrite(19,LOW);//f.
    digitalWrite(20,LOW);//g.

   delay(1000); //1 saniye bekletiyoruz



// 5 rakamını oluşturabilmemiz için a,c,d,f,g harflerini yakmamız gerekir
    digitalWrite(14,LOW); //a
    digitalWrite(15,HIGH);//b.
    digitalWrite(16,LOW);//c
    digitalWrite(17,LOW);//d
    digitalWrite(18,HIGH);//e.
    digitalWrite(19,LOW);//f
    digitalWrite(20,LOW);//g

    delay(1000); //1 saniye bekletiyoruz



// 6 rakamını oluşturabilmemiz için a,c,d,e,f,g harflerini yakmamız gerekir
    digitalWrite(14,LOW); //a
    digitalWrite(15,HIGH);//b.
    digitalWrite(16,LOW);//c
    digitalWrite(17,LOW);//d
    digitalWrite(18,LOW);//e.
    digitalWrite(19,LOW);//f
    digitalWrite(20,LOW);//g

    delay(1000); //1 saniye bekletiyoruz
}

void loop()
{

  for (int tens = 0; tens < 10; tens++)

  {
    display_tens(tens);
  }
}

void display_tens(const int tens)
{
  int pin1, a, ones;     
  //pin1  1.SSD'nin pinleri ile alakalıdır.

  for (pin1 = 0, a = 0; pin1 < 7; pin1++, a++)
  {
    digitalWrite(pin1, bitRead(number[tens], a));
  }
  for (ones = 0; ones < 10; ones++)
  {
    display_ones(ones);
    delay(60000); 
    //300 ms periyotla sayılar bir bir artar.
  }
}

void display_ones(const int x)
{ int pin2, b;             
//pin2  2.SSD'nin pinleri ile alakalıdır.

  for (pin2 = 7, b = 0; pin2 <= 13; pin2++, b++)
  {
    digitalWrite(pin2, bitRead(number[x], b));

  }

}

bạn muốn hai vòng lặp đồng bộ như thế nào?

Phút là hệ số nhân chính xác của giây. Hệ số nhân này là 60
Vì vậy, chỉ cần đếm từng giây và mỗi khi bộ đếm giây đạt đến 60
hãy đặt lại về 0 và tăng bộ đếm phút lên một.

RTC phần mềm tối thiểu cứ sau một phần mười giây, bộ đếm phần mười giây tăng thêm một

mỗi khi bộ đếm này đạt đến 10, hãy đặt lại về 0 và tăng bộ đếm giây lên một

mỗi khi bộ đếm giây đạt đến 60, hãy đặt lại về 0 và tăng bộ đếm phút lên một

mỗi khi bộ đếm phút đạt đến 60, đặt lại về 0 và tăng bộ đếm giờ

mỗi khi bộ đếm giờ đạt 24 đặt lại về 0

unsigned long RTC_Timer  = 0;
unsigned long MyTestTimer;

int RTC_Hour   = 0;
int RTC_Minute = 0;
int RTC_Second = 0;
int RTC_10nth_Seconds = 0;


boolean TimePeriodIsOver (unsigned long &periodStartTime, unsigned long TimePeriod) {
  unsigned long currentMillis  = millis();  
  if ( currentMillis - periodStartTime >= TimePeriod )
  {
    periodStartTime = currentMillis; // set new expireTime
    return true;                // more time than TimePeriod) has elapsed since last time if-condition was true
  } 
  else return false;            // not expired
}

void PrintRTC_Data() {
  Serial.print(RTC_Hour);
  Serial.print(":");
  Serial.print(RTC_Minute);
  Serial.print(":");
  Serial.print(RTC_Second);
  Serial.println();
}


void SoftRTC() {
  if ( TimePeriodIsOver(RTC_Timer,100) ) {
    RTC_10nth_Seconds ++;
    if (RTC_10nth_Seconds == 10) {      
      RTC_10nth_Seconds = 0;    
      RTC_Second++;
      
      if (RTC_Second == 60) {
        RTC_Minute++;
        RTC_Second = 0;
      }
    }
    
    if (RTC_Minute == 60) {
      RTC_Hour++;
      RTC_Minute = 0;  
    }
  
    if (RTC_Hour == 24) {
      RTC_Hour = 0;
    }

      
    if ( TimePeriodIsOver(MyTestTimer,1000) ) {
      PrintRTC_Data();
    }  
    
  }
}


void setup() {
  Serial.begin(115200);
  Serial.println("Setup-Start");
}


void loop() {
  SoftRTC();
}

Đây là phần đếm

Sau đó, bạn có một phần mã bật/tắt các phân đoạn

Bài tập của bạn có buộc bạn phải sử dụng trực tiếp nhiều chân IO không?

hoặc bạn có được phép sử dụng mô-đun 7 đoạn với chip giao diện và bạn có được phép sử dụng thư viện có tất cả mã chi tiết để hiển thị các chữ số sẵn sàng sử dụng không?

Nếu có, tôi khuyên bạn nên sử dụng một mô-đun như vậy

Chạy đồng thời hai vòng lặp C++
Màn hình hẹn giờ LED TM1637. 7-Segment-Anzeige bị thối. 4 bit, 1,01 €
Chạy đồng thời hai vòng lặp C++

Màn hình hẹn giờ LED TM1637. 7-Segment-Anzeige bị thối. 4 bit, 1,01 €

Zeit, Countdowns oder andere Werte anzeigen - mit unserem TM1637 LED Timer Display ganz einfach Sie können die 4 Stellen des Displays und die Helligkeit ind

Bạn có thể chạy 2 vòng for cùng một lúc không?

Nói chung bạn không thể sử dụng hai vòng lặp vô hạn . Đó là bởi vì nó là chương trình liên tục, vì vậy nó không thể chạy thứ hai cho đến khi chương trình đầu tiên được thực hiện. Vì vậy, nếu vòng lặp đầu tiên là vô hạn, thì vòng lặp thứ hai sẽ không bao giờ chạy.

Bạn có thể chạy hai vòng đồng thời trong Arduino không?

Arduino không phải là thiết bị đa nhiệm, vì vậy bạn không thể chạy hai vòng lặp đồng thời . Tuy nhiên, bạn có thể kết nối 2–3 arduino bằng I2C và định cấu hình toàn bộ thiết lập để chạy đồng thời các vòng lặp khác nhau trên các arduino khác nhau.