Informacje dotyczące zadań maturalnych z informatyki 2015

Informacje dotyczące zadań maturalnych z informatyki 2015
twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0
Bartolinho10 napisał(a):

Czyli mając np. liczbę 1100110 będzie (0+1)-(1+0)-(0+1)-(1) ?

  1. Dzielisz na liczby 2 cyfrowe uzupełniając z lewej jeśli jest nieparzyście - 1100110 = 01 10 01 10 = 1 2 1 2
  2. Dodajesz i odejmujesz na przemian od prawej: +2 -1 +2 -1 = 2
  3. Patrzysz czy podzielne przez 5
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

@Bartolinho10 ciekawi mnie trochę to twoje zadanie. Bo ewidentnie nie można tego liczyć na piechotę bo dane są za duże. Ale jednocześnie te cechy podzielności binarnej to nie jest takie coś co każdy zna. Podzielność przez 2 to jeszcze, ale 3 czy 5 to już nie w kij dmuchał i 99% maturzystów tego nie wie ani nie będzie w stanie wyprowadzić. Dlatego ciekawi mnie czego się spodziewali egzaminatorzy? Chyba ze to jakieś zadanie ze spoja ;]

B1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 268
0

@Shalom, akurat te zadanie było w informatorze o nowej maturze od 2015 roku :) Ja jeszcze zdaje starą maturę, więc cholera wie, czy na Infie zmienią się jakieś wymagania czy nie, mam tylko wymagania mojej matury..
właśnie też mi się tak wydaje, że nie jest to tak oczywiste dla każdego. zacząłem już się trochę przejmować, bo nie wiadomo czym mogą zaskoczyć...

mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Skoro zamierzają podnieś poziom zadań maturalnych aż o taką skalę mogli by również podnieś poziom nauczania informatyki w szkołach bo to jest kpina. Przez 4 lata w technikum o liczbach binarnych miałem jedynie konwersje dec <> bin ewentualnie hex <> bin, jedna lekcja z dodawania liczb binarnych i to koniec.

  • Rejestracja: dni
  • Ostatnio: dni
1

A ile bys chcial miec? Pol roku o systemach liczbowych? :D

W domu trzeba sie uczyc, a nie zwalac na mityczny 'poziom nauczania'.

B1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 268
0

Dorzuciłem kilka linii, ale coś jest nadal nie tak, wydaje mi się, ze chodzi tutaj o parzystość/nieparzystość zapisu liczby binarnej..

Kopiuj
 
int linie=0;
	while(linie<1000)
	{
		fgets(tab,201,plik);
		Last=strlen(tab)-2;
		if(tab[Last]=='0') P_2++;
		
		if(tab[Last]=='0' && tab[Last-1]=='0') suma_5=0;   //ustanawia sumę ostatnich 2 elementów
		if(tab[Last]=='1' && tab[Last-1]=='1') suma_5=3;
		if(tab[Last]=='1' && tab[Last-1]=='0') suma_5=1;
		if(tab[Last]=='0' && tab[Last-1]=='1') suma_5=2;
		
		for(i=0;i<strlen(tab);i+=2)
			{        
			if(tab[i]=='1') N_parz++;
   			if(tab[i+1]=='1') Parz++;
			}
		
		
		for(j=strlen(tab)-2;i<=0;i-=2)     // pętla od ostatniego elementu 
			{
			if(tab[j]=='0' && tab[j-1]=='0') suma_5-=0;  /odejmowanie kolejnych elementów od sumy
			if(tab[j]=='1' && tab[j-1]=='1') suma_5-=3;
			if(tab[j]=='1' && tab[j-1]=='0') suma_5-=1;
			if(tab[j]=='0' && tab[j-1]=='1') suma_5-=2;
			}
			
	roznica=Parz-N_parz;
	printf("nieparz- %d parz-%d  roznica- %d last - %c last-1 - %c suma-%d\n",N_parz,Parz,roznica,tab[Last],tab[Last-1], suma_5);
	if(roznica%3==0) P_3++;
	if(suma_5%5==0) P_5++;
	N_parz=0;
	Parz=0;	
	
	linie++;
	} 

A tutaj mam cały kod, który opracowała CKE w C++ :) Całkiem inaczej to zrobione, nie za bardzo kminię o co chodzi z tym modulo p, ale wygląda to na podobne rozwiązanie do mojego pierwotnego..

Kopiuj
 
#include <iostream>
#include <string>
using namespace std;

int reszta(string b, int p){
    const char zero = '0';
    
    int dl = b.length(); //obliczenie długości zapisu liczby b
    int d = 0; //po zakończeniu obliczeń wartością d będzie wartość dziesiętna
               //liczby b modulo p
    
    // schemat Hornera modulo p
    for (int j = 0; j < dl; j++){
        int cyfra = b[j] - zero; //odzyskanie kolejnej cyfry liczby b
                                 //poczynając od najbardziej znaczącej
        d = (d * 2 + cyfra) % p; //% jest operatorem modulo w C++
    }
    return d;      
}

int main(){
    string liczba;
    const int n = 1000; //rozmiar danych
    int podz_2 = 0, podz_3 = 0, podz_5 = 0; // podz_p - liczba liczb 
                                            // podzielnych przez p    
    for (int i = 0; i < n; i++){        
        cin >> liczba; //wczytanie kolejnej liczby;

        if (reszta(liczba, 2) == 0) podz_2++;
        if (reszta(liczba, 3) == 0) podz_3++;
        if (reszta(liczba, 5) == 0) podz_5++;
    }
        
    cout << "podzielne przez " << 2 << " : " << podz_2 << endl;
    cout << "podzielne przez " << 3 << " : " << podz_3 << endl;
    cout << "podzielne przez " << 5 << " : " << podz_5 << endl;
    
    return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.