Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Verifică dacă trei puncte sunt coliniare C++

Dându-se trei puncte în plan, să se verifice dacă acestea sunt coliniare sau nu.

Exemplu. Pentru punctele (1, 2), (2, 3) și (3, 4), răspunsul este DA (vezi imaginea de mai jos):

https://i.ibb.co/CtbhFG5/image.png

Explicarea algoritmului

Există multe metode de a rezolva această problemă (folosind aria sau perimetrul, verificând dacă toate aparțin unei drepte — funcție de gradul I, etc). Ne vom axa pe noțiunea de pantă, deoarece este cel mai ușor de înțeles.

Ce este panta unei drepte?

Conform Wikipedia,

În matematică, panta unei drepte este o valoare numerică ce descrie direcția și înclinația unei drepte. Din punct de vedere geometric, panta reprezintă tangenta unghiului făcut de dreaptă cu orizontala.

Mai precis, pentru două puncte (x1, y1), (x2, y2) cunoscute, avem panta m = $\frac{y_2 - y_1}{x_2-x_1}=tg(\alpha)$. Iată o reprezentare grafică de pe Wikipedia:

https://i.ibb.co/N3zfCbY/image.png

Avem următoarea proprietate interesantă:

Trei puncte sunt coliniare dacă pantele oricăror două puncte sunt egale între ele.

Așadar, pentru soluția noastră vom calcula pantele celor trei drepte ce se pot forma dintre cele trei puncte, iar dacă sunt egale, atunci putem afirma că punctele sunt coliniare. Altfel, acestea nu sunt.

Implementare C++

#include <iostream>

using namespace std;

int main()
{
    //Declarăm și citim coordonatele celor trei puncte
    int x1, y1, x2, y2, x3, y3;
    cout << "Primul punct: ";
    cin >> x1 >> y1;
    cout << "Al doilea punct: ";
    cin >> x2 >> y2;
    cout << "Al treilea punct: ";
    cin >> x3 >> y3;

    //Determinăm pantele (m)
    double m12 = double(y2 - y1) / (x2 - x1),
           m23 = double(y3 - y2) / (x3 - x2),
           m13 = double(y3 - y1) / (x3 - x1);
  if(m12 == m23 && m23 == m13) { //Dacă pantele sunt egale
        cout << "DA";
    } else {
        cout << "NU";
    }
    return 0;
}

Alte resurse și bibliografie

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Bordarea unei matrice în C++Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicAlgoritm recursiv pentru căutare binară (clasa a X-a)Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Cum să calculezi instant 2 la puterea N în C++Verificare dacă un număr este palindrom în C++Aria unui triunghi folosind coordonatele acestora în C++Oglinditul recursiv al unui număr în C++Structuri repetitive (while, do while, for, etc)Verifică dacă o literă este mică sau mare în C++Numărul de divizori al unui număr în C++Vectori de frecvență (de apariții) în C++Suma 1 + 2 + 3 + ... + N în C++Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Recursivitate în C++Numere triunghiulare. Verificarea unui număr triunghiularAfișarea divizorilor primi ai unui număr în C++Radicalul unui număr în C++ (rădăcina pătrată)Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Maximul și minimul a trei valori în C++Suma divizorilor unui număr în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Instrucțiunea do while (structuri repetitive)Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortTransformarea unui număr din baza 10 în baza 2 în C++Indicatorul lui Euler în C++Cum să citești și să afișezi în fișiere în C++Verifică dacă trei puncte sunt coliniare C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Câte numere naturale sunt într-un interval dat? (C++)Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorVectorii în C++: citire și afișareAflă secolul unui an citit de la tastatură în C++Numărul de cifre ale factorialului unui numărMatrice pătratice în C++. Diagonala principală și secundarăVerifică dacă un caracter este cifră în C++Al N-lea termen Fibonacci în C++Al N-lea termen dintr-o progresie aritmeticăValoarea absolută (modulul) unui număr în C++Complexitatea unui algoritm (timp și spațiu) în C++Numărul permutărilor în C++ (formula permutărilor)Afișarea elementelor unui vector recursiv în C++Transformarea unui număr din baza 2 în baza 10 în C++Copiuțe: Cifrele unui numărAl N-lea termen dintr-o progresie geometricăDistanța dintre două puncte în C++Verifică dacă un număr este par sau impar fără modulo în C++Instrucțiunea for (structuri repetitive)Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Interschimbarea a două variabile în C++ (3 metode)Verificarea unui an bisect în C++Maximul și minimul a n valori în C++Verifică dacă un caracter este literă în C++Verifică dacă un număr aparține șirului Fibonacci în C++Citește un șir de caractere cu spații în C++Inversarea unui vector în C++Numărul combinărilor în C++ (formula combinărilor)Operații cu numere mari în C++ - Toate funcțiile explicateSuma numerelor naturale dintr-un interval dat în C++Verificare număr prim în C++ (Clasa a IX-a)Rădăcina cubică a unui număr în C++ (cube root)Numărul de divizori primi ai unui număr în C++Cel mai puțin semnificativ bit în C++Instrucțiunea while (structuri repetitive)CMMMC a două numere în C++ (cel mai mic multiplu comun)Generarea șirului Fibonacci generalizat în C++Cel mai mic număr cu suma cifrelor N în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleDo while vs while în C++ - Care e diferența?Numărul de apariții al unui număr într-un vector în C++Mediana unui șir de valori în C++Suma elementelor unui vector recursiv în C++Calculul combinărilor de n luate câte k (nCk) în C++Numărul minim de peroane pentru o gară în C++Pointer în C++. Variabile de tipul char * (char steluță)Codul ASCII (tabel complet)Materia pentru olimpiada de informatică - tot ce trebuie să știiVerificare dacă șir de caractere este palindrom în C++Interclasarea a doi vectori în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)CMMDC recursiv a două numere naturale în C++Tipul struct în C++. Ce sunt structurile de date neomogeneInstrucțiunea break (structuri repetitive)Ce înseamnă variabilă globală și locală în C++?Inversarea unui șir de caractere în C++Cifra de control a unui numărCea mai lungă secvență de elemente crescătoare în C++Șiruri de caractere în C++. Tot ce trebuie să știiVerifică dacă o literă este vocală în C++Cel mai mare divizor comun (CMMDC) a două numere în C++Cum să afișezi partea întreagă a unui număr real în C++Aflarea sumei primelor N sume GaussMaximul și minimul unui vector în C++Aria și circumferința unui cerc în C++De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Divide et Impera (metodă de programare C++)Vectorii în C++: declarare și parcurgereTipuri de date în C++: numere întregi, reale, caractere și alteleMaximul și minimul a două valori în C++Funcții în C++. Ce sunt subprogrameleCel mai frecvent element dintr-un șir în C++Factorialul unui număr în C++Șirul lui Fibonacci în C++Ce este o variabilă unsigned în C++?Instrucțiunea de decizie în C++: if, else, switch, caseCombinatorică în C++: permutări, aranjamente, combinări și alteleTransformarea unei litere mari în literă mică în C++Ciurul lui Eratostene în C++Oglinditul unui număr în C++Ce este o funcție void în C++?Cifra maximă și minimă a unui număr în C++Numărul aranjamentelor în C++ (formula aranjamentelor)Cifra maximă a unui număr recursiv în C++Citirea și afișarea matricelor în C++Comentarii în C++Căutare binară în C++Ce înseamnă endl în C++?Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăVerifică dacă un număr dat este o putere de 2 în C++Prima cifră a unui număr în C++Instrucțiunea continue (structuri repetitive)Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Cel mai semnificativ bit în C++Transformarea unei litere mici în literă mare în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont